private static void HandleClient(Socket socket2Client) { lock (clients) { while (clients.Count > Conf.maxClientsCount) { Tunnel tunnel2Close = clients.Dequeue(); tunnel2Close.Close(); } } Thread threadHandleClient = new Thread(_handleClient); threadHandleClient.IsBackground = true; threadHandleClient.Start(socket2Client); }
private static void handleClient(Socket socket2Client, int ipepIndex) { Tunnel tunnel2Add = new Tunnel(socket2Client, null, Conf.encryptionKey); bool result = RequestHandler.Handle(tunnel2Add); if (result) { tunnel2Add.Flow(); } else { tunnel2Add.Close(); } reqGotNumbers.Down(); }
private static bool CreateTunnel(out Tunnel tunnel) { bool succeed = false; Tunnel result = new Tunnel(null, null, Conf.encryptionKey); succeed = Connect2Relayer(result); if (succeed) { tunnel = result; } else { result.Close(); tunnel = null; } return(succeed); }
private static Tunnel HandleTCPReq(byte[] request, Socket socket2Client) { Tunnel result = null; if (request != null && socket2Client != null) { IPAddress ip = GetIP(request); int port = GetPort(request); if (ip != null && port != 0) { IPEndPoint reqIPEP = new IPEndPoint(ip, port); string reply; EagleTunnelArgs e = new EagleTunnelArgs(); e.EndPoint = reqIPEP; result = EagleTunnelSender.Handle( EagleTunnelHandler.EagleTunnelRequestType.TCP, e); if (result != null) { reply = "\u0005\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000"; } else { reply = "\u0005\u0001\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000"; } byte[] buffer = Encoding.ASCII.GetBytes(reply); int written; try { written = socket2Client.Send(buffer); } catch { written = 0; } if (result != null) { if (written > 0) { result.SocketL = socket2Client; } else { result.Close(); result = null; } } } } return(result); }
public static Tunnel Handle( string firstMsg, System.Net.Sockets.Socket socket2Client) { Tunnel result = null; if (firstMsg != null && socket2Client != null) { if (HTTPReqArgs.TryParse(firstMsg, out HTTPReqArgs e0)) { IPEndPoint reqEP = HTTPReqArgs.GetIPEndPoint(e0); EagleTunnelArgs e1 = new EagleTunnelArgs(); e1.EndPoint = reqEP; Tunnel tunnel = EagleTunnelSender.Handle( EagleTunnelHandler.EagleTunnelRequestType.TCP, e1); if (tunnel != null) { tunnel.SocketL = socket2Client; bool done; if (e0.HTTP_Request_Type == HTTPRequestType.CONNECT) { // HTTPS: reply web client; string re443 = "HTTP/1.1 200 Connection Established\r\n\r\n"; done = tunnel.WriteL(re443); } else { // HTTP: relay new request to web server string newReq = HTTPReqArgs.CreateNewRequest(firstMsg); done = tunnel.WriteR(newReq); } if (done) { result = tunnel; } else { tunnel.Close(); } } } } return(result); }
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); }
public static Tunnel Handle(string firstMsg, Socket socket2Client) { Tunnel result = null; if (!string.IsNullOrEmpty(firstMsg) && socket2Client != null) { Tunnel tunnel = CheckVersion(firstMsg, socket2Client); if (tunnel != null) { if (CheckAuthen(tunnel)) { string req = tunnel.ReadStringL(); if (!string.IsNullOrEmpty(req)) { EagleTunnelRequestType type = GetType(req); bool done = false; switch (type) { case EagleTunnelRequestType.DNS: HandleDNSReq(req, tunnel); // no need to continue; break; case EagleTunnelRequestType.TCP: done = TCPReqHandle(req, tunnel); break; } if (done) { result = tunnel; } else { tunnel.Close(); } } } } } return(result); }