From 332b64e6c2e3bc05ea998799d74d330c5dbc3f82 Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sat, 16 Mar 2024 13:26:55 +0530 Subject: [PATCH] CacheRecordInfo: added response metadata feature. --- .../Dns/ResourceRecords/CacheRecordInfo.cs | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/DnsServerCore/Dns/ResourceRecords/CacheRecordInfo.cs b/DnsServerCore/Dns/ResourceRecords/CacheRecordInfo.cs index 1720f2fd..92d6960d 100644 --- a/DnsServerCore/Dns/ResourceRecords/CacheRecordInfo.cs +++ b/DnsServerCore/Dns/ResourceRecords/CacheRecordInfo.cs @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; using System.IO; using TechnitiumLibrary.Net; +using TechnitiumLibrary.Net.Dns; using TechnitiumLibrary.Net.Dns.ResourceRecords; namespace DnsServerCore.Dns.ResourceRecords @@ -35,6 +36,7 @@ namespace DnsServerCore.Dns.ResourceRecords IReadOnlyList _rrsigRecords; IReadOnlyList _nsecRecords; NetworkAddress _eDnsClientSubnet; + DnsDatagramMetadata _responseMetadata; DateTime _lastUsedOn; //not serialized @@ -51,6 +53,7 @@ namespace DnsServerCore.Dns.ResourceRecords switch (version) { case 1: + case 2: _glueRecords = ReadRecordsFrom(bR, true); _rrsigRecords = ReadRecordsFrom(bR, false); _nsecRecords = ReadRecordsFrom(bR, true); @@ -58,6 +61,12 @@ namespace DnsServerCore.Dns.ResourceRecords if (bR.ReadBoolean()) _eDnsClientSubnet = NetworkAddress.ReadFrom(bR); + if (version >= 2) + { + if (bR.ReadBoolean()) + _responseMetadata = new DnsDatagramMetadata(bR); + } + break; default: @@ -125,7 +134,7 @@ namespace DnsServerCore.Dns.ResourceRecords public void WriteTo(BinaryWriter bW) { - bW.Write((byte)1); //version + bW.Write((byte)2); //version WriteRecordsTo(_glueRecords, bW, true); WriteRecordsTo(_rrsigRecords, bW, false); @@ -140,6 +149,16 @@ namespace DnsServerCore.Dns.ResourceRecords bW.Write(true); _eDnsClientSubnet.WriteTo(bW); } + + if (_responseMetadata is null) + { + bW.Write(false); + } + else + { + bW.Write(true); + _responseMetadata.WriteTo(bW); + } } #endregion @@ -188,6 +207,12 @@ namespace DnsServerCore.Dns.ResourceRecords set { _eDnsClientSubnet = value; } } + public DnsDatagramMetadata ResponseMetadata + { + get { return _responseMetadata; } + set { _responseMetadata = value; } + } + public DateTime LastUsedOn { get { return _lastUsedOn; }