Inheritance: ApplicationException
        public DnsResourceRecord GetRecord(BaseResourceRecordInfo info, ArraySegment <byte> data)
        {
            if (info == null)
            {
                throw new ArgumentNullException(nameof(info));
            }

            int oldIndex = _reader.Index;
            DnsResourceRecord result;

            switch (info.RecordType)
            {
            case ResourceRecordType.A:
                IPAddress ipaddress = _reader.ReadIPAddress(data);
                result = new ARecord(info, ipaddress);
                break;

            default:
                // update reader index because we don't read full data for the empty record
                _reader.Advance(info.RawDataLength);
                result = new EmptyRecord(info);
                break;
            }

            // sanity check
            if (_reader.Index != oldIndex + info.RawDataLength)
            {
                throw new InvalidOperationException("Record reader index out of sync.");
            }

            return(result);
        }
Exemplo n.º 2
0
        public async Task Cache_EntriesLowestTT_Expires()
        {
            var cache    = new ResponseCache();
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 1000, 100));
            var recordB  = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100));
            var recordC  = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 1, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);
            response.AddAdditional(recordB);
            response.AddAuthority(recordC);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));

            await Task.Delay(200);

            var item = cache.Get("key", out var effectiveTtl);

            Assert.NotNull(item);
            Assert.Equal(1 * 1000, effectiveTtl);

            await Task.Delay(1100);

            var item3 = cache.Get("key", out _);

            Assert.Null(item3);
        }
Exemplo n.º 3
0
        private EmptyRecord WrapEmptyRecordItem(DataRow emptyRecordRow)
        {
            EmptyRecord emptyRecordItem = new EmptyRecord();

            if (emptyRecordRow != null)
            {
                emptyRecordItem.ID = Convert.ToInt32(emptyRecordRow["ID"]);
                if (Convert.ToInt32(emptyRecordRow["CowGroupID"]) != 0)
                {
                    emptyRecordItem.CowGroupID = Convert.ToInt32(emptyRecordRow["CowGroupID"]);
                }
                if (Convert.ToInt32(emptyRecordRow["FormulaID"]) != 0)
                {
                    emptyRecordItem.FormulaID = Convert.ToInt32(emptyRecordRow["FormulaID"]);
                }
                if (Convert.ToInt32(emptyRecordRow["RecordUserID"]) != 0)
                {
                    emptyRecordItem.RecordUserID = Convert.ToInt32(emptyRecordRow["RecordUserID"]);
                }
                emptyRecordItem.RecordTime = Convert.ToDateTime(emptyRecordRow["RecordTime"]);
                if (Convert.ToInt32(emptyRecordRow["EmptyHour"]) != 0)
                {
                    emptyRecordItem.EmptyHour = float.Parse(emptyRecordRow["EmptyHour"].ToString());
                }
                emptyRecordItem.Name = emptyRecordRow["Name"].ToString();
            }
            return(emptyRecordItem);
        }
Exemplo n.º 4
0
        public async Task Cache_EntriesLowestTT_Expires()
        {
            var cache    = new ResponseCache(true);
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 1000, 100));
            var recordB  = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 100, 100));
            var recordC  = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 1, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);
            response.AddAdditional(recordB);
            response.AddAuthority(recordC);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any), null));

            await Task.Delay(200);

            var item = cache.Get("key", out double?effectiveTtl);

            Assert.NotNull(item);
            Assert.Equal(1 * 1000, effectiveTtl);

            await Task.Delay(1100);

            var item3 = cache.Get("key", out double?effectiveTtl2);

            Assert.Null(item3);
        }
