Esempio n. 1
0
        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);
        }