Exemple #1
0
        void Proxy(TcpClient client, TcpClient proxy)
        {
            byte[] buffer = new byte[65536];
            using (NetworkStream proxystream = proxy.GetStream())
            {
                using (NetworkStream clientstream = client.GetStream())
                {
                    while (client.Connected && proxy.Connected)
                    {
                        bool available = false;
                        if (proxystream.DataAvailable)
                        {
                            int read = proxystream.Read(buffer, 0, 65536);
                            if (read > 0)
                            {
                                ProxyPacket packet = new ProxyPacket {
                                    EndPoint = proxy.Client.RemoteEndPoint,
                                    Data     = buffer.Take(read).ToArray(),
                                    Source   = proxy,
                                    Target   = client
                                };
                                OnPacketReceived(packet);
                                if (packet.Forward && packet.Data.Length > 0)
                                {
                                    clientstream.Write(packet.Data, 0, packet.Data.Length);
                                }
                            }
                            available = true;
                        }

                        if (clientstream.DataAvailable)
                        {
                            int read = clientstream.Read(buffer, 0, 65536);
                            if (read > 0)
                            {
                                ProxyPacket packet = new ProxyPacket
                                {
                                    EndPoint = client.Client.RemoteEndPoint,
                                    Data     = buffer.Take(read).ToArray(),
                                    Source   = client,
                                    Target   = proxy
                                };
                                OnPacketReceived(packet);
                                if (packet.Forward && packet.Data.Length > 0)
                                {
                                    proxystream.Write(packet.Data, 0, packet.Data.Length);
                                }
                            }
                            available = true;
                        }

                        if (!available)
                        {
                            Thread.Sleep(50);
                        }
                    }
                }
            }
            client.Close();
            proxy.Close();
        }
Exemple #2
0
 /// <summary>
 /// called when a packet was received by an endpoint
 /// </summary>
 /// <param name="packet">packet received</param>
 protected virtual void OnPacketReceived(ProxyPacket packet)
 {
     PacketReceived?.Invoke(packet);
 }