public async Task No_authentication_should_work() { var stream = new BufferReadOnlyStream(5, 1, 0); var greeting = await Greeting.ReadFromAsync(stream, this._bufferPool).ConfigureAwait(true); greeting.SupportedAuthenticationMethods.Should().Equal(AuthenticationMethod.None); }
public void No_supported_authentication_methods_should_throw() { var stream = new BufferReadOnlyStream(5, 0, 0); Func <Task> act = () => Greeting.ReadFromAsync(stream, this._bufferPool); act.Should().Throw <InvalidDataException>().And.Message.Should().ContainEquivalentOf("authentication methods"); }
public void Wrong_protocol_version_should_throw() { var stream = new BufferReadOnlyStream(4, 1, 0); Func <Task> act = () => Greeting.ReadFromAsync(stream, this._bufferPool); act.Should().Throw <InvalidDataException>().And.Message.Should().ContainEquivalentOf("version"); }
public async Task Domain_address() { var bytes = s_ValidDomainBindRequest.ToArray(); var stream = new BufferReadOnlyStream(bytes); var request = await Command.ReadFromAsync(stream, this._bufferPool).ConfigureAwait(true); request.CommandType.Should().Be(CommandType.Bind); request.EndPoint.Should().Be(new DnsEndPoint("google.com", 65534)); }
public async Task Ipv6_address() { var bytes = s_ValidIpv6BindRequest.ToArray(); var stream = new BufferReadOnlyStream(bytes); var request = await Command.ReadFromAsync(stream, this._bufferPool).ConfigureAwait(true); request.CommandType.Should().Be(CommandType.Bind); request.EndPoint.Should().Be(new IPEndPoint(IPAddress.Parse("102:304:506:708:90a:b0c:d0e:f10"), 65534)); }
public async Task All_authentication_methods_supported() { var stream = new BufferReadOnlyStream( new[] { 5, 255 } .Concat(Enumerable.Range(0, 255)) .Select(x => (byte)x) .ToArray()); var greeting = await Greeting .ReadFromAsync(stream, this._bufferPool) .ConfigureAwait(true); greeting.SupportedAuthenticationMethods .Should() .Equal(Enumerable.Range(0, 255).Select(x => (AuthenticationMethod)x)); }
public static DatagramHeader ReadFrom(ArraySegment <byte> buffer, ArrayPool <byte> bufferPool) { if (buffer.Array == null) { throw new ArgumentNullException(nameof(buffer.Array)); } if (bufferPool == null) { throw new ArgumentNullException(nameof(bufferPool)); } // | RSV | FRAG | ATYP | DST.ADDR | DST.PORT | DATA | // | 2 | 1 | 1 | Variable | 2 | Variable | if (buffer.Count < 10) { throw new InvalidDataException("UDP SOCKS datagram is truncated."); } if (buffer.Array[buffer.Offset] != 0 || buffer.Array[buffer.Offset + 1] != 0) { throw new InvalidDataException("UDP SOCKS datagram is corrupt."); } var fragmentPosition = (byte)(buffer.Array[buffer.Offset + 2] & 127); var isFinalFragment = (buffer.Array[buffer.Offset + 2] & 128) != 0; if (isFinalFragment && fragmentPosition == 0) { throw new InvalidDataException("Zero fragment position but last fragment bit set"); } var addressType = (AddressType)buffer.Array[buffer.Offset + 3]; var packetStream = new BufferReadOnlyStream(buffer.Array, buffer.Offset + 4, buffer.Count - 4); var remoteEndPoint = packetStream.ReadEndPoint(addressType, bufferPool); return(new DatagramHeader(fragmentPosition, isFinalFragment, remoteEndPoint)); }