예제 #1
0
        internal override void ParseRecordData(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;

                default:
                    option = new UnknownOption(type);
                    break;
                }

                option.ParseData(resultData, startPosition, dataLength);
                Options.Add(option);
                startPosition += dataLength;
            }
        }
예제 #2
0
        internal override void ParseRecordData(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;

                    default:
                        option = new UnknownOption(type);
                        break;
                }

                option.ParseData(resultData, startPosition, dataLength);
                Options.Add(option);
                startPosition += dataLength;
            }
        }