Exemplo n.º 1
0
        void ListenerThreadFn()
        {
            Sock.Listen((int)SocketOptionName.MaxConnections);

            try
            {
                do
                {
                    Socket connected = Sock.Accept();
                    Thread t         = new Thread(new ParameterizedThreadStart(RunningConnectionAccepterAndGetter));
                    NetworkConnectionThreadPasser p = new NetworkConnectionThreadPasser();
                    p.GUID = "";
                    p.net  = net.CloneElement();
                    p.sock = connected;
                    t.Start(p);
                } while (StopThread == false);
            }
            catch
            {
            }
            try
            {
                Sock.Close();
            }
            catch
            {
            }
        }
Exemplo n.º 2
0
        void CloseAll(string GUID, NetworkConnectionThreadPasser p)
        {
            Debug.WriteLine("WS SOCKET: " + GUID + " Close connection");
            try
            {
                p.ws.Close();
            }
            catch
            {
            }

            try
            {
                p.net.CloseWSServerPortMappingConnection(GUID);
            }
            catch
            {
            }

            try
            {
                p.sock.Close();
            }
            catch
            {
            }
        }
Exemplo n.º 3
0
        private void CloseAll(string GUID, NetworkConnectionThreadPasser p)
        {
            Debug.WriteLine("WS SOCKET: " + GUID + " Close connection");
            try
            {
                p.ws.Close();
            }
            catch
            {
            }

            p.net.PushConnectionToRemoteClose2(MachineID, GUID);

            try
            {
                p.sock.Close();
            }
            catch
            {
            }
        }
Exemplo n.º 4
0
        void RunningConnectionAccepterAndGetter(object s)
        {
            #region Websockets
            NetworkConnectionThreadPasser p = (NetworkConnectionThreadPasser)s;

            WSURL = p.net.GetWebsocketURL();

            PushConnectNetworkResult res = p.net.PushConnectToRemote2(MachineID, RemoteAddress, RemotePort);
            if (res == null)
            {
                OnStatusEvent(StatusID.RemoteConnectionError);
                p.sock.Close();
                return;
            }

            if (res.Result != 0)
            {
                OnStatusEvent(StatusID.RemoteConnectionStatusError);
                p.sock.Close();
                return;
            }

            Debug.WriteLine("WS SOCKET: " + res.ConnectedGUID + " Create connection");
            p.URL = WSURL + "websocket/mgmt-" + Uri.EscapeUriString(res.ConnectedGUID);
            Debug.WriteLine("WS URL: " + p.URL);

            Connections.Add(p);
            p.ws            = new WebSocket(p.URL);
            p.ws.OnMessage += Ws_OnMessage;
            p.ws.SetCookie(new WebSocketSharp.Net.Cookie("MGMT-SessionID", net.Session));
            p.ws.Connect();

            OnStatusEvent(StatusID.Success);

            while (p.sock.Connected == true && StopThread == false)
            {
                int av = p.sock.Available;
                if (av == 0)
                {
                    Thread.Sleep(10);
                    continue;
                }
                byte[] data = new byte[av];
                int    av2  = p.sock.Receive(data);
                if (av2 == 0)
                {
                    Thread.Sleep(10);
                    continue;
                }
                if (av != av2)
                {
                    byte[] data2 = new byte[av2];
                    for (int i = 0; i < av2; i++)
                    {
                        data2[i] = data[i];
                    }
                    data = data2;
                }

                OnRXTXEvent(null, true, 0, data.LongLength);
                try
                {
                    p.ws.Send(data);
                }
                catch (Exception ee)
                {
                    Debug.WriteLine(ee.ToString());
                    OnStatusEvent(StatusID.RemoteConnectionStatusError);
                    CloseAll(res.ConnectedGUID, p);
                    return;
                }
                OnRXTXEvent(null, false, 0, 0);
            }

            OnStatusEvent(StatusID.Success);
            CloseAll(res.ConnectedGUID, p);
            #endregion
        }
