1 // Copyright 2017 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package dnsmessage_test
12 "golang.org/x/net/dns/dnsmessage"
15 func mustNewName(name string) dnsmessage.Name {
16 n, err := dnsmessage.NewName(name)
23 func ExampleParser() {
24 msg := dnsmessage.Message{
25 Header: dnsmessage.Header{Response: true, Authoritative: true},
26 Questions: []dnsmessage.Question{
28 Name: mustNewName("foo.bar.example.com."),
29 Type: dnsmessage.TypeA,
30 Class: dnsmessage.ClassINET,
33 Name: mustNewName("bar.example.com."),
34 Type: dnsmessage.TypeA,
35 Class: dnsmessage.ClassINET,
38 Answers: []dnsmessage.Resource{
40 dnsmessage.ResourceHeader{
41 Name: mustNewName("foo.bar.example.com."),
42 Type: dnsmessage.TypeA,
43 Class: dnsmessage.ClassINET,
45 &dnsmessage.AResource{[4]byte{127, 0, 0, 1}},
48 dnsmessage.ResourceHeader{
49 Name: mustNewName("bar.example.com."),
50 Type: dnsmessage.TypeA,
51 Class: dnsmessage.ClassINET,
53 &dnsmessage.AResource{[4]byte{127, 0, 0, 2}},
58 buf, err := msg.Pack()
63 wantName := "bar.example.com."
65 var p dnsmessage.Parser
66 if _, err := p.Start(buf); err != nil {
71 q, err := p.Question()
72 if err == dnsmessage.ErrSectionDone {
79 if q.Name.String() != wantName {
83 fmt.Println("Found question for name", wantName)
84 if err := p.SkipAllQuestions(); err != nil {
92 h, err := p.AnswerHeader()
93 if err == dnsmessage.ErrSectionDone {
100 if (h.Type != dnsmessage.TypeA && h.Type != dnsmessage.TypeAAAA) || h.Class != dnsmessage.ClassINET {
104 if !strings.EqualFold(h.Name.String(), wantName) {
105 if err := p.SkipAnswer(); err != nil {
112 case dnsmessage.TypeA:
113 r, err := p.AResource()
117 gotIPs = append(gotIPs, r.A[:])
118 case dnsmessage.TypeAAAA:
119 r, err := p.AAAAResource()
123 gotIPs = append(gotIPs, r.AAAA[:])
127 fmt.Printf("Found A/AAAA records for name %s: %v\n", wantName, gotIPs)
130 // Found question for name bar.example.com.
131 // Found A/AAAA records for name bar.example.com.: [127.0.0.2]