Пример #1
0
        private void ReadPackets(IAsyncResult ar)
        {
            var readState = (ReadState)ar.AsyncState;
            var socket    = readState.Socket;
            var buffer    = readState.Buffer;

            var read = -1;

            try
            {
                read = socket.EndReceive(ar);
            }
            catch (Exception)
            {
                Console.WriteLine("[DISCONNECT] Client Disconnected from server");
                KillSocket(socket);
                return;
            }

            if (read == 0)
            {
                if (state == ProxyState.Running)
                {
                    socket.BeginReceive(readState.Buffer, 0, readState.Buffer.Length, SocketFlags.None, ReadPackets, readState);
                }
                return;
            }

            var text = Encoding.ASCII.GetString(buffer, 0, read);

            if (readState.Request != null && !readState.Request.Ended)
            {
                text = readState.Request.FullRequest + text;
            }

            var request = new ProxyRequest(text);

            if (request.IsFake)
            {
                KillSocket(socket);
                return;
            }

            if (request.Ended && !request.IsFake)
            {
                Console.WriteLine(request.ToString());
                InternalSend(socket, request);
                return;
            }

            if (request.Ended)
            {
                return;
            }
            readState.Request = request;
            Array.Clear(buffer, 0, buffer.Length);
            if (state == ProxyState.Running)
            {
                socket.BeginReceive(readState.Buffer, 0, readState.Buffer.Length, SocketFlags.None, ReadPackets, readState);
            }
        }