Example #1
0
        static void OnDirectTcpIpReceived(object sender, TcpRequestArgs e)
        {
            Console.WriteLine("Received a request to forward data to {0}:{1}", e.Host, e.Port);

            var allow = true;  // func(e.Host, e.Port, e.AttachedUserauthArgs);

            if (!allow)
            {
                return;
            }

            var tcp = new TcpForwardService(e.Host, e.Port, e.OriginatorIP, e.OriginatorPort);

            e.Channel.DataReceived  += (ss, ee) => tcp.OnData(ee);
            e.Channel.CloseReceived += (ss, ee) => tcp.OnClose();
            tcp.DataReceived        += (ss, ee) => e.Channel.SendData(ee);
            tcp.CloseReceived       += (ss, ee) => e.Channel.SendClose();
            tcp.Start();
        }
Example #2
0
        static void service_TcpForwardRequest(object sender, TcpRequestArgs e)
        {
            Console.WriteLine("Received a request to forward data to {0}:{1}", e.Host, e.Port);

            e.OnClientData = (byte[] data) =>
            {
                // write to console out, or could set to another server
                // an exception should be throw if the data could not be sent, this
                // will close the underlying resources
                var dataAsStr = Encoding.UTF8.GetString(data); Console.WriteLine("Received data: " + dataAsStr);
            };
            e.OnClientDisconnect = () =>
            {
                // cleanup any resources here
                Console.WriteLine("Connection closed!");
            };

            Task.Run(() =>
            {
                // You need to wait until the underlying client is ready to
                // allow data to be sent
                while (!e.ClientReady())
                {
                    Task.Delay(100).Wait();
                }

                var rand        = new Random();
                var randomValue = rand.Next();
                e.OnServerData(Encoding.ASCII.GetBytes("OK " + randomValue));

                Task.Delay(5000).Wait();

                // when the server side is finished
                e.OnServerDisconnect();
            });
        }