Exemplo n.º 5
0
        public void GetRecord_should_return_EmptyRecord_type_when_unknown_recordType_is_found()
        {
            // Arrange.
            const string             query      = "www.msn.com";
            const string             queryRoot  = query + ".";
            const ResourceRecordType recordType = ResourceRecordType.OPT; // possibly make it to default case in the switch statement.
            const QueryClass         queryClass = QueryClass.IN;          // IN
            const int timeToLive = 1000;
            const int rawDataLen = 10;
            IPAddress ipaddress  = IPAddress.Parse("10.1.1.100");

            IDnsString dnsString = new DnsString(query, queryRoot);

            BaseResourceRecordInfo info         = new BaseResourceRecordInfo(recordType, queryClass, timeToLive, rawDataLen, dnsString);
            ArraySegment <byte>    responseData = GetSampleData(ResponseDataSampleFile.QuestionAndAnswerQuery);

            mockReader.SetupSequence(r => r.Index).Returns(100).Returns(100 + rawDataLen);
            mockReader.Setup(r => r.ReadIPAddress(responseData)).Returns(ipaddress);

            IDnsRecordFactory factory = new DnsRecordFactory(mockReader.Object);

            // Act.
            DnsResourceRecord result = factory.GetRecord(info, responseData);

            // Assert.

            Assert.IsInstanceOf(typeof(EmptyRecord), result);
            EmptyRecord record = (EmptyRecord)result;
        }
        /*
         * 0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
         +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
         |                                               |
         | /                                               /
         | /                      NAME                     /
         |                                               |
         +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
         |                      TYPE                     |
         +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
         |                     CLASS                     |
         +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
         |                      TTL                      |
         |                                               |
         +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
         |                   RDLENGTH                    |
         +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
         | /                     RDATA                     /
         | /                                               /
         +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
         * */

        public DnsResourceRecord GetRecord(
            ResourceRecord info,
            DnsDatagramReader reader)
        {
            if (info == null)
            {
                throw new ArgumentNullException(nameof(info));
            }

            var oldIndex = reader.Index;
            DnsResourceRecord result;

            if (_recordReaders.TryGetValue(info.RecordType.Value, out var recordReader))
            {
                result = recordReader.ReadResourceRecord(info, reader);
            }
            else
            {
                // update reader index because we don't read full data for the empty record
                reader.Index += info.RawDataLength;
                result        = new EmptyRecord(info);
            }

            // sanity check
            if (reader.Index != oldIndex + info.RawDataLength)
            {
                throw new InvalidOperationException("Record reader index out of sync.");
            }

            return(result);
        }
Exemplo n.º 7
0
        public List <EmptyRecord> GetEmptyRecordList()
        {
            List <EmptyRecord> lstEmptyRecord = new List <EmptyRecord>();
            DataTable          datEmptyRecord = this.dalEmptyRecord.GetEmptyRecordList();

            foreach (DataRow drEmptyRecord in datEmptyRecord.Rows)
            {
                EmptyRecord emptyRecordItem = WrapEmptyRecordItem(drEmptyRecord);
                lstEmptyRecord.Add(emptyRecordItem);
            }
            return(lstEmptyRecord);
        }
Exemplo n.º 8
0
        //插入空槽记录信息
        public int InsertEmptyRecordInfo(EmptyRecord emptyRecord)
        {
            StringBuilder sql = new StringBuilder();

            sql.Append(@"insert into [Feed_EmptyRecord] values (
                                    " + emptyRecord.CowGroupID + ","
                       + emptyRecord.FormulaID + ","
                       + emptyRecord.RecordUserID + ",'"
                       + emptyRecord.RecordTime + "',"
                       + emptyRecord.EmptyHour + ")");

            return(dataProvider1mutong.ExecuteNonQuery(sql.ToString(), CommandType.Text));
        }
Exemplo n.º 9
0
        public void Cache_GetOrAdd()
        {
            var cache    = new ResponseCache(true);
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 100, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key");

            Assert.Equal(item, response.AsQueryResponse(new NameServer(IPAddress.Any)));
        }
Exemplo n.º 10
0
        public void Cache_DoesCacheWithMinimumDefined()
        {
            var cache    = new ResponseCache(true, TimeSpan.FromMilliseconds(100));
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key");

            // should not be null although TTL is zero, mimimum timeout is set to 100ms
            Assert.Equal(item, response.AsQueryResponse(new NameServer(IPAddress.Any)));
        }
Exemplo n.º 11
0
        public void Cache_DoesNotCacheIfDisabled()
        {
            var cache    = new ResponseCache(false);
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 100, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key");

            // should be null because cache is disabled and we create null in the second call of GetOrAdd
            Assert.Null(item);
        }
Exemplo n.º 12
0
        public void Cache_DoesNotCacheIfZeroTTL()
        {
            var cache    = new ResponseCache(true);
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key");

            // should be null because ttl of the record is 0 which disables caching for this record
            Assert.Null(item);
        }
Exemplo n.º 13
0
        public void Cache_SupportsInfinite()
        {
            var cache    = new ResponseCache(true, Timeout.InfiniteTimeSpan);
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any), null));
            var item = cache.Get("key", out double?effectiveTtl);

            // should not be null although TTL is zero, minimum timeout is set to infinite
            Assert.Equal(item, response.AsQueryResponse(new NameServer(IPAddress.Any), null));
            Assert.Equal(int.MaxValue, effectiveTtl);
        }
Exemplo n.º 14
0
        public void Cache_DoesCacheWithMinimumDefined()
        {
            var minTtl   = 2000;
            var cache    = new ResponseCache(true, TimeSpan.FromMilliseconds(minTtl));
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any), null));

            var item = cache.Get("key", out double?effectiveTtl);

            Assert.NotNull(item);
            Assert.Equal(0, item.Answers.First().TimeToLive);
            Assert.Equal(minTtl, effectiveTtl);
        }
