using Shadowsocks.Protocol.Socks5; using System.IO.Pipelines; using System.Net; using System.Threading.Tasks; namespace Shadowsocks.Protocol.Shadowsocks { // shadowsocks payload protocol client class PayloadProtocolClient : IStreamClient { public async Task Connect(EndPoint destination, IDuplexPipe client, IDuplexPipe server) { var addrMem = server.Output.GetMemory(512); var addrLen = Socks5Message.SerializeAddress(addrMem, destination); server.Output.Advance(addrLen); await DuplexPipe.CopyDuplexPipe(client, server); } } }