From 52a0d3845ead07f840e9e99cb4a8c3507c84ab30 Mon Sep 17 00:00:00 2001 From: radhitya Date: Sat, 4 Jul 2026 14:29:02 +0700 Subject: fiuh --- internal/dns/rr_soa.go | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 internal/dns/rr_soa.go (limited to 'internal/dns/rr_soa.go') diff --git a/internal/dns/rr_soa.go b/internal/dns/rr_soa.go new file mode 100644 index 0000000..dca4baf --- /dev/null +++ b/internal/dns/rr_soa.go @@ -0,0 +1,65 @@ +package dns + +import "fmt" + +// https://datatracker.ietf.org/doc/html/rfc1035#section-3.3.13 +type SOA struct { + Mname Name + Rname Name + Serial uint32 + Refresh uint32 + Retry uint32 + Expire uint32 + Minimum uint32 +} + +func (s *SOA) Type() uint16 { return TypeSOA } + +func (s *SOA) Pack(p *packer) error { + if err := p.writeName(s.Mname); err != nil { + return err + } + if err := p.writeName(s.Rname); err != nil { + return err + } + p.writeUint32(s.Serial) + p.writeUint32(s.Refresh) + p.writeUint32(s.Retry) + p.writeUint32(s.Expire) + p.writeUint32(s.Minimum) + return nil +} + +func (s *SOA) Unpack(u *unpacker, length uint16) error { + var err error + s.Mname, err = u.readName() + if err != nil { + return err + } + s.Rname, err = u.readName() + if err != nil { + return err + } + s.Serial, err = u.readUint32() + if err != nil { + return err + } + s.Refresh, err = u.readUint32() + if err != nil { + return err + } + s.Retry, err = u.readUint32() + if err != nil { + return err + } + s.Expire, err = u.readUint32() + if err != nil { + return err + } + s.Minimum, err = u.readUint32() + return err +} + +func (s *SOA) String() string { + return fmt.Sprintf("%s %s %d %d %d %d %d", s.Mname, s.Rname, s.Serial, s.Refresh, s.Retry, s.Expire, s.Minimum) +} -- cgit v1.2.3