internal ClientDnsResponse(IDnsRequest request, IDnsResponse response, byte[] message) { Request = request; this.message = message; this.response = response; }
internal ClientDnsResponse(IDnsRequest request, IDnsResponse response) { Request = request; this.message = response.ToArray(); this.response = response; }
public async Task <IDnsResponse> Resolve(IDnsRequest request) { using (TcpClient tcp = new TcpClient()) { await tcp.ConnectAsync(dns.Address, dns.Port); Stream stream = tcp.GetStream(); byte[] buffer = request.ToArray(); byte[] length = BitConverter.GetBytes((ushort)buffer.Length); if (BitConverter.IsLittleEndian) { Array.Reverse(length); } await stream.WriteAsync(length, 0, length.Length); await stream.WriteAsync(buffer, 0, buffer.Length); buffer = new byte[2]; await Read(stream, buffer); if (BitConverter.IsLittleEndian) { Array.Reverse(buffer); } buffer = new byte[BitConverter.ToUInt16(buffer, 0)]; await Read(stream, buffer); IDnsResponse response = DefaultDnsResponse.FromArray(buffer); return(new ClientDnsResponse(request, response, buffer)); } }
public async Task <IDnsResponse> Resolve(IDnsRequest request) { using (UdpClient udp = new UdpClient()) { await udp .SendAsync(request.ToArray(), request.Size, dns) .WithCancellationTimeout(timeout); UdpReceiveResult result = await udp.ReceiveAsync().WithCancellationTimeout(timeout); if (!result.RemoteEndPoint.Equals(dns)) { throw new IOException("Remote endpoint mismatch"); } byte[] buffer = result.Buffer; DefaultDnsResponse response = DefaultDnsResponse.FromArray(buffer); if (response.Truncated) { return(await fallback.Resolve(request)); } return(new ClientDnsResponse(request, response, buffer)); } }
public async Task<IDnsResponse> Resolve(IDnsRequest request) { IDnsResponse response = null; foreach (IDnsRequestResolver resolver in resolvers) { response = await resolver.Resolve(request); if (response.AnswerRecords.Count > 0) break; } return response; }
public DefaultDnsRequest(IDnsRequest request) { this.header = new DnsMessageHeader(); this.questions = new List <DnsQuestion>(request.Questions); this.additional = new List <IResourceRecord>(request.AdditionalRecords); this.header.Response = false; Id = request.Id; OperationCode = request.OperationCode; RecursionDesired = request.RecursionDesired; }
public static DefaultDnsResponse FromRequest(IDnsRequest request) { DefaultDnsResponse response = new DefaultDnsResponse(); response.Id = request.Id; foreach (DnsQuestion question in request.Questions) { response.Questions.Add(question); } return(response); }
public static DnsResponse FromRequest(IDnsRequest request) { var response = new DnsResponse { Id = request.Id }; foreach (DnsQuestion question in request.Questions) { response.Questions.Add(question); } return(response); }
public Task <IDnsResponse> Resolve(IDnsRequest request) { IDnsResponse response = DefaultDnsResponse.FromRequest(request); foreach (DnsQuestion question in request.Questions) { IList <IResourceRecord> answers = Get(question); if (answers.Count > 0) { Merge(response.AnswerRecords, answers); } else { response.ResponseCode = DnsResponseCode.NameError; } } return(Task.FromResult(response)); }
public DnsClientRequest(IPEndPoint dns, IDnsRequest?request = null, IDnsRequestResolver?resolver = null) { Dns = dns; _request = request == null ? new DnsRequest() : new DnsRequest(request); _resolver = resolver ?? new DnsUdpRequestResolver(); }
public ClientDnsRequest(IPEndPoint dns, IDnsRequest request = null) : this(new UdpDnsRequestResolver(dns), request) { }
protected virtual void OnResponded(IDnsRequest request, IDnsResponse response) { RespondedEventHandler handlers = Responded; if (handlers != null) handlers(request, response); }
public DnsClientRequest(IPAddress ip, int port = Definitions.DnsDefaultPort, IDnsRequest request = null, IDnsRequestResolver resolver = null) : this(new IPEndPoint(ip, port), request, resolver) { }
public Task <IDnsResponse> Resolve(IDnsRequest request) { throw new DnsResponseException("Request failed"); }
protected virtual void OnRequested(IDnsRequest request) { RequestedEventHandler handlers = Requested; if (handlers != null) handlers(request); }
public ClientDnsRequest(IDnsRequestResolver resolver, IDnsRequest request = null) { this.resolver = resolver; this.request = request == null ? new DefaultDnsRequest() : new DefaultDnsRequest(request); }
public DnsClientRequest(string ip, int port = Definitions.DnsDefaultPort, IDnsRequest request = null, IDnsRequestResolver resolver = null) : this(IPAddress.Parse(ip), port, request, resolver) { }
public ClientDnsRequest(string ip, int port = DEFAULT_PORT, IDnsRequest request = null) : this(IPAddress.Parse(ip), port, request) { }
public ClientDnsRequest(IPAddress ip, int port = DEFAULT_PORT, IDnsRequest request = null) : this(new IPEndPoint(ip, port), request) { }
public static ClientDnsResponse FromArray(IDnsRequest request, byte[] message) { DefaultDnsResponse response = DefaultDnsResponse.FromArray(message); return(new ClientDnsResponse(request, response, message)); }
public ClientDnsRequest Create(IDnsRequest request = null) { return(new ClientDnsRequest(resolver, request)); }
public DnsClientRequest Create(IDnsRequest request = null) { return(new DnsClientRequest(_dns, request, _resolver)); }