OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / github.com / miekg / dns / ztypes.go
1 // Code generated by "go run types_generate.go"; DO NOT EDIT.
2
3 package dns
4
5 import (
6         "encoding/base64"
7         "net"
8 )
9
10 // TypeToRR is a map of constructors for each RR type.
11 var TypeToRR = map[uint16]func() RR{
12         TypeA:          func() RR { return new(A) },
13         TypeAAAA:       func() RR { return new(AAAA) },
14         TypeAFSDB:      func() RR { return new(AFSDB) },
15         TypeANY:        func() RR { return new(ANY) },
16         TypeAVC:        func() RR { return new(AVC) },
17         TypeCAA:        func() RR { return new(CAA) },
18         TypeCDNSKEY:    func() RR { return new(CDNSKEY) },
19         TypeCDS:        func() RR { return new(CDS) },
20         TypeCERT:       func() RR { return new(CERT) },
21         TypeCNAME:      func() RR { return new(CNAME) },
22         TypeCSYNC:      func() RR { return new(CSYNC) },
23         TypeDHCID:      func() RR { return new(DHCID) },
24         TypeDLV:        func() RR { return new(DLV) },
25         TypeDNAME:      func() RR { return new(DNAME) },
26         TypeDNSKEY:     func() RR { return new(DNSKEY) },
27         TypeDS:         func() RR { return new(DS) },
28         TypeEID:        func() RR { return new(EID) },
29         TypeEUI48:      func() RR { return new(EUI48) },
30         TypeEUI64:      func() RR { return new(EUI64) },
31         TypeGID:        func() RR { return new(GID) },
32         TypeGPOS:       func() RR { return new(GPOS) },
33         TypeHINFO:      func() RR { return new(HINFO) },
34         TypeHIP:        func() RR { return new(HIP) },
35         TypeKEY:        func() RR { return new(KEY) },
36         TypeKX:         func() RR { return new(KX) },
37         TypeL32:        func() RR { return new(L32) },
38         TypeL64:        func() RR { return new(L64) },
39         TypeLOC:        func() RR { return new(LOC) },
40         TypeLP:         func() RR { return new(LP) },
41         TypeMB:         func() RR { return new(MB) },
42         TypeMD:         func() RR { return new(MD) },
43         TypeMF:         func() RR { return new(MF) },
44         TypeMG:         func() RR { return new(MG) },
45         TypeMINFO:      func() RR { return new(MINFO) },
46         TypeMR:         func() RR { return new(MR) },
47         TypeMX:         func() RR { return new(MX) },
48         TypeNAPTR:      func() RR { return new(NAPTR) },
49         TypeNID:        func() RR { return new(NID) },
50         TypeNIMLOC:     func() RR { return new(NIMLOC) },
51         TypeNINFO:      func() RR { return new(NINFO) },
52         TypeNS:         func() RR { return new(NS) },
53         TypeNSAPPTR:    func() RR { return new(NSAPPTR) },
54         TypeNSEC:       func() RR { return new(NSEC) },
55         TypeNSEC3:      func() RR { return new(NSEC3) },
56         TypeNSEC3PARAM: func() RR { return new(NSEC3PARAM) },
57         TypeNULL:       func() RR { return new(NULL) },
58         TypeOPENPGPKEY: func() RR { return new(OPENPGPKEY) },
59         TypeOPT:        func() RR { return new(OPT) },
60         TypePTR:        func() RR { return new(PTR) },
61         TypePX:         func() RR { return new(PX) },
62         TypeRKEY:       func() RR { return new(RKEY) },
63         TypeRP:         func() RR { return new(RP) },
64         TypeRRSIG:      func() RR { return new(RRSIG) },
65         TypeRT:         func() RR { return new(RT) },
66         TypeSIG:        func() RR { return new(SIG) },
67         TypeSMIMEA:     func() RR { return new(SMIMEA) },
68         TypeSOA:        func() RR { return new(SOA) },
69         TypeSPF:        func() RR { return new(SPF) },
70         TypeSRV:        func() RR { return new(SRV) },
71         TypeSSHFP:      func() RR { return new(SSHFP) },
72         TypeTA:         func() RR { return new(TA) },
73         TypeTALINK:     func() RR { return new(TALINK) },
74         TypeTKEY:       func() RR { return new(TKEY) },
75         TypeTLSA:       func() RR { return new(TLSA) },
76         TypeTSIG:       func() RR { return new(TSIG) },
77         TypeTXT:        func() RR { return new(TXT) },
78         TypeUID:        func() RR { return new(UID) },
79         TypeUINFO:      func() RR { return new(UINFO) },
80         TypeURI:        func() RR { return new(URI) },
81         TypeX25:        func() RR { return new(X25) },
82 }
83
84 // TypeToString is a map of strings for each RR type.
85 var TypeToString = map[uint16]string{
86         TypeA:          "A",
87         TypeAAAA:       "AAAA",
88         TypeAFSDB:      "AFSDB",
89         TypeANY:        "ANY",
90         TypeATMA:       "ATMA",
91         TypeAVC:        "AVC",
92         TypeAXFR:       "AXFR",
93         TypeCAA:        "CAA",
94         TypeCDNSKEY:    "CDNSKEY",
95         TypeCDS:        "CDS",
96         TypeCERT:       "CERT",
97         TypeCNAME:      "CNAME",
98         TypeCSYNC:      "CSYNC",
99         TypeDHCID:      "DHCID",
100         TypeDLV:        "DLV",
101         TypeDNAME:      "DNAME",
102         TypeDNSKEY:     "DNSKEY",
103         TypeDS:         "DS",
104         TypeEID:        "EID",
105         TypeEUI48:      "EUI48",
106         TypeEUI64:      "EUI64",
107         TypeGID:        "GID",
108         TypeGPOS:       "GPOS",
109         TypeHINFO:      "HINFO",
110         TypeHIP:        "HIP",
111         TypeISDN:       "ISDN",
112         TypeIXFR:       "IXFR",
113         TypeKEY:        "KEY",
114         TypeKX:         "KX",
115         TypeL32:        "L32",
116         TypeL64:        "L64",
117         TypeLOC:        "LOC",
118         TypeLP:         "LP",
119         TypeMAILA:      "MAILA",
120         TypeMAILB:      "MAILB",
121         TypeMB:         "MB",
122         TypeMD:         "MD",
123         TypeMF:         "MF",
124         TypeMG:         "MG",
125         TypeMINFO:      "MINFO",
126         TypeMR:         "MR",
127         TypeMX:         "MX",
128         TypeNAPTR:      "NAPTR",
129         TypeNID:        "NID",
130         TypeNIMLOC:     "NIMLOC",
131         TypeNINFO:      "NINFO",
132         TypeNS:         "NS",
133         TypeNSEC:       "NSEC",
134         TypeNSEC3:      "NSEC3",
135         TypeNSEC3PARAM: "NSEC3PARAM",
136         TypeNULL:       "NULL",
137         TypeNXT:        "NXT",
138         TypeNone:       "None",
139         TypeOPENPGPKEY: "OPENPGPKEY",
140         TypeOPT:        "OPT",
141         TypePTR:        "PTR",
142         TypePX:         "PX",
143         TypeRKEY:       "RKEY",
144         TypeRP:         "RP",
145         TypeRRSIG:      "RRSIG",
146         TypeRT:         "RT",
147         TypeReserved:   "Reserved",
148         TypeSIG:        "SIG",
149         TypeSMIMEA:     "SMIMEA",
150         TypeSOA:        "SOA",
151         TypeSPF:        "SPF",
152         TypeSRV:        "SRV",
153         TypeSSHFP:      "SSHFP",
154         TypeTA:         "TA",
155         TypeTALINK:     "TALINK",
156         TypeTKEY:       "TKEY",
157         TypeTLSA:       "TLSA",
158         TypeTSIG:       "TSIG",
159         TypeTXT:        "TXT",
160         TypeUID:        "UID",
161         TypeUINFO:      "UINFO",
162         TypeUNSPEC:     "UNSPEC",
163         TypeURI:        "URI",
164         TypeX25:        "X25",
165         TypeNSAPPTR:    "NSAP-PTR",
166 }
167
168 func (rr *A) Header() *RR_Header          { return &rr.Hdr }
169 func (rr *AAAA) Header() *RR_Header       { return &rr.Hdr }
170 func (rr *AFSDB) Header() *RR_Header      { return &rr.Hdr }
171 func (rr *ANY) Header() *RR_Header        { return &rr.Hdr }
172 func (rr *AVC) Header() *RR_Header        { return &rr.Hdr }
173 func (rr *CAA) Header() *RR_Header        { return &rr.Hdr }
174 func (rr *CDNSKEY) Header() *RR_Header    { return &rr.Hdr }
175 func (rr *CDS) Header() *RR_Header        { return &rr.Hdr }
176 func (rr *CERT) Header() *RR_Header       { return &rr.Hdr }
177 func (rr *CNAME) Header() *RR_Header      { return &rr.Hdr }
178 func (rr *CSYNC) Header() *RR_Header      { return &rr.Hdr }
179 func (rr *DHCID) Header() *RR_Header      { return &rr.Hdr }
180 func (rr *DLV) Header() *RR_Header        { return &rr.Hdr }
181 func (rr *DNAME) Header() *RR_Header      { return &rr.Hdr }
182 func (rr *DNSKEY) Header() *RR_Header     { return &rr.Hdr }
183 func (rr *DS) Header() *RR_Header         { return &rr.Hdr }
184 func (rr *EID) Header() *RR_Header        { return &rr.Hdr }
185 func (rr *EUI48) Header() *RR_Header      { return &rr.Hdr }
186 func (rr *EUI64) Header() *RR_Header      { return &rr.Hdr }
187 func (rr *GID) Header() *RR_Header        { return &rr.Hdr }
188 func (rr *GPOS) Header() *RR_Header       { return &rr.Hdr }
189 func (rr *HINFO) Header() *RR_Header      { return &rr.Hdr }
190 func (rr *HIP) Header() *RR_Header        { return &rr.Hdr }
191 func (rr *KEY) Header() *RR_Header        { return &rr.Hdr }
192 func (rr *KX) Header() *RR_Header         { return &rr.Hdr }
193 func (rr *L32) Header() *RR_Header        { return &rr.Hdr }
194 func (rr *L64) Header() *RR_Header        { return &rr.Hdr }
195 func (rr *LOC) Header() *RR_Header        { return &rr.Hdr }
196 func (rr *LP) Header() *RR_Header         { return &rr.Hdr }
197 func (rr *MB) Header() *RR_Header         { return &rr.Hdr }
198 func (rr *MD) Header() *RR_Header         { return &rr.Hdr }
199 func (rr *MF) Header() *RR_Header         { return &rr.Hdr }
200 func (rr *MG) Header() *RR_Header         { return &rr.Hdr }
201 func (rr *MINFO) Header() *RR_Header      { return &rr.Hdr }
202 func (rr *MR) Header() *RR_Header         { return &rr.Hdr }
203 func (rr *MX) Header() *RR_Header         { return &rr.Hdr }
204 func (rr *NAPTR) Header() *RR_Header      { return &rr.Hdr }
205 func (rr *NID) Header() *RR_Header        { return &rr.Hdr }
206 func (rr *NIMLOC) Header() *RR_Header     { return &rr.Hdr }
207 func (rr *NINFO) Header() *RR_Header      { return &rr.Hdr }
208 func (rr *NS) Header() *RR_Header         { return &rr.Hdr }
209 func (rr *NSAPPTR) Header() *RR_Header    { return &rr.Hdr }
210 func (rr *NSEC) Header() *RR_Header       { return &rr.Hdr }
211 func (rr *NSEC3) Header() *RR_Header      { return &rr.Hdr }
212 func (rr *NSEC3PARAM) Header() *RR_Header { return &rr.Hdr }
213 func (rr *NULL) Header() *RR_Header       { return &rr.Hdr }
214 func (rr *OPENPGPKEY) Header() *RR_Header { return &rr.Hdr }
215 func (rr *OPT) Header() *RR_Header        { return &rr.Hdr }
216 func (rr *PTR) Header() *RR_Header        { return &rr.Hdr }
217 func (rr *PX) Header() *RR_Header         { return &rr.Hdr }
218 func (rr *RFC3597) Header() *RR_Header    { return &rr.Hdr }
219 func (rr *RKEY) Header() *RR_Header       { return &rr.Hdr }
220 func (rr *RP) Header() *RR_Header         { return &rr.Hdr }
221 func (rr *RRSIG) Header() *RR_Header      { return &rr.Hdr }
222 func (rr *RT) Header() *RR_Header         { return &rr.Hdr }
223 func (rr *SIG) Header() *RR_Header        { return &rr.Hdr }
224 func (rr *SMIMEA) Header() *RR_Header     { return &rr.Hdr }
225 func (rr *SOA) Header() *RR_Header        { return &rr.Hdr }
226 func (rr *SPF) Header() *RR_Header        { return &rr.Hdr }
227 func (rr *SRV) Header() *RR_Header        { return &rr.Hdr }
228 func (rr *SSHFP) Header() *RR_Header      { return &rr.Hdr }
229 func (rr *TA) Header() *RR_Header         { return &rr.Hdr }
230 func (rr *TALINK) Header() *RR_Header     { return &rr.Hdr }
231 func (rr *TKEY) Header() *RR_Header       { return &rr.Hdr }
232 func (rr *TLSA) Header() *RR_Header       { return &rr.Hdr }
233 func (rr *TSIG) Header() *RR_Header       { return &rr.Hdr }
234 func (rr *TXT) Header() *RR_Header        { return &rr.Hdr }
235 func (rr *UID) Header() *RR_Header        { return &rr.Hdr }
236 func (rr *UINFO) Header() *RR_Header      { return &rr.Hdr }
237 func (rr *URI) Header() *RR_Header        { return &rr.Hdr }
238 func (rr *X25) Header() *RR_Header        { return &rr.Hdr }
239
240 // len() functions
241 func (rr *A) len(off int, compression map[string]struct{}) int {
242         l := rr.Hdr.len(off, compression)
243         l += net.IPv4len // A
244         return l
245 }
246 func (rr *AAAA) len(off int, compression map[string]struct{}) int {
247         l := rr.Hdr.len(off, compression)
248         l += net.IPv6len // AAAA
249         return l
250 }
251 func (rr *AFSDB) len(off int, compression map[string]struct{}) int {
252         l := rr.Hdr.len(off, compression)
253         l += 2 // Subtype
254         l += domainNameLen(rr.Hostname, off+l, compression, false)
255         return l
256 }
257 func (rr *ANY) len(off int, compression map[string]struct{}) int {
258         l := rr.Hdr.len(off, compression)
259         return l
260 }
261 func (rr *AVC) len(off int, compression map[string]struct{}) int {
262         l := rr.Hdr.len(off, compression)
263         for _, x := range rr.Txt {
264                 l += len(x) + 1
265         }
266         return l
267 }
268 func (rr *CAA) len(off int, compression map[string]struct{}) int {
269         l := rr.Hdr.len(off, compression)
270         l++ // Flag
271         l += len(rr.Tag) + 1
272         l += len(rr.Value)
273         return l
274 }
275 func (rr *CERT) len(off int, compression map[string]struct{}) int {
276         l := rr.Hdr.len(off, compression)
277         l += 2 // Type
278         l += 2 // KeyTag
279         l++    // Algorithm
280         l += base64.StdEncoding.DecodedLen(len(rr.Certificate))
281         return l
282 }
283 func (rr *CNAME) len(off int, compression map[string]struct{}) int {
284         l := rr.Hdr.len(off, compression)
285         l += domainNameLen(rr.Target, off+l, compression, true)
286         return l
287 }
288 func (rr *DHCID) len(off int, compression map[string]struct{}) int {
289         l := rr.Hdr.len(off, compression)
290         l += base64.StdEncoding.DecodedLen(len(rr.Digest))
291         return l
292 }
293 func (rr *DNAME) len(off int, compression map[string]struct{}) int {
294         l := rr.Hdr.len(off, compression)
295         l += domainNameLen(rr.Target, off+l, compression, false)
296         return l
297 }
298 func (rr *DNSKEY) len(off int, compression map[string]struct{}) int {
299         l := rr.Hdr.len(off, compression)
300         l += 2 // Flags
301         l++    // Protocol
302         l++    // Algorithm
303         l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
304         return l
305 }
306 func (rr *DS) len(off int, compression map[string]struct{}) int {
307         l := rr.Hdr.len(off, compression)
308         l += 2 // KeyTag
309         l++    // Algorithm
310         l++    // DigestType
311         l += len(rr.Digest)/2 + 1
312         return l
313 }
314 func (rr *EID) len(off int, compression map[string]struct{}) int {
315         l := rr.Hdr.len(off, compression)
316         l += len(rr.Endpoint)/2 + 1
317         return l
318 }
319 func (rr *EUI48) len(off int, compression map[string]struct{}) int {
320         l := rr.Hdr.len(off, compression)
321         l += 6 // Address
322         return l
323 }
324 func (rr *EUI64) len(off int, compression map[string]struct{}) int {
325         l := rr.Hdr.len(off, compression)
326         l += 8 // Address
327         return l
328 }
329 func (rr *GID) len(off int, compression map[string]struct{}) int {
330         l := rr.Hdr.len(off, compression)
331         l += 4 // Gid
332         return l
333 }
334 func (rr *GPOS) len(off int, compression map[string]struct{}) int {
335         l := rr.Hdr.len(off, compression)
336         l += len(rr.Longitude) + 1
337         l += len(rr.Latitude) + 1
338         l += len(rr.Altitude) + 1
339         return l
340 }
341 func (rr *HINFO) len(off int, compression map[string]struct{}) int {
342         l := rr.Hdr.len(off, compression)
343         l += len(rr.Cpu) + 1
344         l += len(rr.Os) + 1
345         return l
346 }
347 func (rr *HIP) len(off int, compression map[string]struct{}) int {
348         l := rr.Hdr.len(off, compression)
349         l++    // HitLength
350         l++    // PublicKeyAlgorithm
351         l += 2 // PublicKeyLength
352         l += len(rr.Hit) / 2
353         l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
354         for _, x := range rr.RendezvousServers {
355                 l += domainNameLen(x, off+l, compression, false)
356         }
357         return l
358 }
359 func (rr *KX) len(off int, compression map[string]struct{}) int {
360         l := rr.Hdr.len(off, compression)
361         l += 2 // Preference
362         l += domainNameLen(rr.Exchanger, off+l, compression, false)
363         return l
364 }
365 func (rr *L32) len(off int, compression map[string]struct{}) int {
366         l := rr.Hdr.len(off, compression)
367         l += 2           // Preference
368         l += net.IPv4len // Locator32
369         return l
370 }
371 func (rr *L64) len(off int, compression map[string]struct{}) int {
372         l := rr.Hdr.len(off, compression)
373         l += 2 // Preference
374         l += 8 // Locator64
375         return l
376 }
377 func (rr *LOC) len(off int, compression map[string]struct{}) int {
378         l := rr.Hdr.len(off, compression)
379         l++    // Version
380         l++    // Size
381         l++    // HorizPre
382         l++    // VertPre
383         l += 4 // Latitude
384         l += 4 // Longitude
385         l += 4 // Altitude
386         return l
387 }
388 func (rr *LP) len(off int, compression map[string]struct{}) int {
389         l := rr.Hdr.len(off, compression)
390         l += 2 // Preference
391         l += domainNameLen(rr.Fqdn, off+l, compression, false)
392         return l
393 }
394 func (rr *MB) len(off int, compression map[string]struct{}) int {
395         l := rr.Hdr.len(off, compression)
396         l += domainNameLen(rr.Mb, off+l, compression, true)
397         return l
398 }
399 func (rr *MD) len(off int, compression map[string]struct{}) int {
400         l := rr.Hdr.len(off, compression)
401         l += domainNameLen(rr.Md, off+l, compression, true)
402         return l
403 }
404 func (rr *MF) len(off int, compression map[string]struct{}) int {
405         l := rr.Hdr.len(off, compression)
406         l += domainNameLen(rr.Mf, off+l, compression, true)
407         return l
408 }
409 func (rr *MG) len(off int, compression map[string]struct{}) int {
410         l := rr.Hdr.len(off, compression)
411         l += domainNameLen(rr.Mg, off+l, compression, true)
412         return l
413 }
414 func (rr *MINFO) len(off int, compression map[string]struct{}) int {
415         l := rr.Hdr.len(off, compression)
416         l += domainNameLen(rr.Rmail, off+l, compression, true)
417         l += domainNameLen(rr.Email, off+l, compression, true)
418         return l
419 }
420 func (rr *MR) len(off int, compression map[string]struct{}) int {
421         l := rr.Hdr.len(off, compression)
422         l += domainNameLen(rr.Mr, off+l, compression, true)
423         return l
424 }
425 func (rr *MX) len(off int, compression map[string]struct{}) int {
426         l := rr.Hdr.len(off, compression)
427         l += 2 // Preference
428         l += domainNameLen(rr.Mx, off+l, compression, true)
429         return l
430 }
431 func (rr *NAPTR) len(off int, compression map[string]struct{}) int {
432         l := rr.Hdr.len(off, compression)
433         l += 2 // Order
434         l += 2 // Preference
435         l += len(rr.Flags) + 1
436         l += len(rr.Service) + 1
437         l += len(rr.Regexp) + 1
438         l += domainNameLen(rr.Replacement, off+l, compression, false)
439         return l
440 }
441 func (rr *NID) len(off int, compression map[string]struct{}) int {
442         l := rr.Hdr.len(off, compression)
443         l += 2 // Preference
444         l += 8 // NodeID
445         return l
446 }
447 func (rr *NIMLOC) len(off int, compression map[string]struct{}) int {
448         l := rr.Hdr.len(off, compression)
449         l += len(rr.Locator)/2 + 1
450         return l
451 }
452 func (rr *NINFO) len(off int, compression map[string]struct{}) int {
453         l := rr.Hdr.len(off, compression)
454         for _, x := range rr.ZSData {
455                 l += len(x) + 1
456         }
457         return l
458 }
459 func (rr *NS) len(off int, compression map[string]struct{}) int {
460         l := rr.Hdr.len(off, compression)
461         l += domainNameLen(rr.Ns, off+l, compression, true)
462         return l
463 }
464 func (rr *NSAPPTR) len(off int, compression map[string]struct{}) int {
465         l := rr.Hdr.len(off, compression)
466         l += domainNameLen(rr.Ptr, off+l, compression, false)
467         return l
468 }
469 func (rr *NSEC3PARAM) len(off int, compression map[string]struct{}) int {
470         l := rr.Hdr.len(off, compression)
471         l++    // Hash
472         l++    // Flags
473         l += 2 // Iterations
474         l++    // SaltLength
475         l += len(rr.Salt) / 2
476         return l
477 }
478 func (rr *NULL) len(off int, compression map[string]struct{}) int {
479         l := rr.Hdr.len(off, compression)
480         l += len(rr.Data)
481         return l
482 }
483 func (rr *OPENPGPKEY) len(off int, compression map[string]struct{}) int {
484         l := rr.Hdr.len(off, compression)
485         l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
486         return l
487 }
488 func (rr *PTR) len(off int, compression map[string]struct{}) int {
489         l := rr.Hdr.len(off, compression)
490         l += domainNameLen(rr.Ptr, off+l, compression, true)
491         return l
492 }
493 func (rr *PX) len(off int, compression map[string]struct{}) int {
494         l := rr.Hdr.len(off, compression)
495         l += 2 // Preference
496         l += domainNameLen(rr.Map822, off+l, compression, false)
497         l += domainNameLen(rr.Mapx400, off+l, compression, false)
498         return l
499 }
500 func (rr *RFC3597) len(off int, compression map[string]struct{}) int {
501         l := rr.Hdr.len(off, compression)
502         l += len(rr.Rdata)/2 + 1
503         return l
504 }
505 func (rr *RKEY) len(off int, compression map[string]struct{}) int {
506         l := rr.Hdr.len(off, compression)
507         l += 2 // Flags
508         l++    // Protocol
509         l++    // Algorithm
510         l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
511         return l
512 }
513 func (rr *RP) len(off int, compression map[string]struct{}) int {
514         l := rr.Hdr.len(off, compression)
515         l += domainNameLen(rr.Mbox, off+l, compression, false)
516         l += domainNameLen(rr.Txt, off+l, compression, false)
517         return l
518 }
519 func (rr *RRSIG) len(off int, compression map[string]struct{}) int {
520         l := rr.Hdr.len(off, compression)
521         l += 2 // TypeCovered
522         l++    // Algorithm
523         l++    // Labels
524         l += 4 // OrigTtl
525         l += 4 // Expiration
526         l += 4 // Inception
527         l += 2 // KeyTag
528         l += domainNameLen(rr.SignerName, off+l, compression, false)
529         l += base64.StdEncoding.DecodedLen(len(rr.Signature))
530         return l
531 }
532 func (rr *RT) len(off int, compression map[string]struct{}) int {
533         l := rr.Hdr.len(off, compression)
534         l += 2 // Preference
535         l += domainNameLen(rr.Host, off+l, compression, false)
536         return l
537 }
538 func (rr *SMIMEA) len(off int, compression map[string]struct{}) int {
539         l := rr.Hdr.len(off, compression)
540         l++ // Usage
541         l++ // Selector
542         l++ // MatchingType
543         l += len(rr.Certificate)/2 + 1
544         return l
545 }
546 func (rr *SOA) len(off int, compression map[string]struct{}) int {
547         l := rr.Hdr.len(off, compression)
548         l += domainNameLen(rr.Ns, off+l, compression, true)
549         l += domainNameLen(rr.Mbox, off+l, compression, true)
550         l += 4 // Serial
551         l += 4 // Refresh
552         l += 4 // Retry
553         l += 4 // Expire
554         l += 4 // Minttl
555         return l
556 }
557 func (rr *SPF) len(off int, compression map[string]struct{}) int {
558         l := rr.Hdr.len(off, compression)
559         for _, x := range rr.Txt {
560                 l += len(x) + 1
561         }
562         return l
563 }
564 func (rr *SRV) len(off int, compression map[string]struct{}) int {
565         l := rr.Hdr.len(off, compression)
566         l += 2 // Priority
567         l += 2 // Weight
568         l += 2 // Port
569         l += domainNameLen(rr.Target, off+l, compression, false)
570         return l
571 }
572 func (rr *SSHFP) len(off int, compression map[string]struct{}) int {
573         l := rr.Hdr.len(off, compression)
574         l++ // Algorithm
575         l++ // Type
576         l += len(rr.FingerPrint)/2 + 1
577         return l
578 }
579 func (rr *TA) len(off int, compression map[string]struct{}) int {
580         l := rr.Hdr.len(off, compression)
581         l += 2 // KeyTag
582         l++    // Algorithm
583         l++    // DigestType
584         l += len(rr.Digest)/2 + 1
585         return l
586 }
587 func (rr *TALINK) len(off int, compression map[string]struct{}) int {
588         l := rr.Hdr.len(off, compression)
589         l += domainNameLen(rr.PreviousName, off+l, compression, false)
590         l += domainNameLen(rr.NextName, off+l, compression, false)
591         return l
592 }
593 func (rr *TKEY) len(off int, compression map[string]struct{}) int {
594         l := rr.Hdr.len(off, compression)
595         l += domainNameLen(rr.Algorithm, off+l, compression, false)
596         l += 4 // Inception
597         l += 4 // Expiration
598         l += 2 // Mode
599         l += 2 // Error
600         l += 2 // KeySize
601         l += len(rr.Key) / 2
602         l += 2 // OtherLen
603         l += len(rr.OtherData) / 2
604         return l
605 }
606 func (rr *TLSA) len(off int, compression map[string]struct{}) int {
607         l := rr.Hdr.len(off, compression)
608         l++ // Usage
609         l++ // Selector
610         l++ // MatchingType
611         l += len(rr.Certificate)/2 + 1
612         return l
613 }
614 func (rr *TSIG) len(off int, compression map[string]struct{}) int {
615         l := rr.Hdr.len(off, compression)
616         l += domainNameLen(rr.Algorithm, off+l, compression, false)
617         l += 6 // TimeSigned
618         l += 2 // Fudge
619         l += 2 // MACSize
620         l += len(rr.MAC) / 2
621         l += 2 // OrigId
622         l += 2 // Error
623         l += 2 // OtherLen
624         l += len(rr.OtherData) / 2
625         return l
626 }
627 func (rr *TXT) len(off int, compression map[string]struct{}) int {
628         l := rr.Hdr.len(off, compression)
629         for _, x := range rr.Txt {
630                 l += len(x) + 1
631         }
632         return l
633 }
634 func (rr *UID) len(off int, compression map[string]struct{}) int {
635         l := rr.Hdr.len(off, compression)
636         l += 4 // Uid
637         return l
638 }
639 func (rr *UINFO) len(off int, compression map[string]struct{}) int {
640         l := rr.Hdr.len(off, compression)
641         l += len(rr.Uinfo) + 1
642         return l
643 }
644 func (rr *URI) len(off int, compression map[string]struct{}) int {
645         l := rr.Hdr.len(off, compression)
646         l += 2 // Priority
647         l += 2 // Weight
648         l += len(rr.Target)
649         return l
650 }
651 func (rr *X25) len(off int, compression map[string]struct{}) int {
652         l := rr.Hdr.len(off, compression)
653         l += len(rr.PSDNAddress) + 1
654         return l
655 }
656
657 // copy() functions
658 func (rr *A) copy() RR {
659         return &A{rr.Hdr, copyIP(rr.A)}
660 }
661 func (rr *AAAA) copy() RR {
662         return &AAAA{rr.Hdr, copyIP(rr.AAAA)}
663 }
664 func (rr *AFSDB) copy() RR {
665         return &AFSDB{rr.Hdr, rr.Subtype, rr.Hostname}
666 }
667 func (rr *ANY) copy() RR {
668         return &ANY{rr.Hdr}
669 }
670 func (rr *AVC) copy() RR {
671         Txt := make([]string, len(rr.Txt))
672         copy(Txt, rr.Txt)
673         return &AVC{rr.Hdr, Txt}
674 }
675 func (rr *CAA) copy() RR {
676         return &CAA{rr.Hdr, rr.Flag, rr.Tag, rr.Value}
677 }
678 func (rr *CERT) copy() RR {
679         return &CERT{rr.Hdr, rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate}
680 }
681 func (rr *CNAME) copy() RR {
682         return &CNAME{rr.Hdr, rr.Target}
683 }
684 func (rr *CSYNC) copy() RR {
685         TypeBitMap := make([]uint16, len(rr.TypeBitMap))
686         copy(TypeBitMap, rr.TypeBitMap)
687         return &CSYNC{rr.Hdr, rr.Serial, rr.Flags, TypeBitMap}
688 }
689 func (rr *DHCID) copy() RR {
690         return &DHCID{rr.Hdr, rr.Digest}
691 }
692 func (rr *DNAME) copy() RR {
693         return &DNAME{rr.Hdr, rr.Target}
694 }
695 func (rr *DNSKEY) copy() RR {
696         return &DNSKEY{rr.Hdr, rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey}
697 }
698 func (rr *DS) copy() RR {
699         return &DS{rr.Hdr, rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
700 }
701 func (rr *EID) copy() RR {
702         return &EID{rr.Hdr, rr.Endpoint}
703 }
704 func (rr *EUI48) copy() RR {
705         return &EUI48{rr.Hdr, rr.Address}
706 }
707 func (rr *EUI64) copy() RR {
708         return &EUI64{rr.Hdr, rr.Address}
709 }
710 func (rr *GID) copy() RR {
711         return &GID{rr.Hdr, rr.Gid}
712 }
713 func (rr *GPOS) copy() RR {
714         return &GPOS{rr.Hdr, rr.Longitude, rr.Latitude, rr.Altitude}
715 }
716 func (rr *HINFO) copy() RR {
717         return &HINFO{rr.Hdr, rr.Cpu, rr.Os}
718 }
719 func (rr *HIP) copy() RR {
720         RendezvousServers := make([]string, len(rr.RendezvousServers))
721         copy(RendezvousServers, rr.RendezvousServers)
722         return &HIP{rr.Hdr, rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, RendezvousServers}
723 }
724 func (rr *KX) copy() RR {
725         return &KX{rr.Hdr, rr.Preference, rr.Exchanger}
726 }
727 func (rr *L32) copy() RR {
728         return &L32{rr.Hdr, rr.Preference, copyIP(rr.Locator32)}
729 }
730 func (rr *L64) copy() RR {
731         return &L64{rr.Hdr, rr.Preference, rr.Locator64}
732 }
733 func (rr *LOC) copy() RR {
734         return &LOC{rr.Hdr, rr.Version, rr.Size, rr.HorizPre, rr.VertPre, rr.Latitude, rr.Longitude, rr.Altitude}
735 }
736 func (rr *LP) copy() RR {
737         return &LP{rr.Hdr, rr.Preference, rr.Fqdn}
738 }
739 func (rr *MB) copy() RR {
740         return &MB{rr.Hdr, rr.Mb}
741 }
742 func (rr *MD) copy() RR {
743         return &MD{rr.Hdr, rr.Md}
744 }
745 func (rr *MF) copy() RR {
746         return &MF{rr.Hdr, rr.Mf}
747 }
748 func (rr *MG) copy() RR {
749         return &MG{rr.Hdr, rr.Mg}
750 }
751 func (rr *MINFO) copy() RR {
752         return &MINFO{rr.Hdr, rr.Rmail, rr.Email}
753 }
754 func (rr *MR) copy() RR {
755         return &MR{rr.Hdr, rr.Mr}
756 }
757 func (rr *MX) copy() RR {
758         return &MX{rr.Hdr, rr.Preference, rr.Mx}
759 }
760 func (rr *NAPTR) copy() RR {
761         return &NAPTR{rr.Hdr, rr.Order, rr.Preference, rr.Flags, rr.Service, rr.Regexp, rr.Replacement}
762 }
763 func (rr *NID) copy() RR {
764         return &NID{rr.Hdr, rr.Preference, rr.NodeID}
765 }
766 func (rr *NIMLOC) copy() RR {
767         return &NIMLOC{rr.Hdr, rr.Locator}
768 }
769 func (rr *NINFO) copy() RR {
770         ZSData := make([]string, len(rr.ZSData))
771         copy(ZSData, rr.ZSData)
772         return &NINFO{rr.Hdr, ZSData}
773 }
774 func (rr *NS) copy() RR {
775         return &NS{rr.Hdr, rr.Ns}
776 }
777 func (rr *NSAPPTR) copy() RR {
778         return &NSAPPTR{rr.Hdr, rr.Ptr}
779 }
780 func (rr *NSEC) copy() RR {
781         TypeBitMap := make([]uint16, len(rr.TypeBitMap))
782         copy(TypeBitMap, rr.TypeBitMap)
783         return &NSEC{rr.Hdr, rr.NextDomain, TypeBitMap}
784 }
785 func (rr *NSEC3) copy() RR {
786         TypeBitMap := make([]uint16, len(rr.TypeBitMap))
787         copy(TypeBitMap, rr.TypeBitMap)
788         return &NSEC3{rr.Hdr, rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt, rr.HashLength, rr.NextDomain, TypeBitMap}
789 }
790 func (rr *NSEC3PARAM) copy() RR {
791         return &NSEC3PARAM{rr.Hdr, rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt}
792 }
793 func (rr *NULL) copy() RR {
794         return &NULL{rr.Hdr, rr.Data}
795 }
796 func (rr *OPENPGPKEY) copy() RR {
797         return &OPENPGPKEY{rr.Hdr, rr.PublicKey}
798 }
799 func (rr *OPT) copy() RR {
800         Option := make([]EDNS0, len(rr.Option))
801         for i, e := range rr.Option {
802                 Option[i] = e.copy()
803         }
804         return &OPT{rr.Hdr, Option}
805 }
806 func (rr *PTR) copy() RR {
807         return &PTR{rr.Hdr, rr.Ptr}
808 }
809 func (rr *PX) copy() RR {
810         return &PX{rr.Hdr, rr.Preference, rr.Map822, rr.Mapx400}
811 }
812 func (rr *RFC3597) copy() RR {
813         return &RFC3597{rr.Hdr, rr.Rdata}
814 }
815 func (rr *RKEY) copy() RR {
816         return &RKEY{rr.Hdr, rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey}
817 }
818 func (rr *RP) copy() RR {
819         return &RP{rr.Hdr, rr.Mbox, rr.Txt}
820 }
821 func (rr *RRSIG) copy() RR {
822         return &RRSIG{rr.Hdr, rr.TypeCovered, rr.Algorithm, rr.Labels, rr.OrigTtl, rr.Expiration, rr.Inception, rr.KeyTag, rr.SignerName, rr.Signature}
823 }
824 func (rr *RT) copy() RR {
825         return &RT{rr.Hdr, rr.Preference, rr.Host}
826 }
827 func (rr *SMIMEA) copy() RR {
828         return &SMIMEA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate}
829 }
830 func (rr *SOA) copy() RR {
831         return &SOA{rr.Hdr, rr.Ns, rr.Mbox, rr.Serial, rr.Refresh, rr.Retry, rr.Expire, rr.Minttl}
832 }
833 func (rr *SPF) copy() RR {
834         Txt := make([]string, len(rr.Txt))
835         copy(Txt, rr.Txt)
836         return &SPF{rr.Hdr, Txt}
837 }
838 func (rr *SRV) copy() RR {
839         return &SRV{rr.Hdr, rr.Priority, rr.Weight, rr.Port, rr.Target}
840 }
841 func (rr *SSHFP) copy() RR {
842         return &SSHFP{rr.Hdr, rr.Algorithm, rr.Type, rr.FingerPrint}
843 }
844 func (rr *TA) copy() RR {
845         return &TA{rr.Hdr, rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
846 }
847 func (rr *TALINK) copy() RR {
848         return &TALINK{rr.Hdr, rr.PreviousName, rr.NextName}
849 }
850 func (rr *TKEY) copy() RR {
851         return &TKEY{rr.Hdr, rr.Algorithm, rr.Inception, rr.Expiration, rr.Mode, rr.Error, rr.KeySize, rr.Key, rr.OtherLen, rr.OtherData}
852 }
853 func (rr *TLSA) copy() RR {
854         return &TLSA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate}
855 }
856 func (rr *TSIG) copy() RR {
857         return &TSIG{rr.Hdr, rr.Algorithm, rr.TimeSigned, rr.Fudge, rr.MACSize, rr.MAC, rr.OrigId, rr.Error, rr.OtherLen, rr.OtherData}
858 }
859 func (rr *TXT) copy() RR {
860         Txt := make([]string, len(rr.Txt))
861         copy(Txt, rr.Txt)
862         return &TXT{rr.Hdr, Txt}
863 }
864 func (rr *UID) copy() RR {
865         return &UID{rr.Hdr, rr.Uid}
866 }
867 func (rr *UINFO) copy() RR {
868         return &UINFO{rr.Hdr, rr.Uinfo}
869 }
870 func (rr *URI) copy() RR {
871         return &URI{rr.Hdr, rr.Priority, rr.Weight, rr.Target}
872 }
873 func (rr *X25) copy() RR {
874         return &X25{rr.Hdr, rr.PSDNAddress}
875 }