Exemplo n.º 1
0
 internal void HandshakeReceive2Callback(IAsyncResult ar)
 {
     if (_closed)
     {
         return;
     }
     try
     {
         int bytesRead = _connection.EndReceive(ar);
         if (bytesRead >= 5)
         {
             _command = _connetionRecvBuffer[1];
             if (_command != CMD_CONNECT && _command != CMD_UDP_ASSOC)
             {
                 Logging.Debug("Unsupported CMD=" + _command);
                 Close();
             }
             else
             {
                 if (_command == CMD_CONNECT)
                 {
                     byte[] response = { Socks5Version, SuccessREP, Reserve, IpV4, 0, 0, 0, 0, 0, 0 };
                     _connection.BeginSend(response, 0, response.Length, SocketFlags.None,
                                           ResponseConnectCallback, null);
                 }
                 else if (_command == CMD_UDP_ASSOC)
                 {
                     ReadAddress(HandleUDPAssociate);
                 }
             }
         }
         else
         {
             Logging.Debug(
                 "failed to recv data in Shadowsocks.Controller.TCPHandler.handshakeReceive2Callback()");
             Close();
         }
     }
     catch (Exception e)
     {
         Logging.LogUsefulException(e);
         Close();
     }
 }