diff --git a/types.go b/types.go index 10fe2b56..5a8b4670 100644 --- a/types.go +++ b/types.go @@ -238,15 +238,8 @@ type MG struct { func (rr *MG) Header() *RR_Header { return &rr.Hdr } func (rr *MG) copy() RR { return &MG{*rr.Hdr.copyHeader(), rr.Mg} } - -func (rr *MG) String() string { - return rr.Hdr.String() + rr.Mg -} - -func (rr *MG) len() int { - l := len(rr.Mg) + 1 - return rr.Hdr.len() + l -} +func (rr *MG) len() int { l := len(rr.Mg) + 1; return rr.Hdr.len() + l } +func (rr *MG) String() string { return rr.Hdr.String() + rr.Mg } type MINFO struct { Hdr RR_Header @@ -274,16 +267,12 @@ type MR struct { func (rr *MR) Header() *RR_Header { return &rr.Hdr } func (rr *MR) copy() RR { return &MR{*rr.Hdr.copyHeader(), rr.Mr} } +func (rr *MR) len() int { l := len(rr.Mr) + 1; return rr.Hdr.len() + l } func (rr *MR) String() string { return rr.Hdr.String() + rr.Mr } -func (rr *MR) len() int { - l := len(rr.Mr) + 1 - return rr.Hdr.len() + l -} - type MF struct { Hdr RR_Header Mf string `dns:"cdomain-name"` @@ -291,15 +280,12 @@ type MF struct { func (rr *MF) Header() *RR_Header { return &rr.Hdr } func (rr *MF) copy() RR { return &MF{*rr.Hdr.copyHeader(), rr.Mf} } +func (rr *MF) len() int { return rr.Hdr.len() + len(rr.Mf) + 1 } func (rr *MF) String() string { return rr.Hdr.String() + " " + rr.Mf } -func (rr *MF) len() int { - return rr.Hdr.len() + len(rr.Mf) + 1 -} - type MD struct { Hdr RR_Header Md string `dns:"cdomain-name"` @@ -307,15 +293,12 @@ type MD struct { func (rr *MD) Header() *RR_Header { return &rr.Hdr } func (rr *MD) copy() RR { return &MD{*rr.Hdr.copyHeader(), rr.Md} } +func (rr *MD) len() int { return rr.Hdr.len() + len(rr.Md) + 1 } func (rr *MD) String() string { return rr.Hdr.String() + " " + rr.Md } -func (rr *MD) len() int { - return rr.Hdr.len() + len(rr.Md) + 1 -} - type MX struct { Hdr RR_Header Preference uint16 @@ -324,16 +307,12 @@ type MX struct { func (rr *MX) Header() *RR_Header { return &rr.Hdr } func (rr *MX) copy() RR { return &MX{*rr.Hdr.copyHeader(), rr.Preference, rr.Mx} } +func (rr *MX) len() int { l := len(rr.Mx) + 1; return rr.Hdr.len() + l + 2 } func (rr *MX) String() string { return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + rr.Mx } -func (rr *MX) len() int { - l := len(rr.Mx) + 1 - return rr.Hdr.len() + l + 2 -} - type AFSDB struct { Hdr RR_Header Subtype uint16 @@ -342,16 +321,12 @@ type AFSDB struct { func (rr *AFSDB) Header() *RR_Header { return &rr.Hdr } func (rr *AFSDB) copy() RR { return &AFSDB{*rr.Hdr.copyHeader(), rr.Subtype, rr.Hostname} } +func (rr *AFSDB) len() int { l := len(rr.Hostname) + 1; return rr.Hdr.len() + l + 2 } func (rr *AFSDB) String() string { return rr.Hdr.String() + strconv.Itoa(int(rr.Subtype)) + " " + rr.Hostname } -func (rr *AFSDB) len() int { - l := len(rr.Hostname) + 1 - return rr.Hdr.len() + l + 2 -} - type X25 struct { Hdr RR_Header PSDNAddress string @@ -359,15 +334,12 @@ type X25 struct { func (rr *X25) Header() *RR_Header { return &rr.Hdr } func (rr *X25) copy() RR { return &X25{*rr.Hdr.copyHeader(), rr.PSDNAddress} } +func (rr *X25) len() int { return rr.Hdr.len() + len(rr.PSDNAddress) + 1 } func (rr *X25) String() string { return rr.Hdr.String() + rr.PSDNAddress } -func (rr *X25) len() int { - return rr.Hdr.len() + len(rr.PSDNAddress) + 1 -} - type RT struct { Hdr RR_Header Preference uint16 @@ -376,33 +348,25 @@ type RT struct { func (rr *RT) Header() *RR_Header { return &rr.Hdr } func (rr *RT) copy() RR { return &RT{*rr.Hdr.copyHeader(), rr.Preference, rr.Host} } +func (rr *RT) len() int { l := len(rr.Host) + 1; return rr.Hdr.len() + l + 2 } func (rr *RT) String() string { return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + rr.Host } -func (rr *RT) len() int { - l := len(rr.Host) + 1 - return rr.Hdr.len() + l + 2 -} - type NS struct { Hdr RR_Header Ns string `dns:"cdomain-name"` } func (rr *NS) Header() *RR_Header { return &rr.Hdr } +func (rr *NS) len() int { l := len(rr.Ns) + 1; return rr.Hdr.len() + l } func (rr *NS) copy() RR { return &NS{*rr.Hdr.copyHeader(), rr.Ns} } func (rr *NS) String() string { return rr.Hdr.String() + rr.Ns } -func (rr *NS) len() int { - l := len(rr.Ns) + 1 - return rr.Hdr.len() + l -} - type PTR struct { Hdr RR_Header Ptr string `dns:"cdomain-name"` @@ -410,16 +374,12 @@ type PTR struct { func (rr *PTR) Header() *RR_Header { return &rr.Hdr } func (rr *PTR) copy() RR { return &PTR{*rr.Hdr.copyHeader(), rr.Ptr} } +func (rr *PTR) len() int { l := len(rr.Ptr) + 1; return rr.Hdr.len() + l } func (rr *PTR) String() string { return rr.Hdr.String() + rr.Ptr } -func (rr *PTR) len() int { - l := len(rr.Ptr) + 1 - return rr.Hdr.len() + l -} - type RP struct { Hdr RR_Header Mbox string `dns:"domain-name"` @@ -428,15 +388,12 @@ type RP struct { func (rr *RP) Header() *RR_Header { return &rr.Hdr } func (rr *RP) copy() RR { return &RP{*rr.Hdr.copyHeader(), rr.Mbox, rr.Txt} } +func (rr *RP) len() int { return rr.Hdr.len() + len(rr.Mbox) + 1 + len(rr.Txt) + 1 } func (rr *RP) String() string { return rr.Hdr.String() + rr.Mbox + " " + rr.Txt } -func (rr *RP) len() int { - return rr.Hdr.len() + len(rr.Mbox) + 1 + len(rr.Txt) + 1 -} - type SOA struct { Hdr RR_Header Ns string `dns:"cdomain-name"` @@ -541,6 +498,7 @@ type SRV struct { } func (rr *SRV) Header() *RR_Header { return &rr.Hdr } +func (rr *SRV) len() int { l := len(rr.Target) + 1; return rr.Hdr.len() + l + 6 } func (rr *SRV) copy() RR { return &SRV{*rr.Hdr.copyHeader(), rr.Priority, rr.Weight, rr.Port, rr.Target} } @@ -552,11 +510,6 @@ func (rr *SRV) String() string { strconv.Itoa(int(rr.Port)) + " " + rr.Target } -func (rr *SRV) len() int { - l := len(rr.Target) + 1 - return rr.Hdr.len() + l + 6 -} - type NAPTR struct { Hdr RR_Header Order uint16 @@ -621,16 +574,12 @@ type DNAME struct { func (rr *DNAME) Header() *RR_Header { return &rr.Hdr } func (rr *DNAME) copy() RR { return &DNAME{*rr.Hdr.copyHeader(), rr.Target} } +func (rr *DNAME) len() int { l := len(rr.Target) + 1; return rr.Hdr.len() + l } func (rr *DNAME) String() string { return rr.Hdr.String() + rr.Target } -func (rr *DNAME) len() int { - l := len(rr.Target) + 1 - return rr.Hdr.len() + l -} - type A struct { Hdr RR_Header A net.IP `dns:"a"` @@ -675,7 +624,7 @@ func (rr *PX) copy() RR { return &PX{*rr.Hdr.copyHeader(), rr.Preferen func (rr *PX) String() string { return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + rr.Map822 + " " + rr.Mapx400 } -func (rr *PX) len() int { return rr.Hdr.len() + 2 + len(rr.Map822) + 1 + len(rr.Mapx400) + 1} +func (rr *PX) len() int { return rr.Hdr.len() + 2 + len(rr.Map822) + 1 + len(rr.Mapx400) + 1 } type GPOS struct { Hdr RR_Header @@ -705,6 +654,7 @@ type LOC struct { } func (rr *LOC) Header() *RR_Header { return &rr.Hdr } +func (rr *LOC) len() int { return rr.Hdr.len() + 4 + 12 } func (rr *LOC) copy() RR { return &LOC{*rr.Hdr.copyHeader(), rr.Version, rr.Size, rr.HorizPre, rr.VertPre, rr.Latitude, rr.Longitude, rr.Altitude} } @@ -754,10 +704,6 @@ func (rr *LOC) String() string { return s } -func (rr *LOC) len() int { - return rr.Hdr.len() + 4 + 12 -} - type RRSIG struct { Hdr RR_Header TypeCovered uint16 @@ -838,6 +784,7 @@ type DS struct { } func (rr *DS) Header() *RR_Header { return &rr.Hdr } +func (rr *DS) len() int { return rr.Hdr.len() + 4 + len(rr.Digest)/2 } func (rr *DS) copy() RR { return &DS{*rr.Hdr.copyHeader(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} } @@ -849,10 +796,6 @@ func (rr *DS) String() string { " " + strings.ToUpper(rr.Digest) } -func (rr *DS) len() int { - return rr.Hdr.len() + 4 + len(rr.Digest)/2 -} - type CDS struct { Hdr RR_Header KeyTag uint16 @@ -862,6 +805,7 @@ type CDS struct { } func (rr *CDS) Header() *RR_Header { return &rr.Hdr } +func (rr *CDS) len() int { return rr.Hdr.len() + 4 + len(rr.Digest)/2 } func (rr *CDS) copy() RR { return &CDS{*rr.Hdr.copyHeader(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} } @@ -873,10 +817,6 @@ func (rr *CDS) String() string { " " + strings.ToUpper(rr.Digest) } -func (rr *CDS) len() int { - return rr.Hdr.len() + 4 + len(rr.Digest)/2 -} - type DLV struct { Hdr RR_Header KeyTag uint16 @@ -886,6 +826,7 @@ type DLV struct { } func (rr *DLV) Header() *RR_Header { return &rr.Hdr } +func (rr *DLV) len() int { return rr.Hdr.len() + 4 + len(rr.Digest)/2 } func (rr *DLV) copy() RR { return &DLV{*rr.Hdr.copyHeader(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} } @@ -897,10 +838,6 @@ func (rr *DLV) String() string { " " + strings.ToUpper(rr.Digest) } -func (rr *DLV) len() int { - return rr.Hdr.len() + 4 + len(rr.Digest)/2 -} - type KX struct { Hdr RR_Header Preference uint16 @@ -908,6 +845,7 @@ type KX struct { } func (rr *KX) Header() *RR_Header { return &rr.Hdr } +func (rr *KX) len() int { return rr.Hdr.len() + 2 + len(rr.Exchanger) + 1 } func (rr *KX) copy() RR { return &KX{*rr.Hdr.copyHeader(), rr.Preference, rr.Exchanger} } func (rr *KX) String() string { @@ -915,10 +853,6 @@ func (rr *KX) String() string { " " + rr.Exchanger } -func (rr *KX) len() int { - return rr.Hdr.len() + 2 + len(rr.Exchanger) + 1 -} - type TA struct { Hdr RR_Header KeyTag uint16 @@ -928,6 +862,7 @@ type TA struct { } func (rr *TA) Header() *RR_Header { return &rr.Hdr } +func (rr *TA) len() int { return rr.Hdr.len() + 4 + len(rr.Digest)/2 } func (rr *TA) copy() RR { return &TA{*rr.Hdr.copyHeader(), rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} } @@ -939,10 +874,6 @@ func (rr *TA) String() string { " " + strings.ToUpper(rr.Digest) } -func (rr *TA) len() int { - return rr.Hdr.len() + 4 + len(rr.Digest)/2 -} - type TALINK struct { Hdr RR_Header PreviousName string `dns:"domain-name"` @@ -951,16 +882,13 @@ type TALINK struct { func (rr *TALINK) Header() *RR_Header { return &rr.Hdr } func (rr *TALINK) copy() RR { return &TALINK{*rr.Hdr.copyHeader(), rr.PreviousName, rr.NextName} } +func (rr *TALINK) len() int { return rr.Hdr.len() + len(rr.PreviousName) + len(rr.NextName) + 2 } func (rr *TALINK) String() string { return rr.Hdr.String() + " " + rr.PreviousName + " " + rr.NextName } -func (rr *TALINK) len() int { - return rr.Hdr.len() + len(rr.PreviousName) + len(rr.NextName) + 2 -} - type SSHFP struct { Hdr RR_Header Algorithm uint8 @@ -969,6 +897,7 @@ type SSHFP struct { } func (rr *SSHFP) Header() *RR_Header { return &rr.Hdr } +func (rr *SSHFP) len() int { return rr.Hdr.len() + 2 + len(rr.FingerPrint)/2 } func (rr *SSHFP) copy() RR { return &SSHFP{*rr.Hdr.copyHeader(), rr.Algorithm, rr.Type, rr.FingerPrint} } @@ -979,10 +908,6 @@ func (rr *SSHFP) String() string { " " + strings.ToUpper(rr.FingerPrint) } -func (rr *SSHFP) len() int { - return rr.Hdr.len() + 2 + len(rr.FingerPrint)/2 -} - type IPSECKEY struct { Hdr RR_Header Precedence uint8 @@ -1019,6 +944,9 @@ type DNSKEY struct { } func (rr *DNSKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *DNSKEY) len() int { + return rr.Hdr.len() + 4 + base64.StdEncoding.DecodedLen(len(rr.PublicKey)) +} func (rr *DNSKEY) copy() RR { return &DNSKEY{*rr.Hdr.copyHeader(), rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey} } @@ -1030,11 +958,6 @@ func (rr *DNSKEY) String() string { " " + rr.PublicKey } -func (rr *DNSKEY) len() int { - return rr.Hdr.len() + 4 + - base64.StdEncoding.DecodedLen(len(rr.PublicKey)) -} - type RKEY struct { Hdr RR_Header Flags uint16 @@ -1044,6 +967,7 @@ type RKEY struct { } func (rr *RKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *RKEY) len() int { return rr.Hdr.len() + 4 + base64.StdEncoding.DecodedLen(len(rr.PublicKey)) } func (rr *RKEY) copy() RR { return &RKEY{*rr.Hdr.copyHeader(), rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey} } @@ -1055,11 +979,6 @@ func (rr *RKEY) String() string { " " + rr.PublicKey } -func (rr *RKEY) len() int { - return rr.Hdr.len() + 4 + - base64.StdEncoding.DecodedLen(len(rr.PublicKey)) -} - type NSAP struct { Hdr RR_Header Length uint8 @@ -1069,7 +988,7 @@ type NSAP struct { func (rr *NSAP) Header() *RR_Header { return &rr.Hdr } func (rr *NSAP) copy() RR { return &NSAP{*rr.Hdr.copyHeader(), rr.Length, rr.Nsap} } func (rr *NSAP) String() string { return rr.Hdr.String() + strconv.Itoa(int(rr.Length)) + " " + rr.Nsap } -func (rr *NSAP) len() int { return rr.Hdr.len() + 1 + len(rr.Nsap) + 1} +func (rr *NSAP) len() int { return rr.Hdr.len() + 1 + len(rr.Nsap) + 1 } type NSAPPTR struct { Hdr RR_Header @@ -1136,6 +1055,7 @@ type NSEC3PARAM struct { } func (rr *NSEC3PARAM) Header() *RR_Header { return &rr.Hdr } +func (rr *NSEC3PARAM) len() int { return rr.Hdr.len() + 2 + 4 + 1 + len(rr.Salt)/2 } func (rr *NSEC3PARAM) copy() RR { return &NSEC3PARAM{*rr.Hdr.copyHeader(), rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt} } @@ -1149,10 +1069,6 @@ func (rr *NSEC3PARAM) String() string { return s } -func (rr *NSEC3PARAM) len() int { - return rr.Hdr.len() + 2 + 4 + 1 + len(rr.Salt)/2 -} - type TKEY struct { Hdr RR_Header Algorithm string `dns:"domain-name"` @@ -1189,6 +1105,7 @@ type RFC3597 struct { func (rr *RFC3597) Header() *RR_Header { return &rr.Hdr } func (rr *RFC3597) copy() RR { return &RFC3597{*rr.Hdr.copyHeader(), rr.Rdata} } +func (rr *RFC3597) len() int { return rr.Hdr.len() + len(rr.Rdata)/2 + 2 } func (rr *RFC3597) String() string { s := rr.Hdr.String() @@ -1196,10 +1113,6 @@ func (rr *RFC3597) String() string { return s } -func (rr *RFC3597) len() int { - return rr.Hdr.len() + len(rr.Rdata)/2 + 2 -} - type URI struct { Hdr RR_Header Priority uint16 @@ -1242,15 +1155,8 @@ type DHCID struct { func (rr *DHCID) Header() *RR_Header { return &rr.Hdr } func (rr *DHCID) copy() RR { return &DHCID{*rr.Hdr.copyHeader(), rr.Digest} } - -func (rr *DHCID) String() string { - return rr.Hdr.String() + rr.Digest -} - -func (rr *DHCID) len() int { - return rr.Hdr.len() + - base64.StdEncoding.DecodedLen(len(rr.Digest)) -} +func (rr *DHCID) String() string { return rr.Hdr.String() + rr.Digest } +func (rr *DHCID) len() int { return rr.Hdr.len() + base64.StdEncoding.DecodedLen(len(rr.Digest)) } type TLSA struct { Hdr RR_Header @@ -1261,6 +1167,8 @@ type TLSA struct { } func (rr *TLSA) Header() *RR_Header { return &rr.Hdr } +func (rr *TLSA) len() int { return rr.Hdr.len() + 3 + len(rr.Certificate)/2 } + func (rr *TLSA) copy() RR { return &TLSA{*rr.Hdr.copyHeader(), rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate} } @@ -1273,10 +1181,6 @@ func (rr *TLSA) String() string { " " + rr.Certificate } -func (rr *TLSA) len() int { - return rr.Hdr.len() + 3 + len(rr.Certificate)/2 -} - type HIP struct { Hdr RR_Header HitLength uint8 @@ -1355,6 +1259,8 @@ type WKS struct { } func (rr *WKS) Header() *RR_Header { return &rr.Hdr } +func (rr *WKS) len() int { return rr.Hdr.len() + net.IPv4len + 1 } + func (rr *WKS) copy() RR { cp := make([]uint16, len(rr.BitMap), cap(rr.BitMap)) copy(cp, rr.BitMap) @@ -1373,10 +1279,6 @@ func (rr *WKS) String() (s string) { return s } -func (rr *WKS) len() int { - return rr.Hdr.len() + net.IPv4len + 1 -} - type NID struct { Hdr RR_Header Preference uint16 @@ -1385,6 +1287,7 @@ type NID struct { func (rr *NID) Header() *RR_Header { return &rr.Hdr } func (rr *NID) copy() RR { return &NID{*rr.Hdr.copyHeader(), rr.Preference, rr.NodeID} } +func (rr *NID) len() int { return rr.Hdr.len() + 2 + 8 } func (rr *NID) String() string { s := rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) @@ -1393,10 +1296,6 @@ func (rr *NID) String() string { return s } -func (rr *NID) len() int { - return rr.Hdr.len() + 2 + 8 -} - type L32 struct { Hdr RR_Header Preference uint16 @@ -1405,6 +1304,7 @@ type L32 struct { func (rr *L32) Header() *RR_Header { return &rr.Hdr } func (rr *L32) copy() RR { return &L32{*rr.Hdr.copyHeader(), rr.Preference, rr.Locator32} } +func (rr *L32) len() int { return rr.Hdr.len() + net.IPv4len } func (rr *L32) String() string { if rr.Locator32 == nil { @@ -1414,10 +1314,6 @@ func (rr *L32) String() string { " " + rr.Locator32.String() } -func (rr *L32) len() int { - return rr.Hdr.len() + net.IPv4len -} - type L64 struct { Hdr RR_Header Preference uint16 @@ -1426,6 +1322,7 @@ type L64 struct { func (rr *L64) Header() *RR_Header { return &rr.Hdr } func (rr *L64) copy() RR { return &L64{*rr.Hdr.copyHeader(), rr.Preference, rr.Locator64} } +func (rr *L64) len() int { return rr.Hdr.len() + 2 + 8 } func (rr *L64) String() string { s := rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) @@ -1434,10 +1331,6 @@ func (rr *L64) String() string { return s } -func (rr *L64) len() int { - return rr.Hdr.len() + 2 + 8 -} - type LP struct { Hdr RR_Header Preference uint16 @@ -1446,10 +1339,11 @@ type LP struct { func (rr *LP) Header() *RR_Header { return &rr.Hdr } func (rr *LP) copy() RR { return &LP{*rr.Hdr.copyHeader(), rr.Preference, rr.Fqdn} } +func (rr *LP) len() int { return rr.Hdr.len() + 2 + len(rr.Fqdn) + 1 } + func (rr *LP) String() string { return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + rr.Fqdn } -func (rr *LP) len() int { return rr.Hdr.len() + 2 + len(rr.Fqdn) + 1 } type EUI48 struct { Hdr RR_Header @@ -1480,6 +1374,7 @@ type CAA struct { func (rr *CAA) Header() *RR_Header { return &rr.Hdr } func (rr *CAA) copy() RR { return &CAA{*rr.Hdr.copyHeader(), rr.Flag, rr.Tag, rr.Value} } +func (rr *CAA) len() int { return rr.Hdr.len() + 1 + len(rr.Tag) + 1 + len(rr.Value) } func (rr *CAA) String() string { s := rr.Hdr.String() + strconv.FormatInt(int64(rr.Flag), 10) + " " + rr.Tag @@ -1487,12 +1382,6 @@ func (rr *CAA) String() string { return s } -func (rr *CAA) len() int { - l := rr.Hdr.len() + 1 + len(rr.Tag) + 1 - l += len(rr.Value) - return l -} - type UID struct { Hdr RR_Header Uid uint32