public void TcpProxyTest() { var sender = new TcpNetworkSender("tcp://foo:1234", AddressFamily.Unspecified); var socket = sender.CreateSocket("foo", AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Assert.IsType <SocketProxy>(socket); }
public void TcpProxyTest() { var sender = new TcpNetworkSender("tcp://foo:1234", AddressFamily.Unspecified); var socket = sender.CreateSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Assert.IsInstanceOfType(typeof(SocketProxy), socket); }
private unsafe bool CreateSession(SocketAsyncEventArgs e) { var connArgs = (ConnectionArgs)e.UserToken; // We need at least 4 bytes to determine session if (e.BytesTransferred < 4) { e.SetBuffer(e.BytesTransferred, e.Buffer.Length - e.BytesTransferred); return(true); } WireFormat protocol; // FASTER's binary protocol family is identified by inverted size (int) field in the start of a packet // This results in a fourth byte value (little endian) > 127, denoting a non-ASCII wire format. if (e.Buffer[3] > 127) { if (e.BytesTransferred < 4 + BatchHeader.Size) { e.SetBuffer(e.BytesTransferred, e.Buffer.Length - e.BytesTransferred); return(true); } fixed(void *bh = &e.Buffer[4]) protocol = ((BatchHeader *)bh)->Protocol; } else if (e.Buffer[0] == 71 && e.Buffer[1] == 69 && e.Buffer[2] == 84) { protocol = WireFormat.WebSocket; } else { protocol = WireFormat.ASCII; } if (!GetSessionProviders().TryGetValue(protocol, out var provider)) { Console.WriteLine($"Unsupported incoming wire format {protocol}"); DisposeConnectionSession(e); return(false); } INetworkSender networkSender = new TcpNetworkSender(connArgs.socket, provider.GetMaxSizeSettings); if (!AddSession(protocol, ref provider, networkSender, out var session)) { DisposeConnectionSession(e); return(false); } connArgs.session = session; if (Disposed) { DisposeConnectionSession(e); return(false); } ProcessRequest(e); return(true); }