diff options
| author | radhitya <alif@radhitya.org> | 2026-07-04 14:29:02 +0700 |
|---|---|---|
| committer | radhitya <alif@radhitya.org> | 2026-07-04 14:29:02 +0700 |
| commit | 52a0d3845ead07f840e9e99cb4a8c3507c84ab30 (patch) | |
| tree | b9a08117bdcb35a1a0e61543b0859db8f4aa6bfd /internal/dns/rr_txt.go | |
| parent | e9d3659ef41b9b5fd5e7cc7bd04ae3fc07850044 (diff) | |
fiuh
Diffstat (limited to 'internal/dns/rr_txt.go')
| -rw-r--r-- | internal/dns/rr_txt.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/dns/rr_txt.go b/internal/dns/rr_txt.go new file mode 100644 index 0000000..f225afa --- /dev/null +++ b/internal/dns/rr_txt.go @@ -0,0 +1,43 @@ +package dns + +import "fmt" + +type TXT struct { + Txt []string +} + +func (t *TXT) Type() uint16 { + return TypeTXT +} + +func (t *TXT) Pack(p *packer) error { + for _, s := range t.Txt { + if len(s) > 255 { + return fmt.Errorf("dns: txt string > 255 octets") + } + p.buf = append(p.buf, byte(len(s))) + p.buf = append(p.buf, s...) + } + return nil +} + +func (t *TXT) Unpack(u *unpacker, length uint16) error { + end := u.off + int(length) + for u.off < end { + if u.off >= len(u.buf) { + return fmt.Errorf("dns: short txt") + } + l := int(u.buf[u.off]) + u.off++ + if u.off+l > end { + return fmt.Errorf("dns: txt string overflow") + } + t.Txt = append(t.Txt, string(u.buf[u.off:u.off+l])) + u.off += l + } + return nil +} + +func (t *TXT) String() string { + return fmt.Sprintf("%v", t.Txt) +} |
