2 // Mono.Net.Dns.DnsResourceRecord
5 // Gonzalo Paniagua Javier (gonzalo.mono@gmail.com)
7 // Copyright 2011 Gonzalo Paniagua Javier
9 // Licensed under the Apache License, Version 2.0 (the "License");
10 // you may not use this file except in compliance with the License.
11 // You may obtain a copy of the License at
13 // http://www.apache.org/licenses/LICENSE-2.0
15 // Unless required by applicable law or agreed to in writing, software
16 // distributed under the License is distributed on an "AS IS" BASIS,
17 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 // See the License for the specific language governing permissions and
19 // limitations under the License.
22 using System.Collections.Generic;
26 namespace Mono.Net.Dns {
27 class DnsResourceRecord {
33 ArraySegment<byte> m_rdata;
35 internal DnsResourceRecord() {
38 internal void CopyFrom(DnsResourceRecord rr) {
43 rdlength = rr.rdlength;
47 static internal DnsResourceRecord CreateFromBuffer(DnsPacket packet, int size, ref int offset) {
48 string pname = packet.ReadName(ref offset);
49 DnsType ptype = (DnsType)packet.ReadUInt16(ref offset);
50 DnsClass pclass = (DnsClass)packet.ReadUInt16(ref offset);
51 int pttl = packet.ReadInt32(ref offset);
52 ushort prdlength = packet.ReadUInt16(ref offset);
53 DnsResourceRecord rr = new DnsResourceRecord();
58 rr.rdlength = prdlength;
59 rr.m_rdata = new ArraySegment<byte>(packet.Packet, offset, prdlength);
66 rr = new DnsResourceRecordA(rr);
69 rr = new DnsResourceRecordAAAA(rr);
72 rr = new DnsResourceRecordCName(rr);
75 rr = new DnsResourceRecordPTR(rr);
95 public DnsClass Class {
103 public ArraySegment<byte> Data {
104 get { return m_rdata; }
107 public override string ToString() {
108 return String.Format("Name: {0}, Type: {1}, Class: {2}, Ttl: {3}, Data length: {4}", name, type, klass, ttl, Data.Count);