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) }