Exemplo n.º 15
0
        public void Cache_GetOrAdd()
        {
            var cache    = new ResponseCache(true);
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 100, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out double?effectiveTtl);

            Assert.Equal(item, response.AsQueryResponse(new NameServer(IPAddress.Any)));
            Assert.Equal(100 * 1000, effectiveTtl);
        }
Exemplo n.º 16
0
        public void Cache_GetOrAddExists()
        {
            var cache    = new ResponseCache(true);
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 100, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);

            var success = cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));

            Assert.True(success);

            response.AddAnswer(new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 100, 100)));
            var fail = cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));

            Assert.False(fail);
        }
Exemplo n.º 17
0
        public void Cache_RespectsMaximumTtl()
        {
            var maxTtl   = 2000;
            var cache    = new ResponseCache(true, maximumTimeout: TimeSpan.FromMilliseconds(maxTtl));
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 60 * 60 * 24, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any), null));

            var item = cache.Get("key", out double?effectiveTtl);

            Assert.NotNull(item);
            Assert.Equal(1, cache.Count);
            Assert.Equal(60 * 60 * 24, item.Answers.First().TimeToLive);
            Assert.Equal(maxTtl, effectiveTtl);
        }
Exemplo n.º 18
0
        public void Cache_DoesNotCacheIfZeroTTL()
        {
            var cache    = new ResponseCache();
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out var effectiveTtl);

            // should be null because ttl of the record is 0 which disables caching for this record
            Assert.Null(item);
            Assert.Null(effectiveTtl);
        }
Exemplo n.º 19
0
        public void Cache_SupportsInfinite()
        {
            var cache    = new ResponseCache(true, Timeout.InfiniteTimeSpan);
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out var effectiveTtl);

            // should not be null although TTL is zero, mimimum timeout is set to infinite
            Assert.Equal(item, response.AsQueryResponse(new NameServer(IPAddress.Any)));
            Assert.Equal(int.MaxValue, effectiveTtl);
        }
Exemplo n.º 20
0
        public void Cache_EntriesLowestTTLWins()
        {
            var cache    = new ResponseCache(true);
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 1000, 100));
            var recordB  = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 100, 100));
            var recordC  = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0);

            response.AddAnswer(record);
            response.AddAdditional(recordB);
            response.AddAuthority(recordC);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key");

            // should be null because recordC has zero TTL which wins
            Assert.Null(item);
        }
Exemplo n.º 21
0
        public void Cache_DoesNotCacheIfZeroTTLWithZeroMinTtl()
        {
            var cache    = new ResponseCache(true, TimeSpan.Zero);
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out double?effectiveTtl);

            // should be null because ttl of the record is 0 which disables caching for this record
            Assert.Null(item);
            Assert.Null(effectiveTtl);
        }
Exemplo n.º 22
0
        public void Cache_DoesNotCacheIfDisabled()
        {
            var cache    = new ResponseCache(false);
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out var effectiveTtl);

            // should be null because cache is disabled and we create null in the second call of GetOrAdd
            Assert.Null(item);
            Assert.Null(effectiveTtl);
        }
Exemplo n.º 23
0
        public void Cache_GetOrAddExists()
        {
            var cache    = new ResponseCache();
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            var success = cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));

            Assert.True(success);

            response.AddAnswer(new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100)));
            var fail = cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));

            Assert.False(fail);
        }
Exemplo n.º 24
0
        public ActionResult Save()
        {
            try
            {
                string cowGroupID = Request.Form["cowGroupName"];
                string emptyHour  = Request.Form["emHour"];

                EmptyRecord emptyRecord = new EmptyRecord();
                emptyRecord.CowGroupID   = Convert.ToInt32(cowGroupID);
                emptyRecord.FormulaID    = bllCowGroup.GetFormulaIDByGroupID(Convert.ToInt32(cowGroupID));//需要根据牛群ID获得配方ID
                emptyRecord.RecordUserID = UserBLL.Instance.CurrentUser.ID;
                emptyRecord.RecordTime   = DateTime.Now;
                emptyRecord.EmptyHour    = Convert.ToInt32(emptyHour);

                bllEmptyRecord.InsertEmptyRecordInfo(emptyRecord);
            }
            catch (Exception e)
            {
            }
            return(RedirectToAction("../../Feed/CowGroup/List"));
        }
Exemplo n.º 25
0
        public void Cache_EntriesLowestTTLWins()
        {
            var cache    = new ResponseCache();
            var record   = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 1000, 100));
            var recordB  = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 100, 100));
            var recordC  = new EmptyRecord(new ResourceRecord(DnsString.Parse("a"), ARecord.ResourceRecordType, QueryClass.In, 0, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);
            response.AddAdditional(recordB);
            response.AddAuthority(recordC);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));
            var item = cache.Get("key", out var effectiveTtl);

            // should be null because recordC has zero TTL which wins
            Assert.Null(item);
            Assert.Null(effectiveTtl);
        }
