public static bool Handle(EagleTunnelHandler.EagleTunnelRequestType type, EagleTunnelArgs e)
        {
            bool result = false;

            if (e != null)
            {
                switch (type)
                {
                case EagleTunnelHandler.EagleTunnelRequestType.DNS:
                    SendDNSReq(e);
                    break;

                case EagleTunnelHandler.EagleTunnelRequestType.TCP:
                    result = SendTCPReq(e);
                    break;

                case EagleTunnelHandler.EagleTunnelRequestType.LOCATION:
                    SendLOCATIONReq(e);
                    break;

                case EagleTunnelHandler.EagleTunnelRequestType.Unknown:
                default:
                    break;
                }
            }
            return(result);
        }
Beispiel #2
0
        public static Tunnel Handle(EagleTunnelHandler.EagleTunnelRequestType type, EagleTunnelArgs e)
        {
            Tunnel result = null;

            if (type != EagleTunnelHandler.EagleTunnelRequestType.Unknown &&
                e != null)
            {
                IPEndPoint ipeOfServer   = Conf.GetRemoteIPEndPoint();
                Socket     socket2Server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                try {
                    socket2Server.Connect(ipeOfServer);
                } catch { socket2Server = null; }
                Tunnel tunnel = CheckVersion(socket2Server);
                if (tunnel != null)
                {
                    bool done = CheckUser(tunnel);
                    if (done)
                    {
                        switch (type)
                        {
                        case EagleTunnelHandler.EagleTunnelRequestType.DNS:
                            DNSReqSender(tunnel, e);
                            done = false;     // no need to continue;
                            break;

                        case EagleTunnelHandler.EagleTunnelRequestType.TCP:
                            done = TCPReqSender(tunnel, e);
                            break;
                        }
                    }
                    if (done)
                    {
                        result = tunnel;
                    }
                    else
                    {
                        tunnel.Close();
                    }
                }
            }
            return(result);
        }