summaryrefslogtreecommitdiff
path: root/internal/dns/rr_a.go
blob: 3886ed9a1f3ba7b04edf3a4f199e0679a5e4ff76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package dns

import (
	"fmt"
	"net/netip"
)

type A struct {
	Addr netip.Addr
}

func (a *A) Type() uint16 {
	return TypeA
}

func (a *A) Pack(p *packer) error {
	b := a.Addr.As4()
	p.buf = append(p.buf, b[:]...)
	return nil
}

func (a *A) Unpack(u *unpacker, length uint16) error {
	if length != 4 {
		return fmt.Errorf("dns: A rdata length %d != 4", length)
	}
	if u.off+4 > len(u.buf) {
		return fmt.Errorf("dns: short A rdata")
	}
	a.Addr = netip.AddrFrom4([4]byte(u.buf[u.off : u.off+4]))
	u.off += 4
	return nil
}

func (a *A) String() string { return a.Addr.String() }