ab9dd18bec
See https://github.com/hashicorp/consul/issues/3977 While trying to improve furthermore #3948 (This pull request is still valid since we are not using Compression to compute the result anyway). I saw a strange behaviour of dns library. Basically, msg.Len() and len(msg.Pack()) disagree on Message len. Thus, calculation of DNS response is false consul relies on msg.Len() instead of the result of Pack() This is linked to miekg/dns#453 and a fix has been provided with miekg/dns#454 Would it be possible to upgrade miekg/dns to a more recent function ? Consul might for instance upgrade to a post 1.0 release such as https://github.com/miekg/dns/releases/tag/v1.0.4
3616 lines
76 KiB
Go
3616 lines
76 KiB
Go
// Code generated by "go run msg_generate.go"; DO NOT EDIT.
|
|
|
|
package dns
|
|
|
|
// pack*() functions
|
|
|
|
func (rr *A) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packDataA(rr.A, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *AAAA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packDataAAAA(rr.AAAA, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *AFSDB) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Subtype, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Hostname, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *ANY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *AVC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packStringTxt(rr.Txt, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *CAA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint8(rr.Flag, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packString(rr.Tag, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringOctet(rr.Value, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *CDNSKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Flags, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Protocol, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringBase64(rr.PublicKey, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *CDS) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.KeyTag, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.DigestType, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.Digest, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *CERT) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Type, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.KeyTag, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringBase64(rr.Certificate, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *CNAME) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Target, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *CSYNC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint32(rr.Serial, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Flags, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packDataNsec(rr.TypeBitMap, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *DHCID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packStringBase64(rr.Digest, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *DLV) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.KeyTag, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.DigestType, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.Digest, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *DNAME) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Target, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *DNSKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Flags, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Protocol, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringBase64(rr.PublicKey, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *DS) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.KeyTag, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.DigestType, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.Digest, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *EID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packStringHex(rr.Endpoint, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *EUI48) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint48(rr.Address, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *EUI64) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint64(rr.Address, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *GID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint32(rr.Gid, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *GPOS) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packString(rr.Longitude, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packString(rr.Latitude, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packString(rr.Altitude, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *HINFO) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packString(rr.Cpu, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packString(rr.Os, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *HIP) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint8(rr.HitLength, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.PublicKeyAlgorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.PublicKeyLength, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.Hit, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringBase64(rr.PublicKey, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packDataDomainNames(rr.RendezvousServers, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *KEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Flags, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Protocol, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringBase64(rr.PublicKey, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *KX) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Preference, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Exchanger, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *L32) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Preference, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packDataA(rr.Locator32, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *L64) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Preference, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint64(rr.Locator64, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *LOC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint8(rr.Version, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Size, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.HorizPre, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.VertPre, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Latitude, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Longitude, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Altitude, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *LP) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Preference, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Fqdn, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *MB) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Mb, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *MD) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Md, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *MF) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Mf, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *MG) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Mg, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *MINFO) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Rmail, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Email, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *MR) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Mr, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *MX) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Preference, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Mx, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *NAPTR) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Order, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Preference, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packString(rr.Flags, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packString(rr.Service, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packString(rr.Regexp, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Replacement, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *NID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Preference, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint64(rr.NodeID, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *NIMLOC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packStringHex(rr.Locator, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *NINFO) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packStringTxt(rr.ZSData, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *NS) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Ns, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *NSAPPTR) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Ptr, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *NSEC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.NextDomain, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packDataNsec(rr.TypeBitMap, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *NSEC3) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint8(rr.Hash, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Flags, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Iterations, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.SaltLength, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
// Only pack salt if value is not "-", i.e. empty
|
|
if rr.Salt != "-" {
|
|
off, err = packStringHex(rr.Salt, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
}
|
|
off, err = packUint8(rr.HashLength, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringBase32(rr.NextDomain, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packDataNsec(rr.TypeBitMap, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *NSEC3PARAM) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint8(rr.Hash, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Flags, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Iterations, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.SaltLength, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
// Only pack salt if value is not "-", i.e. empty
|
|
if rr.Salt != "-" {
|
|
off, err = packStringHex(rr.Salt, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *OPENPGPKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packStringBase64(rr.PublicKey, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *OPT) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packDataOpt(rr.Option, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *PTR) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Ptr, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *PX) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Preference, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Map822, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Mapx400, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *RFC3597) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packStringHex(rr.Rdata, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *RKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Flags, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Protocol, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringBase64(rr.PublicKey, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *RP) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Mbox, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Txt, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *RRSIG) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.TypeCovered, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Labels, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.OrigTtl, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Expiration, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Inception, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.KeyTag, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.SignerName, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringBase64(rr.Signature, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *RT) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Preference, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Host, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *SIG) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.TypeCovered, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Labels, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.OrigTtl, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Expiration, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Inception, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.KeyTag, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.SignerName, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringBase64(rr.Signature, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *SMIMEA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint8(rr.Usage, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Selector, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.MatchingType, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.Certificate, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *SOA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Ns, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Mbox, msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Serial, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Refresh, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Retry, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Expire, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Minttl, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *SPF) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packStringTxt(rr.Txt, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *SRV) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Priority, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Weight, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Port, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.Target, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *SSHFP) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Type, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.FingerPrint, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *TA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.KeyTag, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Algorithm, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.DigestType, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.Digest, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *TALINK) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.PreviousName, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = PackDomainName(rr.NextName, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *TKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Algorithm, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Inception, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint32(rr.Expiration, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Mode, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Error, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.KeySize, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.Key, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.OtherLen, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.OtherData, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *TLSA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint8(rr.Usage, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.Selector, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint8(rr.MatchingType, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.Certificate, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *TSIG) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = PackDomainName(rr.Algorithm, msg, off, compression, false)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint48(rr.TimeSigned, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Fudge, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.MACSize, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.MAC, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.OrigId, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Error, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.OtherLen, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringHex(rr.OtherData, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *TXT) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packStringTxt(rr.Txt, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *UID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint32(rr.Uid, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *UINFO) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packString(rr.Uinfo, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *URI) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packUint16(rr.Priority, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packUint16(rr.Weight, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
off, err = packStringOctet(rr.Target, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
func (rr *X25) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {
|
|
off, err := rr.Hdr.pack(msg, off, compression, compress)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
headerEnd := off
|
|
off, err = packString(rr.PSDNAddress, msg, off)
|
|
if err != nil {
|
|
return off, err
|
|
}
|
|
rr.Header().Rdlength = uint16(off - headerEnd)
|
|
return off, nil
|
|
}
|
|
|
|
// unpack*() functions
|
|
|
|
func unpackA(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(A)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.A, off, err = unpackDataA(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackAAAA(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(AAAA)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.AAAA, off, err = unpackDataAAAA(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackAFSDB(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(AFSDB)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Subtype, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Hostname, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackANY(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(ANY)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackAVC(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(AVC)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Txt, off, err = unpackStringTxt(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackCAA(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(CAA)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Flag, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Tag, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Value, off, err = unpackStringOctet(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackCDNSKEY(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(CDNSKEY)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Flags, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Protocol, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackCDS(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(CDS)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.KeyTag, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.DigestType, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Digest, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackCERT(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(CERT)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Type, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.KeyTag, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Certificate, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackCNAME(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(CNAME)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Target, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackCSYNC(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(CSYNC)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Serial, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Flags, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.TypeBitMap, off, err = unpackDataNsec(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackDHCID(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(DHCID)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Digest, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackDLV(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(DLV)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.KeyTag, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.DigestType, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Digest, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackDNAME(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(DNAME)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Target, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackDNSKEY(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(DNSKEY)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Flags, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Protocol, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackDS(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(DS)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.KeyTag, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.DigestType, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Digest, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackEID(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(EID)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Endpoint, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackEUI48(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(EUI48)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Address, off, err = unpackUint48(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackEUI64(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(EUI64)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Address, off, err = unpackUint64(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackGID(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(GID)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Gid, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackGPOS(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(GPOS)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Longitude, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Latitude, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Altitude, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackHINFO(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(HINFO)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Cpu, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Os, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackHIP(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(HIP)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.HitLength, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.PublicKeyAlgorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.PublicKeyLength, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Hit, off, err = unpackStringHex(msg, off, off+int(rr.HitLength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
rr.PublicKey, off, err = unpackStringBase64(msg, off, off+int(rr.PublicKeyLength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
rr.RendezvousServers, off, err = unpackDataDomainNames(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackKEY(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(KEY)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Flags, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Protocol, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackKX(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(KX)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Preference, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Exchanger, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackL32(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(L32)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Preference, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Locator32, off, err = unpackDataA(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackL64(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(L64)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Preference, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Locator64, off, err = unpackUint64(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackLOC(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(LOC)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Version, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Size, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.HorizPre, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.VertPre, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Latitude, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Longitude, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Altitude, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackLP(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(LP)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Preference, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Fqdn, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackMB(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(MB)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Mb, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackMD(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(MD)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Md, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackMF(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(MF)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Mf, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackMG(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(MG)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Mg, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackMINFO(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(MINFO)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Rmail, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Email, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackMR(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(MR)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Mr, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackMX(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(MX)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Preference, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Mx, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackNAPTR(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(NAPTR)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Order, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Preference, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Flags, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Service, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Regexp, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Replacement, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackNID(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(NID)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Preference, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.NodeID, off, err = unpackUint64(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackNIMLOC(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(NIMLOC)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Locator, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackNINFO(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(NINFO)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.ZSData, off, err = unpackStringTxt(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackNS(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(NS)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Ns, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackNSAPPTR(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(NSAPPTR)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Ptr, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackNSEC(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(NSEC)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.NextDomain, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.TypeBitMap, off, err = unpackDataNsec(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackNSEC3(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(NSEC3)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Hash, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Flags, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Iterations, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.SaltLength, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Salt, off, err = unpackStringHex(msg, off, off+int(rr.SaltLength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
rr.HashLength, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.NextDomain, off, err = unpackStringBase32(msg, off, off+int(rr.HashLength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
rr.TypeBitMap, off, err = unpackDataNsec(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackNSEC3PARAM(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(NSEC3PARAM)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Hash, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Flags, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Iterations, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.SaltLength, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Salt, off, err = unpackStringHex(msg, off, off+int(rr.SaltLength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackOPENPGPKEY(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(OPENPGPKEY)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackOPT(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(OPT)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Option, off, err = unpackDataOpt(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackPTR(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(PTR)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Ptr, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackPX(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(PX)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Preference, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Map822, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Mapx400, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackRFC3597(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(RFC3597)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Rdata, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackRKEY(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(RKEY)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Flags, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Protocol, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackRP(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(RP)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Mbox, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Txt, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackRRSIG(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(RRSIG)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.TypeCovered, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Labels, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.OrigTtl, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Expiration, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Inception, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.KeyTag, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.SignerName, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Signature, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackRT(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(RT)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Preference, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Host, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackSIG(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(SIG)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.TypeCovered, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Labels, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.OrigTtl, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Expiration, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Inception, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.KeyTag, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.SignerName, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Signature, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackSMIMEA(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(SMIMEA)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Usage, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Selector, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.MatchingType, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Certificate, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackSOA(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(SOA)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Ns, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Mbox, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Serial, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Refresh, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Retry, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Expire, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Minttl, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackSPF(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(SPF)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Txt, off, err = unpackStringTxt(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackSRV(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(SRV)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Priority, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Weight, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Port, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Target, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackSSHFP(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(SSHFP)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Type, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.FingerPrint, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackTA(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(TA)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.KeyTag, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Algorithm, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.DigestType, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Digest, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackTALINK(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(TALINK)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.PreviousName, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.NextName, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackTKEY(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(TKEY)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Algorithm, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Inception, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Expiration, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Mode, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Error, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.KeySize, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Key, off, err = unpackStringHex(msg, off, off+int(rr.KeySize))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
rr.OtherLen, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.OtherData, off, err = unpackStringHex(msg, off, off+int(rr.OtherLen))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackTLSA(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(TLSA)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Usage, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Selector, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.MatchingType, off, err = unpackUint8(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Certificate, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackTSIG(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(TSIG)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Algorithm, off, err = UnpackDomainName(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.TimeSigned, off, err = unpackUint48(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Fudge, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.MACSize, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.MAC, off, err = unpackStringHex(msg, off, off+int(rr.MACSize))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
rr.OrigId, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Error, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.OtherLen, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.OtherData, off, err = unpackStringHex(msg, off, off+int(rr.OtherLen))
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackTXT(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(TXT)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Txt, off, err = unpackStringTxt(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackUID(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(UID)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Uid, off, err = unpackUint32(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackUINFO(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(UINFO)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Uinfo, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackURI(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(URI)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.Priority, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Weight, off, err = unpackUint16(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
if off == len(msg) {
|
|
return rr, off, nil
|
|
}
|
|
rr.Target, off, err = unpackStringOctet(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
func unpackX25(h RR_Header, msg []byte, off int) (RR, int, error) {
|
|
rr := new(X25)
|
|
rr.Hdr = h
|
|
if noRdata(h) {
|
|
return rr, off, nil
|
|
}
|
|
var err error
|
|
rdStart := off
|
|
_ = rdStart
|
|
|
|
rr.PSDNAddress, off, err = unpackString(msg, off)
|
|
if err != nil {
|
|
return rr, off, err
|
|
}
|
|
return rr, off, err
|
|
}
|
|
|
|
var typeToUnpack = map[uint16]func(RR_Header, []byte, int) (RR, int, error){
|
|
TypeA: unpackA,
|
|
TypeAAAA: unpackAAAA,
|
|
TypeAFSDB: unpackAFSDB,
|
|
TypeANY: unpackANY,
|
|
TypeAVC: unpackAVC,
|
|
TypeCAA: unpackCAA,
|
|
TypeCDNSKEY: unpackCDNSKEY,
|
|
TypeCDS: unpackCDS,
|
|
TypeCERT: unpackCERT,
|
|
TypeCNAME: unpackCNAME,
|
|
TypeCSYNC: unpackCSYNC,
|
|
TypeDHCID: unpackDHCID,
|
|
TypeDLV: unpackDLV,
|
|
TypeDNAME: unpackDNAME,
|
|
TypeDNSKEY: unpackDNSKEY,
|
|
TypeDS: unpackDS,
|
|
TypeEID: unpackEID,
|
|
TypeEUI48: unpackEUI48,
|
|
TypeEUI64: unpackEUI64,
|
|
TypeGID: unpackGID,
|
|
TypeGPOS: unpackGPOS,
|
|
TypeHINFO: unpackHINFO,
|
|
TypeHIP: unpackHIP,
|
|
TypeKEY: unpackKEY,
|
|
TypeKX: unpackKX,
|
|
TypeL32: unpackL32,
|
|
TypeL64: unpackL64,
|
|
TypeLOC: unpackLOC,
|
|
TypeLP: unpackLP,
|
|
TypeMB: unpackMB,
|
|
TypeMD: unpackMD,
|
|
TypeMF: unpackMF,
|
|
TypeMG: unpackMG,
|
|
TypeMINFO: unpackMINFO,
|
|
TypeMR: unpackMR,
|
|
TypeMX: unpackMX,
|
|
TypeNAPTR: unpackNAPTR,
|
|
TypeNID: unpackNID,
|
|
TypeNIMLOC: unpackNIMLOC,
|
|
TypeNINFO: unpackNINFO,
|
|
TypeNS: unpackNS,
|
|
TypeNSAPPTR: unpackNSAPPTR,
|
|
TypeNSEC: unpackNSEC,
|
|
TypeNSEC3: unpackNSEC3,
|
|
TypeNSEC3PARAM: unpackNSEC3PARAM,
|
|
TypeOPENPGPKEY: unpackOPENPGPKEY,
|
|
TypeOPT: unpackOPT,
|
|
TypePTR: unpackPTR,
|
|
TypePX: unpackPX,
|
|
TypeRKEY: unpackRKEY,
|
|
TypeRP: unpackRP,
|
|
TypeRRSIG: unpackRRSIG,
|
|
TypeRT: unpackRT,
|
|
TypeSIG: unpackSIG,
|
|
TypeSMIMEA: unpackSMIMEA,
|
|
TypeSOA: unpackSOA,
|
|
TypeSPF: unpackSPF,
|
|
TypeSRV: unpackSRV,
|
|
TypeSSHFP: unpackSSHFP,
|
|
TypeTA: unpackTA,
|
|
TypeTALINK: unpackTALINK,
|
|
TypeTKEY: unpackTKEY,
|
|
TypeTLSA: unpackTLSA,
|
|
TypeTSIG: unpackTSIG,
|
|
TypeTXT: unpackTXT,
|
|
TypeUID: unpackUID,
|
|
TypeUINFO: unpackUINFO,
|
|
TypeURI: unpackURI,
|
|
TypeX25: unpackX25,
|
|
}
|