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