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}