mirror of
https://github.com/netchx/netch.git
synced 2026-03-16 17:53:17 +08:00
214 lines
16 KiB
C#
214 lines
16 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Net;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace DnsClient
|
|
{
|
|
/// <summary>
|
|
/// Generic contract to query DNS endpoints. Implemented by <see cref="LookupClient"/>.
|
|
/// </summary>
|
|
public interface IDnsQuery
|
|
{
|
|
/// <summary>
|
|
/// Performs a DNS lookup for the given <paramref name="query" />, <paramref name="queryType" /> and <paramref name="queryClass" />.
|
|
/// </summary>
|
|
/// <param name="query">The domain name query.</param>
|
|
/// <param name="queryType">The <see cref="QueryType" />.</param>
|
|
/// <param name="queryClass">The <see cref="QueryClass"/>.</param>
|
|
/// <param name="queryOptions">Query options to be used instead of <see cref="LookupClient"/>'s settings.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which contains the response headers and lists of resource records.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="query"/> is null.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
IDnsQueryResponse Query(string query, QueryType queryType, QueryClass queryClass = QueryClass.IN, DnsQueryOptions queryOptions = null);
|
|
|
|
/// <summary>
|
|
/// Performs a DNS lookup for the given <paramref name="question" />.
|
|
/// </summary>
|
|
/// <param name="question">The domain name query.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which contains the response headers and lists of resource records.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="question"/> is null.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
IDnsQueryResponse Query(DnsQuestion question);
|
|
|
|
/// <summary>
|
|
/// Performs a DNS lookup for the given <paramref name="question" />.
|
|
/// </summary>
|
|
/// <param name="question">The domain name query.</param>
|
|
/// <param name="queryOptions">Query options to be used instead of <see cref="LookupClient"/>'s settings.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which contains the response headers and lists of resource records.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="question"/> is null.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
IDnsQueryResponse Query(DnsQuestion question, DnsQueryOptions queryOptions);
|
|
|
|
/// <summary>
|
|
/// Performs a DNS lookup for the given <paramref name="query" />, <paramref name="queryType" /> and <paramref name="queryClass" />
|
|
/// </summary>
|
|
/// <param name="query">The domain name query.</param>
|
|
/// <param name="queryType">The <see cref="QueryType" />.</param>
|
|
/// <param name="queryClass">The <see cref="QueryClass" />.</param>
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
/// <param name="queryOptions">Query options to be used instead of <see cref="LookupClient"/>'s settings.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which contains the response headers and lists of resource records.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="query"/> is null.</exception>
|
|
/// <exception cref="OperationCanceledException">If cancellation has been requested for the passed in <paramref name="cancellationToken"/>.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
Task<IDnsQueryResponse> QueryAsync(string query, QueryType queryType, QueryClass queryClass = QueryClass.IN, DnsQueryOptions queryOptions = null, CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>
|
|
/// Performs a DNS lookup for the given <paramref name="question" />.
|
|
/// </summary>
|
|
/// <param name="question">The domain name query.</param>
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which contains the response headers and lists of resource records.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="question"/> is null.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
Task<IDnsQueryResponse> QueryAsync(DnsQuestion question, CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>
|
|
/// Performs a DNS lookup for the given <paramref name="question" />.
|
|
/// </summary>
|
|
/// <param name="question">The domain name query.</param>
|
|
/// <param name="queryOptions">Query options to be used instead of <see cref="LookupClient"/>'s settings.</param>
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which contains the response headers and lists of resource records.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="question"/> is null.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
Task<IDnsQueryResponse> QueryAsync(DnsQuestion question, DnsQueryOptions queryOptions, CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>
|
|
/// Does a reverse lookup for the <paramref name="ipAddress"/>.
|
|
/// </summary>
|
|
/// <param name="ipAddress">The <see cref="IPAddress"/>.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which might contain the <see cref="DnsClient.Protocol.PtrRecord" /> for the <paramref name="ipAddress"/>.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="ipAddress"/> is null.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
IDnsQueryResponse QueryReverse(IPAddress ipAddress);
|
|
|
|
/// <summary>
|
|
/// Does a reverse lookup for the <paramref name="ipAddress"/>.
|
|
/// </summary>
|
|
/// <param name="ipAddress">The <see cref="IPAddress"/>.</param>
|
|
/// <param name="queryOptions">Query options to be used instead of <see cref="LookupClient"/>'s settings.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which might contain the <see cref="DnsClient.Protocol.PtrRecord" /> for the <paramref name="ipAddress"/>.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="ipAddress"/> is null.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
IDnsQueryResponse QueryReverse(IPAddress ipAddress, DnsQueryOptions queryOptions);
|
|
|
|
/// <summary>
|
|
/// Does a reverse lookup for the <paramref name="ipAddress" />.
|
|
/// </summary>
|
|
/// <param name="ipAddress">The <see cref="IPAddress" />.</param>
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which might contain the <see cref="DnsClient.Protocol.PtrRecord" /> for the <paramref name="ipAddress"/>.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="ipAddress"/> is null.</exception>
|
|
/// <exception cref="OperationCanceledException">If cancellation has been requested for the passed in <paramref name="cancellationToken"/>.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
Task<IDnsQueryResponse> QueryReverseAsync(IPAddress ipAddress, CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>
|
|
/// Does a reverse lookup for the <paramref name="ipAddress" />.
|
|
/// </summary>
|
|
/// <param name="ipAddress">The <see cref="IPAddress" />.</param>
|
|
/// <param name="queryOptions">Query options to be used instead of <see cref="LookupClient"/>'s settings.</param>
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which might contain the <see cref="DnsClient.Protocol.PtrRecord" /> for the <paramref name="ipAddress"/>.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="ipAddress"/> is null.</exception>
|
|
/// <exception cref="OperationCanceledException">If cancellation has been requested for the passed in <paramref name="cancellationToken"/>.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
Task<IDnsQueryResponse> QueryReverseAsync(IPAddress ipAddress, DnsQueryOptions queryOptions, CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>
|
|
/// Performs a DNS lookup for the given <paramref name="query" />, <paramref name="queryType" /> and <paramref name="queryClass" />
|
|
/// using only the passed in <paramref name="servers"/>.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// To query specific servers can be useful in cases where you have to use a different DNS server than initially configured
|
|
/// (without creating a new instance of <see cref="ILookupClient"/> for example).
|
|
/// </remarks>
|
|
/// <param name="servers">The list of one or more server(s) which should be used for the lookup.</param>
|
|
/// <param name="query">The domain name query.</param>
|
|
/// <param name="queryType">The <see cref="QueryType" />.</param>
|
|
/// <param name="queryClass">The <see cref="QueryClass" />.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which contains the response headers and lists of resource records.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentOutOfRangeException">If the <paramref name="servers"/> collection doesn't contain any elements.</exception>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="query"/> is null.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
IDnsQueryResponse QueryServer(IReadOnlyCollection<NameServer> servers, string query, QueryType queryType, QueryClass queryClass = QueryClass.IN);
|
|
|
|
/// <summary>
|
|
/// Performs a DNS lookup for the given <paramref name="query" />, <paramref name="queryType" /> and <paramref name="queryClass" />
|
|
/// using only the passed in <paramref name="servers"/>.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// To query specific servers can be useful in cases where you have to use a different DNS server than initially configured
|
|
/// (without creating a new instance of <see cref="ILookupClient"/> for example).
|
|
/// </remarks>
|
|
/// <param name="servers">The list of one or more server(s) which should be used for the lookup.</param>
|
|
/// <param name="query">The domain name query.</param>
|
|
/// <param name="queryType">The <see cref="QueryType" />.</param>
|
|
/// <param name="queryClass">The <see cref="QueryClass" />.</param>
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which contains the response headers and lists of resource records.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentOutOfRangeException">If the <paramref name="servers"/> collection doesn't contain any elements.</exception>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="query"/> is null.</exception>
|
|
/// <exception cref="OperationCanceledException">If cancellation has been requested for the passed in <paramref name="cancellationToken"/>.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
Task<IDnsQueryResponse> QueryServerAsync(IReadOnlyCollection<NameServer> servers, string query, QueryType queryType, QueryClass queryClass = QueryClass.IN, CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>
|
|
/// Does a reverse lookup for the <paramref name="ipAddress" />
|
|
/// using only the passed in <paramref name="servers"/>.
|
|
/// </summary>
|
|
/// <param name="servers">The list of one or more server(s) which should be used for the lookup.</param>
|
|
/// <param name="ipAddress">The <see cref="IPAddress" />.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which might contain the <see cref="DnsClient.Protocol.PtrRecord" /> for the <paramref name="ipAddress"/>.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentOutOfRangeException">If the <paramref name="servers"/> collection doesn't contain any elements.</exception>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="ipAddress"/> is null.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
IDnsQueryResponse QueryServerReverse(IReadOnlyCollection<NameServer> servers, IPAddress ipAddress);
|
|
|
|
/// <summary>
|
|
/// Does a reverse lookup for the <paramref name="ipAddress" />
|
|
/// using only the passed in <paramref name="servers"/>.
|
|
/// </summary>
|
|
/// <param name="servers">The list of one or more server(s) which should be used for the lookup.</param>
|
|
/// <param name="ipAddress">The <see cref="IPAddress" />.</param>
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
/// <returns>
|
|
/// The <see cref="IDnsQueryResponse" /> which might contain the <see cref="DnsClient.Protocol.PtrRecord" /> for the <paramref name="ipAddress"/>.
|
|
/// </returns>
|
|
/// <exception cref="ArgumentOutOfRangeException">If the <paramref name="servers"/> collection doesn't contain any elements.</exception>
|
|
/// <exception cref="ArgumentNullException">If <paramref name="ipAddress"/> is null.</exception>
|
|
/// <exception cref="OperationCanceledException">If cancellation has been requested for the passed in <paramref name="cancellationToken"/>.</exception>
|
|
/// <exception cref="DnsResponseException">After retries and fallbacks, if none of the servers were accessible, timed out or (if <see cref="ILookupClient.ThrowDnsErrors"/> is enabled) returned error results.</exception>
|
|
Task<IDnsQueryResponse> QueryServerReverseAsync(IReadOnlyCollection<NameServer> servers, IPAddress ipAddress, CancellationToken cancellationToken = default);
|
|
}
|
|
} |