public ConditionalForwardingDnsServer(IPEndPoint bindEndPoint, int udpListenerCount, int tcpListenerCount) : base(bindEndPoint, udpListenerCount, tcpListenerCount) { UpStreamDns = DnsClient.Default; PureDns = DnsClient.Default; UpStreamEcs = null; PureEcs = null; LoadDomains(specialDomains); LoadDomains(ptrDomains); QueryReceived += OnQueryReceived; }
internal override void ParseRecordData(ReadOnlySpan <byte> resultData, int startPosition, int length) { int endPosition = startPosition + length; Options = new List <EDnsOptionBase>(); while (startPosition < endPosition) { EDnsOptionType type = (EDnsOptionType)DnsMessageBase.ParseUShort(resultData, ref startPosition); ushort dataLength = DnsMessageBase.ParseUShort(resultData, ref startPosition); EDnsOptionBase option; switch (type) { case EDnsOptionType.LongLivedQuery: option = new LongLivedQueryOption(); break; case EDnsOptionType.UpdateLease: option = new UpdateLeaseOption(); break; case EDnsOptionType.NsId: option = new NsIdOption(); break; case EDnsOptionType.Owner: option = new OwnerOption(); break; case EDnsOptionType.DnssecAlgorithmUnderstood: option = new DnssecAlgorithmUnderstoodOption(); break; case EDnsOptionType.DsHashUnderstood: option = new DsHashUnderstoodOption(); break; case EDnsOptionType.Nsec3HashUnderstood: option = new Nsec3HashUnderstoodOption(); break; case EDnsOptionType.ClientSubnet: option = new ClientSubnetOption(); break; case EDnsOptionType.Expire: option = new ExpireOption(); break; case EDnsOptionType.Cookie: option = new CookieOption(); break; default: option = new UnknownOption(type); break; } option.ParseData(resultData, startPosition, dataLength); Options.Add(option); startPosition += dataLength; } }