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