update.go raw
1 package dns
2
3 // NameUsed sets the RRs in the prereq section to
4 // "Name is in use" RRs. RFC 2136 section 2.4.4.
5 // See [ANY] on how to make RRs without rdata.
6 func (u *Msg) NameUsed(rr []RR) {
7 if u.Answer == nil {
8 u.Answer = make([]RR, 0, len(rr))
9 }
10 for _, r := range rr {
11 u.Answer = append(u.Answer, &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: TypeANY, Class: ClassANY}})
12 }
13 }
14
15 // NameNotUsed sets the RRs in the prereq section to
16 // "Name is in not use" RRs. RFC 2136 section 2.4.5.
17 func (u *Msg) NameNotUsed(rr []RR) {
18 if u.Answer == nil {
19 u.Answer = make([]RR, 0, len(rr))
20 }
21 for _, r := range rr {
22 u.Answer = append(u.Answer, &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: TypeANY, Class: ClassNONE}})
23 }
24 }
25
26 // Used sets the RRs in the prereq section to
27 // "RRset exists (value dependent -- with rdata)" RRs. RFC 2136 section 2.4.2.
28 func (u *Msg) Used(rr []RR) {
29 if len(u.Question) == 0 {
30 panic("dns: empty question section")
31 }
32 if u.Answer == nil {
33 u.Answer = make([]RR, 0, len(rr))
34 }
35 for _, r := range rr {
36 hdr := r.Header()
37 hdr.Class = u.Question[0].Qclass
38 hdr.Ttl = 0
39 u.Answer = append(u.Answer, r)
40 }
41 }
42
43 // RRsetUsed sets the RRs in the prereq section to
44 // "RRset exists (value independent -- no rdata)" RRs. RFC 2136 section 2.4.1.
45 // See [ANY] on how to make RRs without rdata.
46 func (u *Msg) RRsetUsed(rr []RR) {
47 if u.Answer == nil {
48 u.Answer = make([]RR, 0, len(rr))
49 }
50 for _, r := range rr {
51 h := r.Header()
52 u.Answer = append(u.Answer, &ANY{Hdr: RR_Header{Name: h.Name, Ttl: 0, Rrtype: h.Rrtype, Class: ClassANY}})
53 }
54 }
55
56 // RRsetNotUsed sets the RRs in the prereq section to
57 // "RRset does not exist" RRs. RFC 2136 section 2.4.3.
58 // See [ANY] on how to make RRs without rdata.
59 func (u *Msg) RRsetNotUsed(rr []RR) {
60 if u.Answer == nil {
61 u.Answer = make([]RR, 0, len(rr))
62 }
63 for _, r := range rr {
64 h := r.Header()
65 u.Answer = append(u.Answer, &ANY{Hdr: RR_Header{Name: h.Name, Ttl: 0, Rrtype: h.Rrtype, Class: ClassNONE}})
66 }
67 }
68
69 // Insert creates a dynamic update packet that adds an complete RRset, see RFC 2136 section 2.5.1.
70 // See [ANY] on how to make RRs without rdata.
71 func (u *Msg) Insert(rr []RR) {
72 if len(u.Question) == 0 {
73 panic("dns: empty question section")
74 }
75 if u.Ns == nil {
76 u.Ns = make([]RR, 0, len(rr))
77 }
78 for _, r := range rr {
79 r.Header().Class = u.Question[0].Qclass
80 u.Ns = append(u.Ns, r)
81 }
82 }
83
84 // RemoveRRset creates a dynamic update packet that deletes an RRset, see RFC 2136 section 2.5.2.
85 // See [ANY] on how to make RRs without rdata.
86 func (u *Msg) RemoveRRset(rr []RR) {
87 if u.Ns == nil {
88 u.Ns = make([]RR, 0, len(rr))
89 }
90 for _, r := range rr {
91 h := r.Header()
92 u.Ns = append(u.Ns, &ANY{Hdr: RR_Header{Name: h.Name, Ttl: 0, Rrtype: h.Rrtype, Class: ClassANY}})
93 }
94 }
95
96 // RemoveName creates a dynamic update packet that deletes all RRsets of a name, see RFC 2136 section 2.5.3
97 // See [ANY] on how to make RRs without rdata.
98 func (u *Msg) RemoveName(rr []RR) {
99 if u.Ns == nil {
100 u.Ns = make([]RR, 0, len(rr))
101 }
102 for _, r := range rr {
103 u.Ns = append(u.Ns, &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: TypeANY, Class: ClassANY}})
104 }
105 }
106
107 // Remove creates a dynamic update packet deletes RR from a RRSset, see RFC 2136 section 2.5.4
108 // See [ANY] on how to make RRs without rdata.
109 func (u *Msg) Remove(rr []RR) {
110 if u.Ns == nil {
111 u.Ns = make([]RR, 0, len(rr))
112 }
113 for _, r := range rr {
114 h := r.Header()
115 h.Class = ClassNONE
116 h.Ttl = 0
117 u.Ns = append(u.Ns, r)
118 }
119 }
120