예제 #1
0
        public async Task <DnsAnswer> Query(DnsHeader query, CancellationToken token)
        {
            var raw = DnsByteExtensions.ToBytes(query).ToArray();

            var payload = DnsByteExtensions.ToBytes((ushort)raw.Length).Concat(raw).ToArray();
            var stream  = _socket.GetStream();

            await stream.WriteAsync(payload, 0, payload.Length, token);

            var buffer  = new byte[4096];
            var receive = await stream.ReadAsync(buffer, 0, buffer.Length, token);

            stream.Close();

            var offset         = 0;
            var responseLength = DnsByteExtensions.ReadUInt16(buffer, ref offset);

            var response = DnsByteExtensions.ReadBytes(buffer, responseLength, ref offset);

            if (response.Length != responseLength)
            {
                throw new InvalidOperationException();
            }

            return(DnsByteExtensions.FromBytes <DnsAnswer>(response));
        }
예제 #2
0
 /// <inheritdoc/>
 public void ReadBytes(byte[] bytes, ref int offset, int length) => IPAddress = new IPAddress(DnsByteExtensions.ReadBytes(bytes, length, ref offset));
예제 #3
0
        public void ReadARecordTests(int example, int offset, byte[] expected)
        {
            var value = DnsByteExtensions.ReadBytes(SampleDnsPackets.Answers[example - 1], 4, ref offset);

            Assert.Equal(expected, value);
        }
예제 #4
0
 /// <inheritdoc/>
 public void ReadBytes(byte[] bytes, ref int offset, int length)
 {
     Raw = DnsByteExtensions.ReadBytes(bytes, length, ref offset);
 }