mirror of
https://github.com/fergalmoran/DnsServer.git
synced 2025-12-22 09:29:50 +00:00
Zone: caching ANY records implementation issue fixed. TTL set to 60 sec.
This commit is contained in:
@@ -423,6 +423,12 @@ namespace DnsServerCore
|
||||
if (records[0].RDATA is DnsNXRecord)
|
||||
return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, DnsOpcode.StandardQuery, false, false, request.Header.RecursionDesired, true, false, false, DnsResponseCode.NameError, 1, 0, 1, 0), request.Question, new DnsResourceRecord[] { }, new DnsResourceRecord[] { (records[0].RDATA as DnsNXRecord).Authority }, new DnsResourceRecord[] { });
|
||||
|
||||
if (records[0].RDATA is DnsANYRecord)
|
||||
{
|
||||
DnsANYRecord anyRR = records[0].RDATA as DnsANYRecord;
|
||||
return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, DnsOpcode.StandardQuery, false, false, request.Header.RecursionDesired, true, false, false, DnsResponseCode.NoError, 1, Convert.ToUInt16(anyRR.Records.Length), 0, 0), request.Question, anyRR.Records, new DnsResourceRecord[] { }, new DnsResourceRecord[] { });
|
||||
}
|
||||
|
||||
return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, DnsOpcode.StandardQuery, false, false, request.Header.RecursionDesired, true, false, false, DnsResponseCode.NoError, 1, (ushort)records.Length, 0, 0), request.Question, records, new DnsResourceRecord[] { }, new DnsResourceRecord[] { });
|
||||
}
|
||||
}
|
||||
@@ -564,8 +570,13 @@ namespace DnsServerCore
|
||||
SetRecords(allRecords);
|
||||
|
||||
//cache for ANY request
|
||||
if (response.Question[0].Type == DnsResourceRecordType.ANY)
|
||||
CreateZone(this, response.Question[0].Name).SetRecords(DnsResourceRecordType.ANY, response.Answer);
|
||||
if ((response.Question[0].Type == DnsResourceRecordType.ANY) && (response.Answer.Length > 0))
|
||||
{
|
||||
DnsResourceRecord anyRR = new DnsResourceRecord(response.Question[0].Name, DnsResourceRecordType.ANY, DnsClass.IN, DEFAULT_RECORD_TTL, new DnsANYRecord(response.Answer));
|
||||
anyRR.SetExpiry();
|
||||
|
||||
CreateZone(this, response.Question[0].Name).SetRecords(DnsResourceRecordType.ANY, new DnsResourceRecord[] { anyRR });
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -761,10 +772,6 @@ namespace DnsServerCore
|
||||
_authority = authority;
|
||||
}
|
||||
|
||||
public DnsNXRecord(Stream s)
|
||||
: base(s)
|
||||
{ }
|
||||
|
||||
#endregion
|
||||
|
||||
#region protected
|
||||
@@ -824,10 +831,6 @@ namespace DnsServerCore
|
||||
_authority = authority;
|
||||
}
|
||||
|
||||
public DnsEmptyRecord(Stream s)
|
||||
: base(s)
|
||||
{ }
|
||||
|
||||
#endregion
|
||||
|
||||
#region protected
|
||||
@@ -871,5 +874,68 @@ namespace DnsServerCore
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
class DnsANYRecord : DnsResourceRecordData
|
||||
{
|
||||
#region variables
|
||||
|
||||
DnsResourceRecord[] _records;
|
||||
|
||||
#endregion
|
||||
|
||||
#region constructor
|
||||
|
||||
public DnsANYRecord(DnsResourceRecord[] records)
|
||||
{
|
||||
_records = records;
|
||||
}
|
||||
|
||||
public DnsANYRecord(Stream s)
|
||||
: base(s)
|
||||
{ }
|
||||
|
||||
#endregion
|
||||
|
||||
#region protected
|
||||
|
||||
protected override void Parse(Stream s)
|
||||
{ }
|
||||
|
||||
protected override void WriteRecordData(Stream s, List<DnsDomainOffset> domainEntries)
|
||||
{ }
|
||||
|
||||
#endregion
|
||||
|
||||
#region public
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj))
|
||||
return false;
|
||||
|
||||
if (ReferenceEquals(this, obj))
|
||||
return true;
|
||||
|
||||
DnsANYRecord other = obj as DnsANYRecord;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region properties
|
||||
|
||||
public DnsResourceRecord[] Records
|
||||
{ get { return _records; } }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user