Example #1
0
 /// <summary>
 /// Parse the kind of data we are receiving
 /// </summary>
 /// <returns></returns>
 private MessageType ReadMessageType(ClientTunnel client, byte[] data)
 {
     if (!client.Authenticated && client.AuthMethod == Method.Null)
     {
         return(MessageType.MethodRequest);
     }
     else if (!client.Authenticated && client.AuthMethod == Method.UserPassword)
     {
         return(MessageType.AuthRequest);
     }
     else if (data[0] == 0x05)
     {
         return(MessageType.DataRequest);
     }
     else
     {
         return(MessageType.Null);
     }
 }
        private void AcceptCallback(IAsyncResult ar)
        {
            try
            {
                if (disposedValue)
                {
                    return;
                }

                if (ar.AsyncState is TcpListener serverSocket)
                {
                    TcpClient clientTcpClient = serverSocket.EndAcceptTcpClient(ar);
                    var       client          = new ClientTunnel(clientTcpClient);

                    ThreadPool.QueueUserWorkItem((WaitCallback) =>
                    {
                        using (clientTcpClient)
                        {
                            using (client)
                            {
                                Clients.Add(client);
                                NonBlockingConsole.WriteLine($"Client {clientTcpClient?.Client?.RemoteEndPoint} trying to connect, handling on thread {Thread.CurrentThread.ManagedThreadId}");
                                client?.Listen();  //Blocking async
                                Clients.Remove(client);
                            }
                        }
                    });

                    //Keep listening incoming connections.
                    serverSocket.BeginAcceptTcpClient(AcceptCallback, Socks5Server);
                }

                if (disposedValue)
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                NonBlockingConsole.WriteLine(ex.Message);
            }
        }