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(); }
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(); }); }