diff --git a/Apps/FilterAaaaApp/App.cs b/Apps/FilterAaaaApp/App.cs
index 76ce2c8b..882ad36e 100644
--- a/Apps/FilterAaaaApp/App.cs
+++ b/Apps/FilterAaaaApp/App.cs
@@ -20,6 +20,7 @@ along with this program. If not, see .
using DnsServerCore.ApplicationCommon;
using System;
using System.Collections.Generic;
+using System.IO;
using System.Net;
using System.Text.Json;
using System.Threading.Tasks;
@@ -55,7 +56,7 @@ namespace FilterAaaa
#region public
- public Task InitializeAsync(IDnsServer dnsServer, string config)
+ public async Task InitializeAsync(IDnsServer dnsServer, string config)
{
_dnsServer = dnsServer;
@@ -76,11 +77,18 @@ namespace FilterAaaa
_bypassDomains = [];
if (jsonConfig.TryReadArray("filterDomains", out string[] filterDomains))
+ {
_filterDomains = filterDomains;
+ }
else
+ {
_filterDomains = [];
- return Task.CompletedTask;
+ //update config for new feature
+ config = config.TrimEnd('\r', '\n', ' ', '}');
+ config += ",\r\n \"filterDomains\": [\r\n ]\r\n}";
+ await File.WriteAllTextAsync(Path.Combine(dnsServer.ApplicationFolder, "dnsApp.config"), config);
+ }
}
public async Task PostProcessAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, DnsDatagram response)
@@ -101,19 +109,6 @@ namespace FilterAaaa
if (question.Type != DnsResourceRecordType.AAAA)
return response;
- bool filterDomain = _filterDomains.Length == 0;
- foreach (string filterDomain in _filterDomains)
- {
- if (qname.Equals(filterDomain, StringComparison.OrdinalIgnoreCase) || qname.EndsWith("." + filterDomain, StringComparison.OrdinalIgnoreCase))
- {
- filterDomain = true;
- break;
- }
- }
-
- if (!filterDomain)
- return response;
-
bool hasAAAA = false;
foreach (DnsResourceRecord record in response.Answer)
@@ -144,6 +139,20 @@ namespace FilterAaaa
return response;
}
+ bool filterDomain = _filterDomains.Length == 0;
+
+ foreach (string blockedDomain in _filterDomains)
+ {
+ if (qname.Equals(blockedDomain, StringComparison.OrdinalIgnoreCase) || qname.EndsWith("." + blockedDomain, StringComparison.OrdinalIgnoreCase))
+ {
+ filterDomain = true;
+ break;
+ }
+ }
+
+ if (!filterDomain)
+ return response;
+
DnsDatagram aResponse = await _dnsServer.DirectQueryAsync(new DnsQuestionRecord(qname, DnsResourceRecordType.A, DnsClass.IN), 2000);
if (aResponse.RCODE != DnsResponseCode.NoError)