/// <summary> /// Open up a port on the gateway. /// </summary> void Open(int port, bool tcp, OnPortRequest callback) { int id = (port << 8) | (tcp ? 1 : 0); if (port > 0 && !mPorts.Contains(id) && mStatus != Status.Failure) { mPorts.Add(id); ExtraParams xp = new ExtraParams(); xp.callback = callback; xp.port = port; xp.protocol = tcp ? ProtocolType.Tcp : ProtocolType.Udp; xp.action = "AddPortMapping"; xp.request = "<NewRemoteHost></NewRemoteHost>\n" + "<NewExternalPort>" + port + "</NewExternalPort>\n" + "<NewProtocol>" + (tcp ? "TCP" : "UDP") + "</NewProtocol>\n" + "<NewInternalPort>" + port + "</NewInternalPort>\n" + "<NewInternalClient>" + Tools.localAddress + "</NewInternalClient>\n" + "<NewEnabled>1</NewEnabled>\n" + "<NewPortMappingDescription>" + name + "</NewPortMappingDescription>\n" + "<NewLeaseDuration>0</NewLeaseDuration>\n"; xp.th = new Thread(OpenRequest); lock (mThreads) mThreads.Add(xp.th); xp.th.Start(xp); } else if (callback != null) { callback(this, port, tcp ? ProtocolType.Tcp : ProtocolType.Udp, false); } }
/// <summary> /// Stop port forwarding that was set up earlier. /// </summary> void Close(int port, bool tcp, OnPortRequest callback) { int id = (port << 8) | (tcp ? 1 : 0); if (port > 0 && mPorts.Remove(id) && mStatus == Status.Success) { ExtraParams xp = new ExtraParams(); xp.callback = callback; xp.port = port; xp.protocol = tcp ? ProtocolType.Tcp : ProtocolType.Udp; xp.action = "DeletePortMapping"; xp.request = "<NewRemoteHost></NewRemoteHost>\n" + "<NewExternalPort>" + port + "</NewExternalPort>\n" + "<NewProtocol>" + (tcp ? "TCP" : "UDP") + "</NewProtocol>\n"; if (callback != null) { xp.th = new Thread(CloseRequest); lock (mThreads) { mThreads.Add(xp.th); xp.th.Start(xp); } } else { CloseRequest(xp); } } else if (callback != null) { callback(this, port, tcp ? ProtocolType.Tcp : ProtocolType.Udp, false); } }
/// <summary> /// Open up a port on the gateway. /// </summary> void Open(int port, bool tcp, OnPortRequest callback) { // IPv6 doesn't need port forwarding if (TcpProtocol.defaultListenerInterface.AddressFamily == AddressFamily.InterNetworkV6) { return; } if (port > 0) { int id = (port << 8) | (tcp ? 1 : 0); if (!mPorts.Contains(id) && mStatus != Status.Failure) { if (mStatus == Status.Inactive) { Start(); WaitForThreads(); } string addr = Tools.localAddress.ToString(); if (addr == "127.0.0.1") { return; } mPorts.Add(id); ExtraParams xp = new ExtraParams(); xp.callback = callback; xp.port = port; xp.protocol = tcp ? ProtocolType.Tcp : ProtocolType.Udp; xp.action = "AddPortMapping"; xp.request = "<NewRemoteHost></NewRemoteHost>\n" + "<NewExternalPort>" + port + "</NewExternalPort>\n" + "<NewProtocol>" + (tcp ? "TCP" : "UDP") + "</NewProtocol>\n" + "<NewInternalPort>" + port + "</NewInternalPort>\n" + "<NewInternalClient>" + addr + "</NewInternalClient>\n" + "<NewEnabled>1</NewEnabled>\n" + "<NewPortMappingDescription>" + name + "</NewPortMappingDescription>\n" + "<NewLeaseDuration>0</NewLeaseDuration>\n"; xp.th = new Thread(OpenRequest); lock (mThreads) mThreads.Add(xp.th); xp.th.Start(xp); return; } } if (callback != null) { callback(this, port, tcp ? ProtocolType.Tcp : ProtocolType.Udp, false); } }
/// <summary> /// Open up a port on the gateway. /// </summary> private void Open(int port, bool tcp, OnPortRequest callback) { int id = (port << 8) | (tcp ? 1 : 0); if (port > 0 && !mPorts.Contains(id) && mStatus != Status.Failure) { ListLessGarb <IPAddress> debug = NetworkUtility.localAddresses; if (mDiscover == null) { mDiscover = new Thread(ThreadDiscover); mThreads.Add(mDiscover); mDiscover.Start(mDiscover); } string addr = NetworkUtility.localAddress.ToString(); if (addr == "127.0.0.1") { return; } mPorts.Add(id); ExtraParams xp = new ExtraParams(); xp.callback = callback; xp.port = port; xp.protocol = tcp ? ProtocolType.Tcp : ProtocolType.Udp; xp.action = "AddPortMapping"; xp.request = "<NewRemoteHost></NewRemoteHost>\n" + "<NewExternalPort>" + port + "</NewExternalPort>\n" + "<NewProtocol>" + (tcp ? "TCP" : "UDP") + "</NewProtocol>\n" + "<NewInternalPort>" + port + "</NewInternalPort>\n" + "<NewInternalClient>" + addr + "</NewInternalClient>\n" + "<NewEnabled>1</NewEnabled>\n" + "<NewPortMappingDescription>" + name + "</NewPortMappingDescription>\n" + "<NewLeaseDuration>0</NewLeaseDuration>\n"; xp.th = new Thread(OpenRequest); lock (mThreads) { mThreads.Add(xp.th); } xp.th.Start(xp); Debug.Log("[UPnP:Open(" + port + ", " + (tcp ? "TCP" : "UDP") + ")] -> Requested"); } else if (callback != null) { callback(this, port, tcp ? ProtocolType.Tcp : ProtocolType.Udp, false); } }
/// <summary> /// Open up a port on the gateway. /// </summary> void Open(int port, bool tcp, OnPortRequest callback) { if (port > 0) { int id = (port << 8) | (tcp ? 1 : 0); if (!mPorts.Contains(id) && mStatus != Status.Failure) { if (mStatus == Status.Inactive) { Start(); WaitForThreads(); } string addr = Tools.localAddress.ToString(); if (addr == "127.0.0.1") { return; } #if UNITY_EDITOR UnityEngine.Debug.Log("Opening " + (tcp ? "TCP" : "UDP") + " port " + port); #endif mPorts.Add(id); ExtraParams xp = new ExtraParams(); xp.callback = callback; xp.port = port; xp.protocol = tcp ? ProtocolType.Tcp : ProtocolType.Udp; xp.action = "AddPortMapping"; xp.request = "<NewRemoteHost></NewRemoteHost>\n" + "<NewExternalPort>" + port + "</NewExternalPort>\n" + "<NewProtocol>" + (tcp ? "TCP" : "UDP") + "</NewProtocol>\n" + "<NewInternalPort>" + port + "</NewInternalPort>\n" + "<NewInternalClient>" + addr + "</NewInternalClient>\n" + "<NewEnabled>1</NewEnabled>\n" + "<NewPortMappingDescription>" + name + "</NewPortMappingDescription>\n" + "<NewLeaseDuration>0</NewLeaseDuration>\n"; xp.th = new Thread(OpenRequest); lock (mThreads) mThreads.Add(xp.th); xp.th.Start(xp); return; } } if (callback != null) { callback(this, port, tcp ? ProtocolType.Tcp : ProtocolType.Udp, false); } }
/// <summary> /// Stop port forwarding that was set up earlier. /// </summary> public void CloseUDP(int port, OnPortRequest callback) { Close(port, false, callback); }
/// <summary> /// Stop port forwarding that was set up earlier. /// </summary> public void CloseTCP(int port, OnPortRequest callback) { Close(port, true, callback); }
/// <summary> /// Open up a UDP port on the gateway. /// </summary> public void OpenUDP(int port, OnPortRequest callback) { Open(port, false, callback); }
/// <summary> /// Open up a TCP port on the gateway. /// </summary> public void OpenTCP(int port, OnPortRequest callback) { Open(port, true, callback); }
/// <summary> /// Open up a port on the gateway. /// </summary> void Open(int port, bool tcp, OnPortRequest callback) { if (mStatus == Status.Inactive) { Start(); WaitForThreads(); } int id = (port << 8) | (tcp ? 1 : 0); if (port > 0 && !mPorts.Contains(id) && mStatus != Status.Failure) { string addr = Tools.localAddress.ToString(); if (addr == "127.0.0.1") return; mPorts.Add(id); ExtraParams xp = new ExtraParams(); xp.callback = callback; xp.port = port; xp.protocol = tcp ? ProtocolType.Tcp : ProtocolType.Udp; xp.action = "AddPortMapping"; xp.request = "<NewRemoteHost></NewRemoteHost>\n" + "<NewExternalPort>" + port + "</NewExternalPort>\n" + "<NewProtocol>" + (tcp ? "TCP" : "UDP") + "</NewProtocol>\n" + "<NewInternalPort>" + port + "</NewInternalPort>\n" + "<NewInternalClient>" + addr + "</NewInternalClient>\n" + "<NewEnabled>1</NewEnabled>\n" + "<NewPortMappingDescription>" + name + "</NewPortMappingDescription>\n" + "<NewLeaseDuration>0</NewLeaseDuration>\n"; xp.th = new Thread(OpenRequest); lock (mThreads) mThreads.Add(xp.th); xp.th.Start(xp); } else if (callback != null) { callback(this, port, tcp ? ProtocolType.Tcp : ProtocolType.Udp, false); } }
/// <summary> /// Stop port forwarding that was set up earlier. /// </summary> void Close(int port, bool tcp, OnPortRequest callback) { int id = (port << 8) | (tcp ? 1 : 0); if (port > 0 && mPorts.Remove(id) && mStatus == Status.Success) { ExtraParams xp = new ExtraParams(); xp.callback = callback; xp.port = port; xp.protocol = tcp ? ProtocolType.Tcp : ProtocolType.Udp; xp.action = "DeletePortMapping"; xp.request = "<NewRemoteHost></NewRemoteHost>\n" + "<NewExternalPort>" + port + "</NewExternalPort>\n" + "<NewProtocol>" + (tcp ? "TCP" : "UDP") + "</NewProtocol>\n"; if (callback != null) { xp.th = new Thread(CloseRequest); lock (mThreads) { mThreads.Add(xp.th); xp.th.Start(xp); } } else CloseRequest(xp); } else if (callback != null) { callback(this, port, tcp ? ProtocolType.Tcp : ProtocolType.Udp, false); } }