예제 #1
0
 public HttpConnection(IMyStream myStream, EPPair epPair, NaiveHttpServer server)
 {
     this.baseStream = myStream.ToStream();
     this.myStream   = myStream;
     this.server     = server;
     this.epPair     = epPair;
 }
예제 #2
0
        protected virtual async Task HandleAcceptedTcp(TcpClient tcpClient)
        {
            EPPair         epPair     = new EPPair();
            HttpConnection connection = null;

            try {
                epPair = EPPair.FromSocket(tcpClient.Client);
                var myStream = MyStream.FromSocket(tcpClient.Client);
                var stream   = myStream.ToStream();
                connection = this.CreateHttpConnectionObject(tcpClient, stream, epPair);
                if (connection == null)
                {
                    try {
                        tcpClient.Close();
                    } catch (Exception) { }
                    return;
                }
            } catch (Exception e) {
                Logger.exception(e, Logging.Level.Error, $"({epPair}) httpConnection creating");
                return;
            }
            try {
                await connection.Process();
            } catch (Exception e) {
                try {
                    this.OnHttpConnectionException(e, connection);
                } catch (Exception e2) {
                    Logger.exception(e2, Logging.Level.Error, "In OnHttpConnectionExceptionExit");
                }
            }
        }
예제 #3
0
        public override void OnNewConnection(TcpClient tcpClient)
        {
            Socket socket     = tcpClient.Client;
            var    epPair     = EPPair.FromSocket(socket);
            var    dataStream = GetMyStreamFromSocket(socket);
            var    dest       = Unsafe.GetOriginalDst(socket, Logger);

            HandleIncommingConnection(InConnectionTcp.Create(this, dest, dataStream, epPair.ToString()));
        }
예제 #4
0
        public override void OnNewConnection(TcpClient tcpClient)
        {
            Socket socket     = tcpClient.Client;
            var    epPair     = EPPair.FromSocket(socket);
            var    dataStream = GetMyStreamFromSocket(socket);
            var    dest       = this.dest.WithDefaultPort(listen.Port);

            HandleIncommingConnection(InConnectionTcp.Create(this, dest, dataStream, epPair.ToString()));
        }
예제 #5
0
        public static HttpConnection CreateHttpConnectionFromMyStream(IMyStream myStream, NaiveHttpServer httpSvr)
        {
            EPPair epPair;

            if (myStream is SocketStream ss)
            {
                epPair = ss.EPPair;
            }
            else
            {
                // use fake eppair
                epPair = new EPPair(new IPEndPoint(IPAddress.Loopback, 1), new IPEndPoint(IPAddress.Loopback, 2));
            }
            return(new HttpConnection(myStream.ToStream(), epPair, httpSvr));
        }
예제 #6
0
            public SocksInConnection(TcpClient tcp, SocksInAdapter adapter) : base(adapter)
            {
                _eppair   = EPPair.FromSocket(tcp.Client);
                _adapter  = adapter;
                _stream   = adapter.GetMyStreamFromSocket(tcp.Client);
                socks5svr = new Socks5Server(_stream);

                Socks5Server.Methods methods = Socks5Server.Methods.None;
                if (adapter._allowNoAuth)
                {
                    methods |= Socks5Server.Methods.NoAuth;
                }
                if (adapter.users != null)
                {
                    methods |= Socks5Server.Methods.UsernamePassword;
                }
                socks5svr.AcceptMethods = methods;

                outRef = adapter._noAuthOut;

                socks5svr.Auth = Auth;
            }
예제 #7
0
 /// <summary>
 /// Create <see cref="HttpConnection"/>
 /// </summary>
 /// <param name="client">Accepted tcp client</param>
 /// <returns></returns>
 protected virtual HttpConnection CreateHttpConnectionObject(TcpClient client, Stream stream, EPPair ePPair)
 {
     return(new HttpConnection(stream, ePPair, this)
     {
         socket = client.Client
     });
 }
예제 #8
0
 protected SocketStream(Socket socket)
 {
     this.Socket  = socket;
     this._ePPair = EPPair.FromSocket(socket);
     IsUdp        = socket.ProtocolType == ProtocolType.Udp;
 }
예제 #9
0
 public WebSocketServer(HttpConnection p) : base(p.myStream, false)
 {
     this.p      = p;
     this.epPair = new EPPair(p.localEP, p.remoteEP);
 }