Exemplo n.º 5
0
        void ListenerThreadFn()
        {
            Sock.Listen((int)SocketOptionName.MaxConnections);
            int Counter;

            Thread ct = new Thread(new ThreadStart(ServerConnectThread));

            ct.Start();

            try
            {
                do
                {
                    bool ConnectedRes = false;
                    if (NewBeginAccept == true)
                    {
                        connectedevent.Reset();
                        Sock.BeginAccept(new AsyncCallback(AcceptAsync), Sock);
                        NewBeginAccept = false;
                    }

                    Counter = 0;
#if DEBUG
                    while (Counter < 30)
#else
                    while (Counter < 60)
#endif
                    {
                        ConnectedRes = connectedevent.WaitOne(1000);
                        if (ConnectedRes == false)
                        {
                            Counter++;
                        }
                        else
                        {
                            break;
                        }
                        if (StopThread == true)
                        {
                            break;
                        }
                    }

                    if (StopThread == true)
                    {
                        break;
                    }

                    if (ConnectedRes == true)
                    {
                        if (net == null)
                        {
                            //reject connection
                            NextConnected.Close();
                            continue;
                        }
                        else
                        {
                            Thread t = new Thread(new ParameterizedThreadStart(RunningConnectionAccepterAndGetter));
                            NetworkConnectionThreadPasser p = new NetworkConnectionThreadPasser();
                            p.RunningConnectionAccepterAndGetterThread = t;
                            p.GUID = "";
                            p.net  = net.CloneElement();
                            p.sock = NextConnected;
                            t.Start(p);
                        }
                    }
                } while (StopThread == false);
            }
            catch (Exception ee)
            {
                FoxEventLog.VerboseWriteEventLog("SEH in PortMappings_ConnectionNode::ListenerThreadFn() " + ee.ToString(), EventLogEntryType.Error);
            }
            try
            {
                Sock.Close();
            }
            catch
            {
            }
            StopThread = true;
        }
Exemplo n.º 6
0
        void RunningConnectionAccepterAndGetter(object s)
        {
            NetworkConnectionThreadPasser p = (NetworkConnectionThreadPasser)s;

            string WSURL = p.net.GetWebsocketURL();

            PushConnectNetworkResult res = p.net.CreateWSServerPortMappingConnection(Mapping.ID);

            if (res == null)
            {
                p.sock.Close();
                return;
            }

            if (res.Result != 0)
            {
                p.sock.Close();
                return;
            }

            Debug.WriteLine("WS SOCKET: " + res.ConnectedGUID + " Create connection");
            p.URL = WSURL + "websocket/agent-" + Uri.EscapeUriString(res.ConnectedGUID);
            Debug.WriteLine("WS URL: " + p.URL);

            Connections.Add(p);
            p.ws            = new WebSocket(p.URL);
            p.ws.OnMessage += Ws_OnMessage;
            p.ws.SetCookie(new WebSocketSharp.Net.Cookie("Agent-SessionID", net.Session));
            p.ws.Connect();

            DateTime pingtestdt = DateTime.Now;

            while (p.sock.Connected == true && StopThread == false)
            {
                int av = p.sock.Available;
                if (av == 0)
                {
                    if (pingtestdt.AddMinutes(1) < DateTime.Now)
                    {
                        pingtestdt = DateTime.Now;
                        p.ws.Ping();
                        if (p.ws.IsAlive == false)
                        {
                            break;
                        }
                    }
                    Thread.Sleep(10);
                    continue;
                }
                byte[] data = new byte[av];
                int    av2  = p.sock.Receive(data);
                if (av2 == 0)
                {
                    if (pingtestdt.AddMinutes(1) < DateTime.Now)
                    {
                        pingtestdt = DateTime.Now;
                        p.ws.Ping();
                        if (p.ws.IsAlive == false)
                        {
                            break;
                        }
                    }
                    Thread.Sleep(10);
                    continue;
                }
                if (av != av2)
                {
                    byte[] data2 = new byte[av2];
                    for (int i = 0; i < av2; i++)
                    {
                        data2[i] = data[i];
                    }
                    data = data2;
                }

                if (pingtestdt.AddMinutes(1) < DateTime.Now)
                {
                    pingtestdt = DateTime.Now;
                    p.ws.Ping();
                    if (p.ws.IsAlive == false)
                    {
                        break;
                    }
                }

                try
                {
                    if (p.ws.IsAlive == false)
                    {
                        break;
                    }
                    p.ws.Send(data);
                }
                catch (Exception ee)
                {
                    Debug.WriteLine(ee.ToString());
                    CloseAll(res.ConnectedGUID, p);
                    return;
                }
            }

            CloseAll(res.ConnectedGUID, p);
        }