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)); }
/// <inheritdoc/> public void ReadBytes(byte[] bytes, ref int offset, int length) => IPAddress = new IPAddress(DnsByteExtensions.ReadBytes(bytes, length, ref offset));
public void ReadARecordTests(int example, int offset, byte[] expected) { var value = DnsByteExtensions.ReadBytes(SampleDnsPackets.Answers[example - 1], 4, ref offset); Assert.Equal(expected, value); }
/// <inheritdoc/> public void ReadBytes(byte[] bytes, ref int offset, int length) { Raw = DnsByteExtensions.ReadBytes(bytes, length, ref offset); }