diff options
Diffstat (limited to 'internal/dns/rr_unknown.go')
| -rw-r--r-- | internal/dns/rr_unknown.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/internal/dns/rr_unknown.go b/internal/dns/rr_unknown.go new file mode 100644 index 0000000..77ae46d --- /dev/null +++ b/internal/dns/rr_unknown.go @@ -0,0 +1,34 @@ +package dns + +// https://datatracker.ietf.org/doc/html/rfc3597 + +import "fmt" + +type Unknown struct { + RRType uint16 + Data []byte +} + +func (u *Unknown) Type() uint16 { + return u.RRType +} + +func (u *Unknown) Pack(p *packer) error { + p.buf = append(p.buf, u.Data...) + return nil +} + +func (u *Unknown) Unpack(ru *unpacker, length uint16) error { + if ru.off+int(length) > len(ru.buf) { + return fmt.Errorf("dns: short unknown rdata") + } + + u.Data = make([]byte, length) + copy(u.Data, ru.buf[ru.off:ru.off+int(length)]) + ru.off += int(length) + return nil +} + +func (u *Unknown) String() string { + return fmt.Sprintf("\\# %d %x", len(u.Data), u.Data) +} |
