summaryrefslogtreecommitdiff
path: root/internal/dns/rr_unknown.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/dns/rr_unknown.go')
-rw-r--r--internal/dns/rr_unknown.go34
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)
+}