public static bool Handle(ByteBuffer request, Tunnel tunnel) { bool result = false; if (request != null && tunnel != null) { int version = request[0]; // check if is socks version 5 if (version == '\u0005') { string reply = "\u0005\u0000"; result = tunnel.WriteL(reply); if (result) { ByteBuffer buffer = new ByteBuffer(); int read = tunnel.ReadL(buffer); if (read >= 2) { SOCKS5_CMDType cmdType = (SOCKS5_CMDType)buffer[1]; switch (cmdType) { case SOCKS5_CMDType.Connect: result = HandleTCPReq(buffer, tunnel); break; } } } } } return(result); }
public static bool Handle(Tunnel tunnel) { bool result = false; if (tunnel == null) { result = false; } else { ByteBuffer firstMsg = new ByteBuffer(); int read = tunnel.ReadL(firstMsg); if (read > 0) { string firstMsg_Str = firstMsg.ToString(); RequestType reqType = GetType(firstMsg); switch (reqType) { case RequestType.Eagle_Tunnel: if (Conf.EnableEagleTunnel) { result = EagleTunnelHandler.Handle( firstMsg_Str, tunnel); } break; case RequestType.HTTP_Proxy: if (Conf.EnableHTTP) { result = HTTPHandler.Handle( firstMsg_Str, tunnel); } break; case RequestType.SOCKS5: if (Conf.EnableSOCKS) { result = SocksHandler.Handle( firstMsg, tunnel); } break; } } } return(result); }