|
@@ -206,6 +206,8 @@ var CertTypeToString = map[uint16]string{
|
|
|
// StringToCertType is the reverseof CertTypeToString.
|
|
|
var StringToCertType = reverseInt16(CertTypeToString)
|
|
|
|
|
|
+//go:generate go run types_generate.go
|
|
|
+
|
|
|
// Question holds a DNS question. There can be multiple questions in the
|
|
|
// question section of a message. Usually there is just one.
|
|
|
type Question struct {
|
|
@@ -214,6 +216,10 @@ type Question struct {
|
|
|
Qclass uint16
|
|
|
}
|
|
|
|
|
|
+func (q *Question) len() int {
|
|
|
+ return len(q.Name) + 1 + 2 + 2
|
|
|
+}
|
|
|
+
|
|
|
func (q *Question) String() (s string) {
|
|
|
// prefix with ; (as in dig)
|
|
|
s = ";" + sprintName(q.Name) + "\t"
|
|
@@ -222,11 +228,6 @@ func (q *Question) String() (s string) {
|
|
|
return s
|
|
|
}
|
|
|
|
|
|
-func (q *Question) len() int {
|
|
|
- l := len(q.Name) + 1
|
|
|
- return l + 4
|
|
|
-}
|
|
|
-
|
|
|
// ANY is a wildcard record. See RFC 1035, Section 3.2.3. ANY
|
|
|
// is named "*" there.
|
|
|
type ANY struct {
|
|
@@ -234,20 +235,14 @@ type ANY struct {
|
|
|
// Does not have any rdata
|
|
|
}
|
|
|
|
|
|
-func (rr *ANY) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *ANY) copy() RR { return &ANY{*rr.Hdr.copyHeader()} }
|
|
|
-func (rr *ANY) String() string { return rr.Hdr.String() }
|
|
|
-func (rr *ANY) len() int { return rr.Hdr.len() }
|
|
|
+func (rr *ANY) String() string { return rr.Hdr.String() }
|
|
|
|
|
|
type CNAME struct {
|
|
|
Hdr RR_Header
|
|
|
Target string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-func (rr *CNAME) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *CNAME) copy() RR { return &CNAME{*rr.Hdr.copyHeader(), sprintName(rr.Target)} }
|
|
|
-func (rr *CNAME) String() string { return rr.Hdr.String() + rr.Target }
|
|
|
-func (rr *CNAME) len() int { return rr.Hdr.len() + len(rr.Target) + 1 }
|
|
|
+func (rr *CNAME) String() string { return rr.Hdr.String() + sprintName(rr.Target) }
|
|
|
|
|
|
type HINFO struct {
|
|
|
Hdr RR_Header
|
|
@@ -255,33 +250,23 @@ type HINFO struct {
|
|
|
Os string
|
|
|
}
|
|
|
|
|
|
-func (rr *HINFO) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *HINFO) copy() RR { return &HINFO{*rr.Hdr.copyHeader(), rr.Cpu, rr.Os} }
|
|
|
func (rr *HINFO) String() string {
|
|
|
return rr.Hdr.String() + sprintTxt([]string{rr.Cpu, rr.Os})
|
|
|
}
|
|
|
-func (rr *HINFO) len() int { return rr.Hdr.len() + len(rr.Cpu) + len(rr.Os) }
|
|
|
|
|
|
type MB struct {
|
|
|
Hdr RR_Header
|
|
|
Mb string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-func (rr *MB) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *MB) copy() RR { return &MB{*rr.Hdr.copyHeader(), sprintName(rr.Mb)} }
|
|
|
-
|
|
|
-func (rr *MB) String() string { return rr.Hdr.String() + rr.Mb }
|
|
|
-func (rr *MB) len() int { return rr.Hdr.len() + len(rr.Mb) + 1 }
|
|
|
+func (rr *MB) String() string { return rr.Hdr.String() + sprintName(rr.Mb) }
|
|
|
|
|
|
type MG struct {
|
|
|
Hdr RR_Header
|
|
|
Mg string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-func (rr *MG) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *MG) copy() RR { return &MG{*rr.Hdr.copyHeader(), rr.Mg} }
|
|
|
-func (rr *MG) len() int { l := len(rr.Mg) + 1; return rr.Hdr.len() + l }
|
|
|
-func (rr *MG) String() string { return rr.Hdr.String() + sprintName(rr.Mg) }
|
|
|
+func (rr *MG) String() string { return rr.Hdr.String() + sprintName(rr.Mg) }
|
|
|
|
|
|
type MINFO struct {
|
|
|
Hdr RR_Header
|
|
@@ -289,28 +274,15 @@ type MINFO struct {
|
|
|
Email string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-func (rr *MINFO) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *MINFO) copy() RR { return &MINFO{*rr.Hdr.copyHeader(), rr.Rmail, rr.Email} }
|
|
|
-
|
|
|
func (rr *MINFO) String() string {
|
|
|
return rr.Hdr.String() + sprintName(rr.Rmail) + " " + sprintName(rr.Email)
|
|
|
}
|
|
|
|
|
|
-func (rr *MINFO) len() int {
|
|
|
- l := len(rr.Rmail) + 1
|
|
|
- n := len(rr.Email) + 1
|
|
|
- return rr.Hdr.len() + l + n
|
|
|
-}
|
|
|
-
|
|
|
type MR struct {
|
|
|
Hdr RR_Header
|
|
|
Mr string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-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() + sprintName(rr.Mr)
|
|
|
}
|
|
@@ -320,10 +292,6 @@ type MF struct {
|
|
|
Mf string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-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() + sprintName(rr.Mf)
|
|
|
}
|
|
@@ -333,10 +301,6 @@ type MD struct {
|
|
|
Md string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-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() + sprintName(rr.Md)
|
|
|
}
|
|
@@ -347,10 +311,6 @@ type MX struct {
|
|
|
Mx string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-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)) + " " + sprintName(rr.Mx)
|
|
|
}
|
|
@@ -361,10 +321,6 @@ type AFSDB struct {
|
|
|
Hostname string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-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)) + " " + sprintName(rr.Hostname)
|
|
|
}
|
|
@@ -374,10 +330,6 @@ type X25 struct {
|
|
|
PSDNAddress string
|
|
|
}
|
|
|
|
|
|
-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
|
|
|
}
|
|
@@ -388,10 +340,6 @@ type RT struct {
|
|
|
Host string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-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)) + " " + sprintName(rr.Host)
|
|
|
}
|
|
@@ -401,10 +349,6 @@ type NS struct {
|
|
|
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() + sprintName(rr.Ns)
|
|
|
}
|
|
@@ -414,10 +358,6 @@ type PTR struct {
|
|
|
Ptr string `dns:"cdomain-name"`
|
|
|
}
|
|
|
|
|
|
-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() + sprintName(rr.Ptr)
|
|
|
}
|
|
@@ -428,10 +368,6 @@ type RP struct {
|
|
|
Txt string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-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 + " " + sprintTxt([]string{rr.Txt})
|
|
|
}
|
|
@@ -447,11 +383,6 @@ type SOA struct {
|
|
|
Minttl uint32
|
|
|
}
|
|
|
|
|
|
-func (rr *SOA) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *SOA) copy() RR {
|
|
|
- return &SOA{*rr.Hdr.copyHeader(), rr.Ns, rr.Mbox, rr.Serial, rr.Refresh, rr.Retry, rr.Expire, rr.Minttl}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *SOA) String() string {
|
|
|
return rr.Hdr.String() + sprintName(rr.Ns) + " " + sprintName(rr.Mbox) +
|
|
|
" " + strconv.FormatInt(int64(rr.Serial), 10) +
|
|
@@ -461,24 +392,11 @@ func (rr *SOA) String() string {
|
|
|
" " + strconv.FormatInt(int64(rr.Minttl), 10)
|
|
|
}
|
|
|
|
|
|
-func (rr *SOA) len() int {
|
|
|
- l := len(rr.Ns) + 1
|
|
|
- n := len(rr.Mbox) + 1
|
|
|
- return rr.Hdr.len() + l + n + 20
|
|
|
-}
|
|
|
-
|
|
|
type TXT struct {
|
|
|
Hdr RR_Header
|
|
|
Txt []string `dns:"txt"`
|
|
|
}
|
|
|
|
|
|
-func (rr *TXT) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *TXT) copy() RR {
|
|
|
- cp := make([]string, len(rr.Txt), cap(rr.Txt))
|
|
|
- copy(cp, rr.Txt)
|
|
|
- return &TXT{*rr.Hdr.copyHeader(), cp}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *TXT) String() string { return rr.Hdr.String() + sprintTxt(rr.Txt) }
|
|
|
|
|
|
func sprintName(s string) string {
|
|
@@ -621,36 +539,13 @@ func nextByte(b []byte, offset int) (byte, int) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (rr *TXT) len() int {
|
|
|
- l := rr.Hdr.len()
|
|
|
- for _, t := range rr.Txt {
|
|
|
- l += len(t) + 1
|
|
|
- }
|
|
|
- return l
|
|
|
-}
|
|
|
-
|
|
|
type SPF struct {
|
|
|
Hdr RR_Header
|
|
|
Txt []string `dns:"txt"`
|
|
|
}
|
|
|
|
|
|
-func (rr *SPF) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *SPF) copy() RR {
|
|
|
- cp := make([]string, len(rr.Txt), cap(rr.Txt))
|
|
|
- copy(cp, rr.Txt)
|
|
|
- return &SPF{*rr.Hdr.copyHeader(), cp}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *SPF) String() string { return rr.Hdr.String() + sprintTxt(rr.Txt) }
|
|
|
|
|
|
-func (rr *SPF) len() int {
|
|
|
- l := rr.Hdr.len()
|
|
|
- for _, t := range rr.Txt {
|
|
|
- l += len(t) + 1
|
|
|
- }
|
|
|
- return l
|
|
|
-}
|
|
|
-
|
|
|
type SRV struct {
|
|
|
Hdr RR_Header
|
|
|
Priority uint16
|
|
@@ -659,12 +554,6 @@ type SRV struct {
|
|
|
Target string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-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}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *SRV) String() string {
|
|
|
return rr.Hdr.String() +
|
|
|
strconv.Itoa(int(rr.Priority)) + " " +
|
|
@@ -682,11 +571,6 @@ type NAPTR struct {
|
|
|
Replacement string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-func (rr *NAPTR) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *NAPTR) copy() RR {
|
|
|
- return &NAPTR{*rr.Hdr.copyHeader(), rr.Order, rr.Preference, rr.Flags, rr.Service, rr.Regexp, rr.Replacement}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *NAPTR) String() string {
|
|
|
return rr.Hdr.String() +
|
|
|
strconv.Itoa(int(rr.Order)) + " " +
|
|
@@ -697,11 +581,6 @@ func (rr *NAPTR) String() string {
|
|
|
rr.Replacement
|
|
|
}
|
|
|
|
|
|
-func (rr *NAPTR) len() int {
|
|
|
- return rr.Hdr.len() + 4 + len(rr.Flags) + 1 + len(rr.Service) + 1 +
|
|
|
- len(rr.Regexp) + 1 + len(rr.Replacement) + 1
|
|
|
-}
|
|
|
-
|
|
|
// The CERT resource record, see RFC 4398.
|
|
|
type CERT struct {
|
|
|
Hdr RR_Header
|
|
@@ -711,11 +590,6 @@ type CERT struct {
|
|
|
Certificate string `dns:"base64"`
|
|
|
}
|
|
|
|
|
|
-func (rr *CERT) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *CERT) copy() RR {
|
|
|
- return &CERT{*rr.Hdr.copyHeader(), rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *CERT) String() string {
|
|
|
var (
|
|
|
ok bool
|
|
@@ -733,21 +607,12 @@ func (rr *CERT) String() string {
|
|
|
" " + rr.Certificate
|
|
|
}
|
|
|
|
|
|
-func (rr *CERT) len() int {
|
|
|
- return rr.Hdr.len() + 5 +
|
|
|
- base64.StdEncoding.DecodedLen(len(rr.Certificate))
|
|
|
-}
|
|
|
-
|
|
|
// The DNAME resource record, see RFC 2672.
|
|
|
type DNAME struct {
|
|
|
Hdr RR_Header
|
|
|
Target string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-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() + sprintName(rr.Target)
|
|
|
}
|
|
@@ -757,10 +622,6 @@ type A struct {
|
|
|
A net.IP `dns:"a"`
|
|
|
}
|
|
|
|
|
|
-func (rr *A) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *A) copy() RR { return &A{*rr.Hdr.copyHeader(), copyIP(rr.A)} }
|
|
|
-func (rr *A) len() int { return rr.Hdr.len() + net.IPv4len }
|
|
|
-
|
|
|
func (rr *A) String() string {
|
|
|
if rr.A == nil {
|
|
|
return rr.Hdr.String()
|
|
@@ -773,10 +634,6 @@ type AAAA struct {
|
|
|
AAAA net.IP `dns:"aaaa"`
|
|
|
}
|
|
|
|
|
|
-func (rr *AAAA) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *AAAA) copy() RR { return &AAAA{*rr.Hdr.copyHeader(), copyIP(rr.AAAA)} }
|
|
|
-func (rr *AAAA) len() int { return rr.Hdr.len() + net.IPv6len }
|
|
|
-
|
|
|
func (rr *AAAA) String() string {
|
|
|
if rr.AAAA == nil {
|
|
|
return rr.Hdr.String()
|
|
@@ -791,12 +648,9 @@ type PX struct {
|
|
|
Mapx400 string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-func (rr *PX) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *PX) copy() RR { return &PX{*rr.Hdr.copyHeader(), rr.Preference, rr.Map822, rr.Mapx400} }
|
|
|
func (rr *PX) String() string {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Map822) + " " + sprintName(rr.Mapx400)
|
|
|
}
|
|
|
-func (rr *PX) len() int { return rr.Hdr.len() + 2 + len(rr.Map822) + 1 + len(rr.Mapx400) + 1 }
|
|
|
|
|
|
type GPOS struct {
|
|
|
Hdr RR_Header
|
|
@@ -805,11 +659,6 @@ type GPOS struct {
|
|
|
Altitude string
|
|
|
}
|
|
|
|
|
|
-func (rr *GPOS) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *GPOS) copy() RR { return &GPOS{*rr.Hdr.copyHeader(), rr.Longitude, rr.Latitude, rr.Altitude} }
|
|
|
-func (rr *GPOS) len() int {
|
|
|
- return rr.Hdr.len() + len(rr.Longitude) + len(rr.Latitude) + len(rr.Altitude) + 3
|
|
|
-}
|
|
|
func (rr *GPOS) String() string {
|
|
|
return rr.Hdr.String() + rr.Longitude + " " + rr.Latitude + " " + rr.Altitude
|
|
|
}
|
|
@@ -825,12 +674,6 @@ type LOC struct {
|
|
|
Altitude uint32
|
|
|
}
|
|
|
|
|
|
-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}
|
|
|
-}
|
|
|
-
|
|
|
// cmToM takes a cm value expressed in RFC1876 SIZE mantissa/exponent
|
|
|
// format and returns a string in m (two decimals for the cm)
|
|
|
func cmToM(m, e uint8) string {
|
|
@@ -914,11 +757,6 @@ type RRSIG struct {
|
|
|
Signature string `dns:"base64"`
|
|
|
}
|
|
|
|
|
|
-func (rr *RRSIG) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *RRSIG) copy() RR {
|
|
|
- return &RRSIG{*rr.Hdr.copyHeader(), rr.TypeCovered, rr.Algorithm, rr.Labels, rr.OrigTtl, rr.Expiration, rr.Inception, rr.KeyTag, rr.SignerName, rr.Signature}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *RRSIG) String() string {
|
|
|
s := rr.Hdr.String()
|
|
|
s += Type(rr.TypeCovered).String()
|
|
@@ -933,24 +771,12 @@ func (rr *RRSIG) String() string {
|
|
|
return s
|
|
|
}
|
|
|
|
|
|
-func (rr *RRSIG) len() int {
|
|
|
- return rr.Hdr.len() + len(rr.SignerName) + 1 +
|
|
|
- base64.StdEncoding.DecodedLen(len(rr.Signature)) + 18
|
|
|
-}
|
|
|
-
|
|
|
type NSEC struct {
|
|
|
Hdr RR_Header
|
|
|
NextDomain string `dns:"domain-name"`
|
|
|
TypeBitMap []uint16 `dns:"nsec"`
|
|
|
}
|
|
|
|
|
|
-func (rr *NSEC) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *NSEC) copy() RR {
|
|
|
- cp := make([]uint16, len(rr.TypeBitMap), cap(rr.TypeBitMap))
|
|
|
- copy(cp, rr.TypeBitMap)
|
|
|
- return &NSEC{*rr.Hdr.copyHeader(), rr.NextDomain, cp}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *NSEC) String() string {
|
|
|
s := rr.Hdr.String() + sprintName(rr.NextDomain)
|
|
|
for i := 0; i < len(rr.TypeBitMap); i++ {
|
|
@@ -988,12 +814,6 @@ type DS struct {
|
|
|
Digest string `dns:"hex"`
|
|
|
}
|
|
|
|
|
|
-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}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *DS) String() string {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.KeyTag)) +
|
|
|
" " + strconv.Itoa(int(rr.Algorithm)) +
|
|
@@ -1007,10 +827,6 @@ type KX struct {
|
|
|
Exchanger string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-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 {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) +
|
|
|
" " + sprintName(rr.Exchanger)
|
|
@@ -1024,12 +840,6 @@ type TA struct {
|
|
|
Digest string `dns:"hex"`
|
|
|
}
|
|
|
|
|
|
-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}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *TA) String() string {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.KeyTag)) +
|
|
|
" " + strconv.Itoa(int(rr.Algorithm)) +
|
|
@@ -1043,10 +853,6 @@ type TALINK struct {
|
|
|
NextName string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-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() +
|
|
|
sprintName(rr.PreviousName) + " " + sprintName(rr.NextName)
|
|
@@ -1059,12 +865,6 @@ type SSHFP struct {
|
|
|
FingerPrint string `dns:"hex"`
|
|
|
}
|
|
|
|
|
|
-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}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *SSHFP) String() string {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Algorithm)) +
|
|
|
" " + strconv.Itoa(int(rr.Type)) +
|
|
@@ -1085,11 +885,6 @@ type IPSECKEY struct {
|
|
|
PublicKey string `dns:"base64"`
|
|
|
}
|
|
|
|
|
|
-func (rr *IPSECKEY) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *IPSECKEY) copy() RR {
|
|
|
- return &IPSECKEY{*rr.Hdr.copyHeader(), rr.Precedence, rr.GatewayType, rr.Algorithm, rr.GatewayA, rr.GatewayAAAA, rr.GatewayName, rr.PublicKey}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *IPSECKEY) String() string {
|
|
|
s := rr.Hdr.String() + strconv.Itoa(int(rr.Precedence)) +
|
|
|
" " + strconv.Itoa(int(rr.GatewayType)) +
|
|
@@ -1143,14 +938,6 @@ type DNSKEY struct {
|
|
|
PublicKey string `dns:"base64"`
|
|
|
}
|
|
|
|
|
|
-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}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *DNSKEY) String() string {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Flags)) +
|
|
|
" " + strconv.Itoa(int(rr.Protocol)) +
|
|
@@ -1166,12 +953,6 @@ type RKEY struct {
|
|
|
PublicKey string `dns:"base64"`
|
|
|
}
|
|
|
|
|
|
-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}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *RKEY) String() string {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Flags)) +
|
|
|
" " + strconv.Itoa(int(rr.Protocol)) +
|
|
@@ -1184,10 +965,7 @@ type NSAPPTR struct {
|
|
|
Ptr string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-func (rr *NSAPPTR) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *NSAPPTR) copy() RR { return &NSAPPTR{*rr.Hdr.copyHeader(), rr.Ptr} }
|
|
|
-func (rr *NSAPPTR) String() string { return rr.Hdr.String() + sprintName(rr.Ptr) }
|
|
|
-func (rr *NSAPPTR) len() int { return rr.Hdr.len() + len(rr.Ptr) }
|
|
|
+func (rr *NSAPPTR) String() string { return rr.Hdr.String() + sprintName(rr.Ptr) }
|
|
|
|
|
|
type NSEC3 struct {
|
|
|
Hdr RR_Header
|
|
@@ -1201,13 +979,6 @@ type NSEC3 struct {
|
|
|
TypeBitMap []uint16 `dns:"nsec"`
|
|
|
}
|
|
|
|
|
|
-func (rr *NSEC3) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *NSEC3) copy() RR {
|
|
|
- cp := make([]uint16, len(rr.TypeBitMap), cap(rr.TypeBitMap))
|
|
|
- copy(cp, rr.TypeBitMap)
|
|
|
- return &NSEC3{*rr.Hdr.copyHeader(), rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt, rr.HashLength, rr.NextDomain, cp}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *NSEC3) String() string {
|
|
|
s := rr.Hdr.String()
|
|
|
s += strconv.Itoa(int(rr.Hash)) +
|
|
@@ -1243,12 +1014,6 @@ type NSEC3PARAM struct {
|
|
|
Salt string `dns:"hex"`
|
|
|
}
|
|
|
|
|
|
-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}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *NSEC3PARAM) String() string {
|
|
|
s := rr.Hdr.String()
|
|
|
s += strconv.Itoa(int(rr.Hash)) +
|
|
@@ -1271,31 +1036,17 @@ type TKEY struct {
|
|
|
OtherData string
|
|
|
}
|
|
|
|
|
|
-func (rr *TKEY) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *TKEY) copy() RR {
|
|
|
- return &TKEY{*rr.Hdr.copyHeader(), rr.Algorithm, rr.Inception, rr.Expiration, rr.Mode, rr.Error, rr.KeySize, rr.Key, rr.OtherLen, rr.OtherData}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *TKEY) String() string {
|
|
|
// It has no presentation format
|
|
|
return ""
|
|
|
}
|
|
|
|
|
|
-func (rr *TKEY) len() int {
|
|
|
- return rr.Hdr.len() + len(rr.Algorithm) + 1 + 4 + 4 + 6 +
|
|
|
- len(rr.Key) + 2 + len(rr.OtherData)
|
|
|
-}
|
|
|
-
|
|
|
// RFC3597 represents an unknown/generic RR.
|
|
|
type RFC3597 struct {
|
|
|
Hdr RR_Header
|
|
|
Rdata string `dns:"hex"`
|
|
|
}
|
|
|
|
|
|
-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 {
|
|
|
// Let's call it a hack
|
|
|
s := rfc3597Header(rr.Hdr)
|
|
@@ -1321,9 +1072,6 @@ type URI struct {
|
|
|
Target string `dns:"octet"`
|
|
|
}
|
|
|
|
|
|
-func (rr *URI) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *URI) copy() RR { return &URI{*rr.Hdr.copyHeader(), rr.Weight, rr.Priority, rr.Target} }
|
|
|
-func (rr *URI) len() int { return rr.Hdr.len() + 4 + len(rr.Target) }
|
|
|
func (rr *URI) String() string {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Priority)) +
|
|
|
" " + strconv.Itoa(int(rr.Weight)) + " " + sprintTxtOctet(rr.Target)
|
|
@@ -1334,10 +1082,7 @@ type DHCID struct {
|
|
|
Digest string `dns:"base64"`
|
|
|
}
|
|
|
|
|
|
-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 }
|
|
|
|
|
|
type TLSA struct {
|
|
|
Hdr RR_Header
|
|
@@ -1347,13 +1092,6 @@ type TLSA struct {
|
|
|
Certificate string `dns:"hex"`
|
|
|
}
|
|
|
|
|
|
-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}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *TLSA) String() string {
|
|
|
return rr.Hdr.String() +
|
|
|
strconv.Itoa(int(rr.Usage)) +
|
|
@@ -1372,13 +1110,6 @@ type HIP struct {
|
|
|
RendezvousServers []string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-func (rr *HIP) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *HIP) copy() RR {
|
|
|
- cp := make([]string, len(rr.RendezvousServers), cap(rr.RendezvousServers))
|
|
|
- copy(cp, rr.RendezvousServers)
|
|
|
- return &HIP{*rr.Hdr.copyHeader(), rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, cp}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *HIP) String() string {
|
|
|
s := rr.Hdr.String() +
|
|
|
strconv.Itoa(int(rr.PublicKeyAlgorithm)) +
|
|
@@ -1390,38 +1121,13 @@ func (rr *HIP) String() string {
|
|
|
return s
|
|
|
}
|
|
|
|
|
|
-func (rr *HIP) len() int {
|
|
|
- l := rr.Hdr.len() + 4 +
|
|
|
- len(rr.Hit)/2 +
|
|
|
- base64.StdEncoding.DecodedLen(len(rr.PublicKey))
|
|
|
- for _, d := range rr.RendezvousServers {
|
|
|
- l += len(d) + 1
|
|
|
- }
|
|
|
- return l
|
|
|
-}
|
|
|
-
|
|
|
type NINFO struct {
|
|
|
Hdr RR_Header
|
|
|
ZSData []string `dns:"txt"`
|
|
|
}
|
|
|
|
|
|
-func (rr *NINFO) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *NINFO) copy() RR {
|
|
|
- cp := make([]string, len(rr.ZSData), cap(rr.ZSData))
|
|
|
- copy(cp, rr.ZSData)
|
|
|
- return &NINFO{*rr.Hdr.copyHeader(), cp}
|
|
|
-}
|
|
|
-
|
|
|
func (rr *NINFO) String() string { return rr.Hdr.String() + sprintTxt(rr.ZSData) }
|
|
|
|
|
|
-func (rr *NINFO) len() int {
|
|
|
- l := rr.Hdr.len()
|
|
|
- for _, t := range rr.ZSData {
|
|
|
- l += len(t) + 1
|
|
|
- }
|
|
|
- return l
|
|
|
-}
|
|
|
-
|
|
|
type WKS struct {
|
|
|
Hdr RR_Header
|
|
|
Address net.IP `dns:"a"`
|
|
@@ -1429,13 +1135,9 @@ type WKS struct {
|
|
|
BitMap []uint16 `dns:"wks"`
|
|
|
}
|
|
|
|
|
|
-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)
|
|
|
- return &WKS{*rr.Hdr.copyHeader(), copyIP(rr.Address), rr.Protocol, cp}
|
|
|
+func (rr *WKS) len() int {
|
|
|
+ // TODO: this is missing something...
|
|
|
+ return rr.Hdr.len() + net.IPv4len + 1
|
|
|
}
|
|
|
|
|
|
func (rr *WKS) String() (s string) {
|
|
@@ -1457,10 +1159,6 @@ type NID struct {
|
|
|
NodeID uint64
|
|
|
}
|
|
|
|
|
|
-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))
|
|
|
node := fmt.Sprintf("%0.16x", rr.NodeID)
|
|
@@ -1474,10 +1172,6 @@ type L32 struct {
|
|
|
Locator32 net.IP `dns:"a"`
|
|
|
}
|
|
|
|
|
|
-func (rr *L32) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *L32) copy() RR { return &L32{*rr.Hdr.copyHeader(), rr.Preference, copyIP(rr.Locator32)} }
|
|
|
-func (rr *L32) len() int { return rr.Hdr.len() + net.IPv4len }
|
|
|
-
|
|
|
func (rr *L32) String() string {
|
|
|
if rr.Locator32 == nil {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Preference))
|
|
@@ -1492,10 +1186,6 @@ type L64 struct {
|
|
|
Locator64 uint64
|
|
|
}
|
|
|
|
|
|
-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))
|
|
|
node := fmt.Sprintf("%0.16X", rr.Locator64)
|
|
@@ -1509,10 +1199,6 @@ type LP struct {
|
|
|
Fqdn string `dns:"domain-name"`
|
|
|
}
|
|
|
|
|
|
-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)) + " " + sprintName(rr.Fqdn)
|
|
|
}
|
|
@@ -1522,20 +1208,14 @@ type EUI48 struct {
|
|
|
Address uint64 `dns:"uint48"`
|
|
|
}
|
|
|
|
|
|
-func (rr *EUI48) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *EUI48) copy() RR { return &EUI48{*rr.Hdr.copyHeader(), rr.Address} }
|
|
|
-func (rr *EUI48) String() string { return rr.Hdr.String() + euiToString(rr.Address, 48) }
|
|
|
-func (rr *EUI48) len() int { return rr.Hdr.len() + 6 }
|
|
|
+func (rr *EUI48) String() string { return rr.Hdr.String() + euiToString(rr.Address, 48) }
|
|
|
|
|
|
type EUI64 struct {
|
|
|
Hdr RR_Header
|
|
|
Address uint64
|
|
|
}
|
|
|
|
|
|
-func (rr *EUI64) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *EUI64) copy() RR { return &EUI64{*rr.Hdr.copyHeader(), rr.Address} }
|
|
|
-func (rr *EUI64) String() string { return rr.Hdr.String() + euiToString(rr.Address, 64) }
|
|
|
-func (rr *EUI64) len() int { return rr.Hdr.len() + 8 }
|
|
|
+func (rr *EUI64) String() string { return rr.Hdr.String() + euiToString(rr.Address, 64) }
|
|
|
|
|
|
type CAA struct {
|
|
|
Hdr RR_Header
|
|
@@ -1544,9 +1224,6 @@ type CAA struct {
|
|
|
Value string `dns:"octet"`
|
|
|
}
|
|
|
|
|
|
-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() + 2 + len(rr.Tag) + len(rr.Value) }
|
|
|
func (rr *CAA) String() string {
|
|
|
return rr.Hdr.String() + strconv.Itoa(int(rr.Flag)) + " " + rr.Tag + " " + sprintTxtOctet(rr.Value)
|
|
|
}
|
|
@@ -1556,62 +1233,42 @@ type UID struct {
|
|
|
Uid uint32
|
|
|
}
|
|
|
|
|
|
-func (rr *UID) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *UID) copy() RR { return &UID{*rr.Hdr.copyHeader(), rr.Uid} }
|
|
|
-func (rr *UID) String() string { return rr.Hdr.String() + strconv.FormatInt(int64(rr.Uid), 10) }
|
|
|
-func (rr *UID) len() int { return rr.Hdr.len() + 4 }
|
|
|
+func (rr *UID) String() string { return rr.Hdr.String() + strconv.FormatInt(int64(rr.Uid), 10) }
|
|
|
|
|
|
type GID struct {
|
|
|
Hdr RR_Header
|
|
|
Gid uint32
|
|
|
}
|
|
|
|
|
|
-func (rr *GID) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *GID) copy() RR { return &GID{*rr.Hdr.copyHeader(), rr.Gid} }
|
|
|
-func (rr *GID) String() string { return rr.Hdr.String() + strconv.FormatInt(int64(rr.Gid), 10) }
|
|
|
-func (rr *GID) len() int { return rr.Hdr.len() + 4 }
|
|
|
+func (rr *GID) String() string { return rr.Hdr.String() + strconv.FormatInt(int64(rr.Gid), 10) }
|
|
|
|
|
|
type UINFO struct {
|
|
|
Hdr RR_Header
|
|
|
Uinfo string
|
|
|
}
|
|
|
|
|
|
-func (rr *UINFO) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *UINFO) copy() RR { return &UINFO{*rr.Hdr.copyHeader(), rr.Uinfo} }
|
|
|
-func (rr *UINFO) String() string { return rr.Hdr.String() + sprintTxt([]string{rr.Uinfo}) }
|
|
|
-func (rr *UINFO) len() int { return rr.Hdr.len() + len(rr.Uinfo) + 1 }
|
|
|
+func (rr *UINFO) String() string { return rr.Hdr.String() + sprintTxt([]string{rr.Uinfo}) }
|
|
|
|
|
|
type EID struct {
|
|
|
Hdr RR_Header
|
|
|
Endpoint string `dns:"hex"`
|
|
|
}
|
|
|
|
|
|
-func (rr *EID) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *EID) copy() RR { return &EID{*rr.Hdr.copyHeader(), rr.Endpoint} }
|
|
|
-func (rr *EID) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Endpoint) }
|
|
|
-func (rr *EID) len() int { return rr.Hdr.len() + len(rr.Endpoint)/2 }
|
|
|
+func (rr *EID) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Endpoint) }
|
|
|
|
|
|
type NIMLOC struct {
|
|
|
Hdr RR_Header
|
|
|
Locator string `dns:"hex"`
|
|
|
}
|
|
|
|
|
|
-func (rr *NIMLOC) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *NIMLOC) copy() RR { return &NIMLOC{*rr.Hdr.copyHeader(), rr.Locator} }
|
|
|
-func (rr *NIMLOC) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Locator) }
|
|
|
-func (rr *NIMLOC) len() int { return rr.Hdr.len() + len(rr.Locator)/2 }
|
|
|
+func (rr *NIMLOC) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Locator) }
|
|
|
|
|
|
type OPENPGPKEY struct {
|
|
|
Hdr RR_Header
|
|
|
PublicKey string `dns:"base64"`
|
|
|
}
|
|
|
|
|
|
-func (rr *OPENPGPKEY) Header() *RR_Header { return &rr.Hdr }
|
|
|
-func (rr *OPENPGPKEY) copy() RR { return &OPENPGPKEY{*rr.Hdr.copyHeader(), rr.PublicKey} }
|
|
|
-func (rr *OPENPGPKEY) String() string { return rr.Hdr.String() + rr.PublicKey }
|
|
|
-func (rr *OPENPGPKEY) len() int {
|
|
|
- return rr.Hdr.len() + base64.StdEncoding.DecodedLen(len(rr.PublicKey))
|
|
|
-}
|
|
|
+func (rr *OPENPGPKEY) String() string { return rr.Hdr.String() + rr.PublicKey }
|
|
|
|
|
|
// TimeToString translates the RRSIG's incep. and expir. times to the
|
|
|
// string representation used when printing the record.
|
|
@@ -1669,73 +1326,3 @@ func copyIP(ip net.IP) net.IP {
|
|
|
copy(p, ip)
|
|
|
return p
|
|
|
}
|
|
|
-
|
|
|
-// Map of constructors for each RR type.
|
|
|
-var typeToRR = map[uint16]func() RR{
|
|
|
- TypeA: func() RR { return new(A) },
|
|
|
- TypeAAAA: func() RR { return new(AAAA) },
|
|
|
- TypeAFSDB: func() RR { return new(AFSDB) },
|
|
|
- TypeCAA: func() RR { return new(CAA) },
|
|
|
- TypeCDS: func() RR { return new(CDS) },
|
|
|
- TypeCERT: func() RR { return new(CERT) },
|
|
|
- TypeCNAME: func() RR { return new(CNAME) },
|
|
|
- TypeDHCID: func() RR { return new(DHCID) },
|
|
|
- TypeDLV: func() RR { return new(DLV) },
|
|
|
- TypeDNAME: func() RR { return new(DNAME) },
|
|
|
- TypeKEY: func() RR { return new(KEY) },
|
|
|
- TypeDNSKEY: func() RR { return new(DNSKEY) },
|
|
|
- TypeDS: func() RR { return new(DS) },
|
|
|
- TypeEUI48: func() RR { return new(EUI48) },
|
|
|
- TypeEUI64: func() RR { return new(EUI64) },
|
|
|
- TypeGID: func() RR { return new(GID) },
|
|
|
- TypeGPOS: func() RR { return new(GPOS) },
|
|
|
- TypeEID: func() RR { return new(EID) },
|
|
|
- TypeHINFO: func() RR { return new(HINFO) },
|
|
|
- TypeHIP: func() RR { return new(HIP) },
|
|
|
- TypeIPSECKEY: func() RR { return new(IPSECKEY) },
|
|
|
- TypeKX: func() RR { return new(KX) },
|
|
|
- TypeL32: func() RR { return new(L32) },
|
|
|
- TypeL64: func() RR { return new(L64) },
|
|
|
- TypeLOC: func() RR { return new(LOC) },
|
|
|
- TypeLP: func() RR { return new(LP) },
|
|
|
- TypeMB: func() RR { return new(MB) },
|
|
|
- TypeMD: func() RR { return new(MD) },
|
|
|
- TypeMF: func() RR { return new(MF) },
|
|
|
- TypeMG: func() RR { return new(MG) },
|
|
|
- TypeMINFO: func() RR { return new(MINFO) },
|
|
|
- TypeMR: func() RR { return new(MR) },
|
|
|
- TypeMX: func() RR { return new(MX) },
|
|
|
- TypeNAPTR: func() RR { return new(NAPTR) },
|
|
|
- TypeNID: func() RR { return new(NID) },
|
|
|
- TypeNINFO: func() RR { return new(NINFO) },
|
|
|
- TypeNIMLOC: func() RR { return new(NIMLOC) },
|
|
|
- TypeNS: func() RR { return new(NS) },
|
|
|
- TypeNSAPPTR: func() RR { return new(NSAPPTR) },
|
|
|
- TypeNSEC3: func() RR { return new(NSEC3) },
|
|
|
- TypeNSEC3PARAM: func() RR { return new(NSEC3PARAM) },
|
|
|
- TypeNSEC: func() RR { return new(NSEC) },
|
|
|
- TypeOPENPGPKEY: func() RR { return new(OPENPGPKEY) },
|
|
|
- TypeOPT: func() RR { return new(OPT) },
|
|
|
- TypePTR: func() RR { return new(PTR) },
|
|
|
- TypeRKEY: func() RR { return new(RKEY) },
|
|
|
- TypeRP: func() RR { return new(RP) },
|
|
|
- TypePX: func() RR { return new(PX) },
|
|
|
- TypeSIG: func() RR { return new(SIG) },
|
|
|
- TypeRRSIG: func() RR { return new(RRSIG) },
|
|
|
- TypeRT: func() RR { return new(RT) },
|
|
|
- TypeSOA: func() RR { return new(SOA) },
|
|
|
- TypeSPF: func() RR { return new(SPF) },
|
|
|
- TypeSRV: func() RR { return new(SRV) },
|
|
|
- TypeSSHFP: func() RR { return new(SSHFP) },
|
|
|
- TypeTA: func() RR { return new(TA) },
|
|
|
- TypeTALINK: func() RR { return new(TALINK) },
|
|
|
- TypeTKEY: func() RR { return new(TKEY) },
|
|
|
- TypeTLSA: func() RR { return new(TLSA) },
|
|
|
- TypeTSIG: func() RR { return new(TSIG) },
|
|
|
- TypeTXT: func() RR { return new(TXT) },
|
|
|
- TypeUID: func() RR { return new(UID) },
|
|
|
- TypeUINFO: func() RR { return new(UINFO) },
|
|
|
- TypeURI: func() RR { return new(URI) },
|
|
|
- TypeWKS: func() RR { return new(WKS) },
|
|
|
- TypeX25: func() RR { return new(X25) },
|
|
|
-}
|