protected override async Task <DnsResponse> QueryDnsImplAsync(DnsQueryParamBase param, CancellationToken cancel) { switch (param) { case DnsGetIpQueryParam getIpQuery: if (IPAddress.TryParse(getIpQuery.Hostname, out IPAddress ip)) { return(new DnsResponse(param, ip._SingleArray())); } else { return(new DnsResponse(param, await PalDns.GetHostAddressesAsync(getIpQuery.Hostname, getIpQuery.Timeout, cancel))); } } throw new NotImplementedException(); }
public DnsResponse(DnsQueryParamBase query, IPAddress[] addressList) { this.Query = query; IEnumerable <IPAddress> filtered = addressList; if (this.Query.Options.Bit(DnsQueryOptions.IPv4Only)) { filtered = filtered.Where(x => x.AddressFamily == AddressFamily.InterNetwork); } if (this.Query.Options.Bit(DnsQueryOptions.IPv6Only)) { filtered = filtered.Where(x => x.AddressFamily == AddressFamily.InterNetworkV6); } this.IPAddressList = new List <IPAddress>(filtered); }
protected abstract Task <DnsResponse> QueryDnsImplAsync(DnsQueryParamBase param, CancellationToken cancel);