1// Code generated by "go run types_generate.go"; DO NOT EDIT. 2 3package dns 4 5import ( 6 "encoding/base64" 7 "net" 8) 9 10// TypeToRR is a map of constructors for each RR type. 11var 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. 85var 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 168func (rr *A) Header() *RR_Header { return &rr.Hdr } 169func (rr *AAAA) Header() *RR_Header { return &rr.Hdr } 170func (rr *AFSDB) Header() *RR_Header { return &rr.Hdr } 171func (rr *ANY) Header() *RR_Header { return &rr.Hdr } 172func (rr *AVC) Header() *RR_Header { return &rr.Hdr } 173func (rr *CAA) Header() *RR_Header { return &rr.Hdr } 174func (rr *CDNSKEY) Header() *RR_Header { return &rr.Hdr } 175func (rr *CDS) Header() *RR_Header { return &rr.Hdr } 176func (rr *CERT) Header() *RR_Header { return &rr.Hdr } 177func (rr *CNAME) Header() *RR_Header { return &rr.Hdr } 178func (rr *CSYNC) Header() *RR_Header { return &rr.Hdr } 179func (rr *DHCID) Header() *RR_Header { return &rr.Hdr } 180func (rr *DLV) Header() *RR_Header { return &rr.Hdr } 181func (rr *DNAME) Header() *RR_Header { return &rr.Hdr } 182func (rr *DNSKEY) Header() *RR_Header { return &rr.Hdr } 183func (rr *DS) Header() *RR_Header { return &rr.Hdr } 184func (rr *EID) Header() *RR_Header { return &rr.Hdr } 185func (rr *EUI48) Header() *RR_Header { return &rr.Hdr } 186func (rr *EUI64) Header() *RR_Header { return &rr.Hdr } 187func (rr *GID) Header() *RR_Header { return &rr.Hdr } 188func (rr *GPOS) Header() *RR_Header { return &rr.Hdr } 189func (rr *HINFO) Header() *RR_Header { return &rr.Hdr } 190func (rr *HIP) Header() *RR_Header { return &rr.Hdr } 191func (rr *KEY) Header() *RR_Header { return &rr.Hdr } 192func (rr *KX) Header() *RR_Header { return &rr.Hdr } 193func (rr *L32) Header() *RR_Header { return &rr.Hdr } 194func (rr *L64) Header() *RR_Header { return &rr.Hdr } 195func (rr *LOC) Header() *RR_Header { return &rr.Hdr } 196func (rr *LP) Header() *RR_Header { return &rr.Hdr } 197func (rr *MB) Header() *RR_Header { return &rr.Hdr } 198func (rr *MD) Header() *RR_Header { return &rr.Hdr } 199func (rr *MF) Header() *RR_Header { return &rr.Hdr } 200func (rr *MG) Header() *RR_Header { return &rr.Hdr } 201func (rr *MINFO) Header() *RR_Header { return &rr.Hdr } 202func (rr *MR) Header() *RR_Header { return &rr.Hdr } 203func (rr *MX) Header() *RR_Header { return &rr.Hdr } 204func (rr *NAPTR) Header() *RR_Header { return &rr.Hdr } 205func (rr *NID) Header() *RR_Header { return &rr.Hdr } 206func (rr *NIMLOC) Header() *RR_Header { return &rr.Hdr } 207func (rr *NINFO) Header() *RR_Header { return &rr.Hdr } 208func (rr *NS) Header() *RR_Header { return &rr.Hdr } 209func (rr *NSAPPTR) Header() *RR_Header { return &rr.Hdr } 210func (rr *NSEC) Header() *RR_Header { return &rr.Hdr } 211func (rr *NSEC3) Header() *RR_Header { return &rr.Hdr } 212func (rr *NSEC3PARAM) Header() *RR_Header { return &rr.Hdr } 213func (rr *NULL) Header() *RR_Header { return &rr.Hdr } 214func (rr *OPENPGPKEY) Header() *RR_Header { return &rr.Hdr } 215func (rr *OPT) Header() *RR_Header { return &rr.Hdr } 216func (rr *PTR) Header() *RR_Header { return &rr.Hdr } 217func (rr *PX) Header() *RR_Header { return &rr.Hdr } 218func (rr *RFC3597) Header() *RR_Header { return &rr.Hdr } 219func (rr *RKEY) Header() *RR_Header { return &rr.Hdr } 220func (rr *RP) Header() *RR_Header { return &rr.Hdr } 221func (rr *RRSIG) Header() *RR_Header { return &rr.Hdr } 222func (rr *RT) Header() *RR_Header { return &rr.Hdr } 223func (rr *SIG) Header() *RR_Header { return &rr.Hdr } 224func (rr *SMIMEA) Header() *RR_Header { return &rr.Hdr } 225func (rr *SOA) Header() *RR_Header { return &rr.Hdr } 226func (rr *SPF) Header() *RR_Header { return &rr.Hdr } 227func (rr *SRV) Header() *RR_Header { return &rr.Hdr } 228func (rr *SSHFP) Header() *RR_Header { return &rr.Hdr } 229func (rr *TA) Header() *RR_Header { return &rr.Hdr } 230func (rr *TALINK) Header() *RR_Header { return &rr.Hdr } 231func (rr *TKEY) Header() *RR_Header { return &rr.Hdr } 232func (rr *TLSA) Header() *RR_Header { return &rr.Hdr } 233func (rr *TSIG) Header() *RR_Header { return &rr.Hdr } 234func (rr *TXT) Header() *RR_Header { return &rr.Hdr } 235func (rr *UID) Header() *RR_Header { return &rr.Hdr } 236func (rr *UINFO) Header() *RR_Header { return &rr.Hdr } 237func (rr *URI) Header() *RR_Header { return &rr.Hdr } 238func (rr *X25) Header() *RR_Header { return &rr.Hdr } 239 240// len() functions 241func (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} 246func (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} 251func (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} 257func (rr *ANY) len(off int, compression map[string]struct{}) int { 258 l := rr.Hdr.len(off, compression) 259 return l 260} 261func (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} 268func (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} 275func (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} 283func (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} 288func (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} 293func (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} 298func (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} 306func (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} 314func (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} 319func (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} 324func (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} 329func (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} 334func (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} 341func (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} 347func (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} 359func (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} 365func (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} 371func (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} 377func (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} 388func (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} 394func (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} 399func (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} 404func (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} 409func (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} 414func (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} 420func (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} 425func (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} 431func (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} 441func (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} 447func (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} 452func (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} 459func (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} 464func (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} 469func (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} 478func (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} 483func (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} 488func (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} 493func (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} 500func (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} 505func (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} 513func (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} 519func (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} 532func (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} 538func (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} 546func (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} 557func (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} 564func (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} 572func (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} 579func (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} 587func (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} 593func (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} 606func (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} 614func (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} 627func (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} 634func (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} 639func (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} 644func (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} 651func (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 658func (rr *A) copy() RR { 659 return &A{rr.Hdr, copyIP(rr.A)} 660} 661func (rr *AAAA) copy() RR { 662 return &AAAA{rr.Hdr, copyIP(rr.AAAA)} 663} 664func (rr *AFSDB) copy() RR { 665 return &AFSDB{rr.Hdr, rr.Subtype, rr.Hostname} 666} 667func (rr *ANY) copy() RR { 668 return &ANY{rr.Hdr} 669} 670func (rr *AVC) copy() RR { 671 Txt := make([]string, len(rr.Txt)) 672 copy(Txt, rr.Txt) 673 return &AVC{rr.Hdr, Txt} 674} 675func (rr *CAA) copy() RR { 676 return &CAA{rr.Hdr, rr.Flag, rr.Tag, rr.Value} 677} 678func (rr *CERT) copy() RR { 679 return &CERT{rr.Hdr, rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate} 680} 681func (rr *CNAME) copy() RR { 682 return &CNAME{rr.Hdr, rr.Target} 683} 684func (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} 689func (rr *DHCID) copy() RR { 690 return &DHCID{rr.Hdr, rr.Digest} 691} 692func (rr *DNAME) copy() RR { 693 return &DNAME{rr.Hdr, rr.Target} 694} 695func (rr *DNSKEY) copy() RR { 696 return &DNSKEY{rr.Hdr, rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey} 697} 698func (rr *DS) copy() RR { 699 return &DS{rr.Hdr, rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} 700} 701func (rr *EID) copy() RR { 702 return &EID{rr.Hdr, rr.Endpoint} 703} 704func (rr *EUI48) copy() RR { 705 return &EUI48{rr.Hdr, rr.Address} 706} 707func (rr *EUI64) copy() RR { 708 return &EUI64{rr.Hdr, rr.Address} 709} 710func (rr *GID) copy() RR { 711 return &GID{rr.Hdr, rr.Gid} 712} 713func (rr *GPOS) copy() RR { 714 return &GPOS{rr.Hdr, rr.Longitude, rr.Latitude, rr.Altitude} 715} 716func (rr *HINFO) copy() RR { 717 return &HINFO{rr.Hdr, rr.Cpu, rr.Os} 718} 719func (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} 724func (rr *KX) copy() RR { 725 return &KX{rr.Hdr, rr.Preference, rr.Exchanger} 726} 727func (rr *L32) copy() RR { 728 return &L32{rr.Hdr, rr.Preference, copyIP(rr.Locator32)} 729} 730func (rr *L64) copy() RR { 731 return &L64{rr.Hdr, rr.Preference, rr.Locator64} 732} 733func (rr *LOC) copy() RR { 734 return &LOC{rr.Hdr, rr.Version, rr.Size, rr.HorizPre, rr.VertPre, rr.Latitude, rr.Longitude, rr.Altitude} 735} 736func (rr *LP) copy() RR { 737 return &LP{rr.Hdr, rr.Preference, rr.Fqdn} 738} 739func (rr *MB) copy() RR { 740 return &MB{rr.Hdr, rr.Mb} 741} 742func (rr *MD) copy() RR { 743 return &MD{rr.Hdr, rr.Md} 744} 745func (rr *MF) copy() RR { 746 return &MF{rr.Hdr, rr.Mf} 747} 748func (rr *MG) copy() RR { 749 return &MG{rr.Hdr, rr.Mg} 750} 751func (rr *MINFO) copy() RR { 752 return &MINFO{rr.Hdr, rr.Rmail, rr.Email} 753} 754func (rr *MR) copy() RR { 755 return &MR{rr.Hdr, rr.Mr} 756} 757func (rr *MX) copy() RR { 758 return &MX{rr.Hdr, rr.Preference, rr.Mx} 759} 760func (rr *NAPTR) copy() RR { 761 return &NAPTR{rr.Hdr, rr.Order, rr.Preference, rr.Flags, rr.Service, rr.Regexp, rr.Replacement} 762} 763func (rr *NID) copy() RR { 764 return &NID{rr.Hdr, rr.Preference, rr.NodeID} 765} 766func (rr *NIMLOC) copy() RR { 767 return &NIMLOC{rr.Hdr, rr.Locator} 768} 769func (rr *NINFO) copy() RR { 770 ZSData := make([]string, len(rr.ZSData)) 771 copy(ZSData, rr.ZSData) 772 return &NINFO{rr.Hdr, ZSData} 773} 774func (rr *NS) copy() RR { 775 return &NS{rr.Hdr, rr.Ns} 776} 777func (rr *NSAPPTR) copy() RR { 778 return &NSAPPTR{rr.Hdr, rr.Ptr} 779} 780func (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} 785func (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} 790func (rr *NSEC3PARAM) copy() RR { 791 return &NSEC3PARAM{rr.Hdr, rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt} 792} 793func (rr *NULL) copy() RR { 794 return &NULL{rr.Hdr, rr.Data} 795} 796func (rr *OPENPGPKEY) copy() RR { 797 return &OPENPGPKEY{rr.Hdr, rr.PublicKey} 798} 799func (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} 806func (rr *PTR) copy() RR { 807 return &PTR{rr.Hdr, rr.Ptr} 808} 809func (rr *PX) copy() RR { 810 return &PX{rr.Hdr, rr.Preference, rr.Map822, rr.Mapx400} 811} 812func (rr *RFC3597) copy() RR { 813 return &RFC3597{rr.Hdr, rr.Rdata} 814} 815func (rr *RKEY) copy() RR { 816 return &RKEY{rr.Hdr, rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey} 817} 818func (rr *RP) copy() RR { 819 return &RP{rr.Hdr, rr.Mbox, rr.Txt} 820} 821func (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} 824func (rr *RT) copy() RR { 825 return &RT{rr.Hdr, rr.Preference, rr.Host} 826} 827func (rr *SMIMEA) copy() RR { 828 return &SMIMEA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate} 829} 830func (rr *SOA) copy() RR { 831 return &SOA{rr.Hdr, rr.Ns, rr.Mbox, rr.Serial, rr.Refresh, rr.Retry, rr.Expire, rr.Minttl} 832} 833func (rr *SPF) copy() RR { 834 Txt := make([]string, len(rr.Txt)) 835 copy(Txt, rr.Txt) 836 return &SPF{rr.Hdr, Txt} 837} 838func (rr *SRV) copy() RR { 839 return &SRV{rr.Hdr, rr.Priority, rr.Weight, rr.Port, rr.Target} 840} 841func (rr *SSHFP) copy() RR { 842 return &SSHFP{rr.Hdr, rr.Algorithm, rr.Type, rr.FingerPrint} 843} 844func (rr *TA) copy() RR { 845 return &TA{rr.Hdr, rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} 846} 847func (rr *TALINK) copy() RR { 848 return &TALINK{rr.Hdr, rr.PreviousName, rr.NextName} 849} 850func (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} 853func (rr *TLSA) copy() RR { 854 return &TLSA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate} 855} 856func (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} 859func (rr *TXT) copy() RR { 860 Txt := make([]string, len(rr.Txt)) 861 copy(Txt, rr.Txt) 862 return &TXT{rr.Hdr, Txt} 863} 864func (rr *UID) copy() RR { 865 return &UID{rr.Hdr, rr.Uid} 866} 867func (rr *UINFO) copy() RR { 868 return &UINFO{rr.Hdr, rr.Uinfo} 869} 870func (rr *URI) copy() RR { 871 return &URI{rr.Hdr, rr.Priority, rr.Weight, rr.Target} 872} 873func (rr *X25) copy() RR { 874 return &X25{rr.Hdr, rr.PSDNAddress} 875} 876