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