示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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);
            }
        }
示例#4
0
        /// <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);
            }
        }
示例#5
0
        /// <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);
            }
        }
示例#6
0
        /// <summary>
        /// Stop port forwarding that was set up earlier.
        /// </summary>

        public void CloseUDP(int port, OnPortRequest callback)
        {
            Close(port, false, callback);
        }
示例#7
0
        /// <summary>
        /// Stop port forwarding that was set up earlier.
        /// </summary>

        public void CloseTCP(int port, OnPortRequest callback)
        {
            Close(port, true, callback);
        }
示例#8
0
        /// <summary>
        /// Open up a UDP port on the gateway.
        /// </summary>

        public void OpenUDP(int port, OnPortRequest callback)
        {
            Open(port, false, callback);
        }
示例#9
0
        /// <summary>
        /// Open up a TCP port on the gateway.
        /// </summary>

        public void OpenTCP(int port, OnPortRequest callback)
        {
            Open(port, true, callback);
        }
示例#10
0
        /// <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);
            }
        }
示例#11
0
        /// <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);
            }
        }
示例#12
0
 /// <summary>
 /// Open up a UDP port on the gateway.
 /// </summary>
 public void OpenUDP(int port, OnPortRequest callback)
 {
     Open(port, false, callback);
 }
示例#13
0
 /// <summary>
 /// Open up a TCP port on the gateway.
 /// </summary>
 public void OpenTCP(int port, OnPortRequest callback)
 {
     Open(port, true, callback);
 }
示例#14
0
 /// <summary>
 /// Stop port forwarding that was set up earlier.
 /// </summary>
 public void CloseUDP(int port, OnPortRequest callback)
 {
     Close(port, false, callback);
 }
示例#15
0
 /// <summary>
 /// Stop port forwarding that was set up earlier.
 /// </summary>
 public void CloseTCP(int port, OnPortRequest callback)
 {
     Close(port, true, callback);
 }