main
c8b91bc ยท 4 months ago 7 commits
 1package dns
 2
 3import "encoding/binary"
 4
 5// RR is a DNS Resource Record (an answer)
 6// RFC 1035 section 3.2.1
 7type RR struct {
 8	Name  string
 9	Type  uint16
10	Class uint16
11	TTL   uint32 // Time to live in seconds
12	RData []byte // Actual record data, varies by type
13}
14
15// Pack serializes an RR to wire format
16func (rr *RR) Pack() []byte {
17	var buf []byte
18	buf = append(buf, PackDomain(rr.Name)...)
19
20	// Type, Class, TTL, RDLength, RData
21	tmp := make([]byte, 8)
22	binary.BigEndian.PutUint16(tmp[0:2], rr.Type)
23	binary.BigEndian.PutUint16(tmp[2:4], rr.Class)
24	binary.BigEndian.PutUint32(tmp[4:8], rr.TTL)
25	buf = append(buf, tmp...)
26
27	// RDLength + RData
28	rdLen := make([]byte, 2)
29	binary.BigEndian.PutUint16(rdLen, uint16(len(rr.RData)))
30	buf = append(buf, rdLen...)
31	buf = append(buf, rr.RData...)
32	return buf
33}