Exemplo n.º 26
0
        public async Task Cache_DoesCacheWithMinimumDefined()
        {
            var minTtl   = 2000;
            var cache    = new ResponseCache(true, TimeSpan.FromMilliseconds(minTtl));
            var record   = new EmptyRecord(new ResourceRecordInfo("a", ResourceRecordType.A, QueryClass.IN, 1, 100));
            var response = new DnsResponseMessage(new DnsResponseHeader(1, 256, 1, 1, 0, 0), 0)
            {
                Audit = new LookupClientAudit()
            };

            response.AddAnswer(record);

            cache.Add("key", response.AsQueryResponse(new NameServer(IPAddress.Any)));

            await Task.Delay(1200);

            var item = cache.Get("key", out double?effectiveTtl);

            // should not be null although TTL is zero, mimimum timeout is set to 2000ms
            // TTL of the record should be zero because the initial TTL is 100
            Assert.Equal(0, item.Answers.First().TimeToLive);
            Assert.Equal(minTtl, effectiveTtl);
        }
Exemplo n.º 27
0
        public DnsResourceRecord GetRecord(ResourceRecordInfo info)
        {
            if (info == null)
            {
                throw new ArgumentNullException(nameof(info));
            }

            var oldIndex = _reader.Index;
            DnsResourceRecord result;

            switch (info.RecordType)
            {
            case ResourceRecordType.A:
                result = new ARecord(info, _reader.ReadIPAddress());
                break;

            case ResourceRecordType.NS:
                result = new NsRecord(info, _reader.ReadDnsName());
                break;

            case ResourceRecordType.CNAME:
                result = new CNameRecord(info, _reader.ReadDnsName());
                break;

            case ResourceRecordType.SOA:
                result = ResolveSoaRecord(info);
                break;

            case ResourceRecordType.MB:
                result = new MbRecord(info, _reader.ReadDnsName());
                break;

            case ResourceRecordType.MG:
                result = new MgRecord(info, _reader.ReadDnsName());
                break;

            case ResourceRecordType.MR:
                result = new MrRecord(info, _reader.ReadDnsName());
                break;

            case ResourceRecordType.NULL:
                result = new NullRecord(info, _reader.ReadBytes(info.RawDataLength).ToArray());
                break;

            case ResourceRecordType.WKS:
                result = ResolveWksRecord(info);
                break;

            case ResourceRecordType.PTR:
                result = new PtrRecord(info, _reader.ReadDnsName());
                break;

            case ResourceRecordType.HINFO:
                result = new HInfoRecord(info, _reader.ReadString(), _reader.ReadString());
                break;

            case ResourceRecordType.MINFO:
                result = new MInfoRecord(info, _reader.ReadDnsName(), _reader.ReadDnsName());
                break;

            case ResourceRecordType.MX:
                result = ResolveMXRecord(info);
                break;

            case ResourceRecordType.TXT:
                result = ResolveTXTRecord(info);
                break;

            case ResourceRecordType.RP:
                result = new RpRecord(info, _reader.ReadDnsName(), _reader.ReadDnsName());
                break;

            case ResourceRecordType.AFSDB:
                result = new AfsDbRecord(info, (AfsType)_reader.ReadUInt16NetworkOrder(), _reader.ReadDnsName());
                break;

            case ResourceRecordType.AAAA:
                result = new AaaaRecord(info, _reader.ReadIPv6Address());
                break;

            case ResourceRecordType.SRV:
                result = ResolveSrvRecord(info);
                break;

            case ResourceRecordType.OPT:
                result = ResolveOptRecord(info);
                break;

            case ResourceRecordType.URI:
                result = ResolveUriRecord(info);
                break;

            case ResourceRecordType.CAA:
                result = ResolveCaaRecord(info);
                break;

            default:
                // update reader index because we don't read full data for the empty record
                _reader.Index += info.RawDataLength;
                result         = new EmptyRecord(info);
                break;
            }

            // sanity check
            if (_reader.Index != oldIndex + info.RawDataLength)
            {
                throw new InvalidOperationException("Record reader index out of sync.");
            }

            return(result);
        }
Exemplo n.º 28
0
 public virtual T Visit(EmptyRecord record)
 {
     return(default(T));
 }
Exemplo n.º 29
0
 public int InsertEmptyRecordInfo(EmptyRecord emptyRecord)
 {
     return(dalEmptyRecord.InsertEmptyRecordInfo(emptyRecord));
 }