WebServiceApi: updated ResolveQueryAsync() to add timeout for recursive resolution. Code refactoring done.

This commit is contained in:
Shreyas Zare
2024-09-14 19:31:29 +05:30
parent 9f9fee603a
commit 0a88cfcdd9

View File

@@ -28,6 +28,7 @@ using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text.Json; using System.Text.Json;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using TechnitiumLibrary; using TechnitiumLibrary;
using TechnitiumLibrary.Net; using TechnitiumLibrary.Net;
@@ -220,7 +221,10 @@ namespace DnsServerCore
try try
{ {
dnsResponse = await DnsClient.RecursiveResolveAsync(question, dnsCache, proxy, preferIPv6, udpPayloadSize, randomizeName, qnameMinimization, false, dnssecValidation, eDnsClientSubnet, RETRIES, TIMEOUT, rawResponses: rawResponses); dnsResponse = await TechnitiumLibrary.TaskExtensions.TimeoutAsync(async delegate (CancellationToken cancellationToken1)
{
return await DnsClient.RecursiveResolveAsync(question, dnsCache, proxy, preferIPv6, udpPayloadSize, randomizeName, qnameMinimization, dnssecValidation, eDnsClientSubnet, RETRIES, TIMEOUT, rawResponses: rawResponses, cancellationToken: cancellationToken1);
}, DnsServer.RECURSIVE_RESOLUTION_TIMEOUT);
} }
catch (DnsClientResponseDnssecValidationException ex) catch (DnsClientResponseDnssecValidationException ex)
{ {
@@ -295,11 +299,9 @@ namespace DnsServerCore
nameServer = nameServer.ChangeProtocol(protocol); nameServer = nameServer.ChangeProtocol(protocol);
if (nameServer.IsIPEndPointStale) if (nameServer.IsIPEndPointStale)
{ await nameServer.ResolveIPAddressAsync(_dnsWebService.DnsServer, _dnsWebService.DnsServer.PreferIPv6);
if (proxy is null)
await nameServer.ResolveIPAddressAsync(_dnsWebService.DnsServer, _dnsWebService.DnsServer.PreferIPv6); if ((nameServer.DomainEndPoint is null) && ((protocol == DnsTransportProtocol.Udp) || (protocol == DnsTransportProtocol.Tcp)))
}
else if ((nameServer.DomainEndPoint is null) && ((protocol == DnsTransportProtocol.Udp) || (protocol == DnsTransportProtocol.Tcp)))
{ {
try try
{ {
@@ -373,7 +375,7 @@ namespace DnsServerCore
if (!_dnsWebService._authManager.IsPermitted(PermissionSection.Zones, session.User, PermissionFlag.Modify)) if (!_dnsWebService._authManager.IsPermitted(PermissionSection.Zones, session.User, PermissionFlag.Modify))
throw new DnsWebServiceException("Access was denied."); throw new DnsWebServiceException("Access was denied.");
zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.CreatePrimaryZone(domain, _dnsWebService.DnsServer.ServerDomain, false); zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.CreatePrimaryZone(domain);
if (zoneInfo is null) if (zoneInfo is null)
throw new DnsServerException("Cannot import records: failed to create primary zone."); throw new DnsServerException("Cannot import records: failed to create primary zone.");
@@ -439,9 +441,7 @@ namespace DnsServerCore
_dnsWebService.DnsServer.AuthZoneManager.ImportRecords(zoneInfo.Name, importRecords, true, true); _dnsWebService.DnsServer.AuthZoneManager.ImportRecords(zoneInfo.Name, importRecords, true, true);
} }
_dnsWebService._log.Write(context.GetRemoteEndPoint(), "[" + session.User.Username + "] DNS Client imported record(s) for authoritative zone {server: " + server + "; zone: " + zoneInfo.Name + "; type: " + type + ";}"); _dnsWebService._log.Write(context.GetRemoteEndPoint(), "[" + session.User.Username + "] DNS Client imported record(s) for authoritative zone {server: " + server + "; zone: " + zoneInfo.DisplayName + "; type: " + type + ";}");
_dnsWebService.DnsServer.AuthZoneManager.SaveZoneFile(zoneInfo.Name);
} }
Utf8JsonWriter jsonWriter = context.GetCurrentJsonWriter(); Utf8JsonWriter jsonWriter = context.GetCurrentJsonWriter();