This repository has been archived by the owner on Nov 27, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathexample_test.go
171 lines (152 loc) · 4.59 KB
/
example_test.go
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package dnssd_test
import (
"fmt"
"log"
"net"
"net/http"
"github.com/andrewtj/dnssd"
"github.com/miekg/dns"
)
func ExampleRegisterCallbackFunc(op *dnssd.RegisterOp, err error, add bool, name, serviceType, domain string) {
if err != nil {
// op is now inactive
log.Printf("Service registration failed: %s", err)
return
}
if add {
log.Printf("Service registered as “%s“ in %s", name, domain)
} else {
log.Printf("Service “%s” removed from %s", name, domain)
}
}
func ExampleRegisterOp() {
listener, err := net.Listen("tcp", ":0")
if err != nil {
log.Printf("Listen failed: %s", err)
return
}
port := listener.Addr().(*net.TCPAddr).Port
op, err := dnssd.StartRegisterOp("", "_http._tcp", port, ExampleRegisterCallbackFunc)
if err != nil {
log.Printf("Failed to register service: %s", err)
return
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s", r.RemoteAddr)
})
http.Serve(listener, nil)
// later...
op.Stop()
}
func ExampleRegisterOp_proxy() {
op := dnssd.NewProxyRegisterOp("dnssd godoc", "_http._tcp", "godoc.org", 80, ExampleRegisterCallbackFunc)
if err := op.SetTXTPair("path", "/github.com/andrewtj/dnssd"); err != nil {
log.Printf("Failed to set key-value pair: %s", err)
return
}
if err := op.Start(); err != nil {
log.Printf("Failed to register service: %s", err)
return
}
// later...
op.Stop()
}
func ExampleBrowseCallbackFunc(op *dnssd.BrowseOp, err error, add bool, interfaceIndex int, name string, serviceType string, domain string) {
if err != nil {
// op is now inactive
log.Printf("Browse operation failed: %s", err)
return
}
change := "lost"
if add {
change = "found"
}
log.Printf("Browse operation %s %s service “%s” in %s on interface %d", change, serviceType, name, domain, interfaceIndex)
}
func ExampleBrowseOp() {
op, err := dnssd.StartBrowseOp("_http._tcp", ExampleBrowseCallbackFunc)
if err != nil {
// op is now inactive
log.Printf("Browse operation failed: %s", err)
return
}
// later...
op.Stop()
}
func ExampleBrowseOp_domain() {
op := dnssd.NewBrowseOp("_http._tcp", ExampleBrowseCallbackFunc)
op.SetDomain("dns-sd.org")
if err := op.Start(); err != nil {
log.Printf("Failed to start browse operation: %s", err)
return
}
// later...
op.Stop()
}
func ExampleResolveCallbackFunc(op *dnssd.ResolveOp, err error, host string, port int, txt map[string]string) {
if err != nil {
// op is now inactive
log.Printf("Resolve operation failed: %s", err)
return
}
log.Printf("Resolved service to host %s port %d with meta info: %v", host, port, txt)
}
func ExampleResolveOp() {
op, err := dnssd.StartResolveOp(0, " * DNS Service Discovery", "_http._tcp", "dns-sd.org", ExampleResolveCallbackFunc)
if err != nil {
log.Printf("Failed to start resolve operation: %s", err)
return
}
// later...
op.Stop()
}
func ExampleQueryCallbackFunc(op *dnssd.QueryOp, err error, add bool, interfaceIndex int, fullname string, rrtype, rrclass uint16, rdata []byte, ttl uint32) {
if err != nil {
// op is now inactive
log.Printf("Query operation failed: %s", err)
return
}
change := "removed"
if add {
change = "added"
}
log.Printf("Query operation %s %s/%d/%d/%v (TTL: %d) on interface %d", change, fullname, rrtype, rrclass, rdata, ttl, interfaceIndex)
}
func ExampleQueryCallbackFunc_unpackRR(op *dnssd.QueryOp, err error, add bool, interfaceIndex int, fullname string, rrtype, rrclass uint16, rdata []byte, ttl uint32) {
// Demonstrates constructing a resource record and unpacking it using
// Miek Gieben's dns package (https://github.com/miekg/dns/).
if err != nil {
// op is now inactive
log.Printf("Query operation failed: %s", err)
return
}
buf := make([]byte, len(fullname)+1+2+2+4+2+len(rdata))
off, err := dns.PackDomainName(fullname, buf, 0, nil, false)
if err != nil {
log.Fatalf("Error packing domain: %s", err)
}
buf = buf[:off]
buf = append(buf, byte(rrtype>>8), byte(rrtype))
buf = append(buf, byte(rrclass>>8), byte(rrclass))
buf = append(buf, byte(ttl>>24), byte(ttl>>16), byte(ttl>>8), byte(ttl))
buf = append(buf, byte(len(rdata)>>8), byte(len(rdata)))
buf = append(buf, rdata...)
rr, off, err := dns.UnpackRR(buf, 0)
if err != nil {
log.Fatalf("Error unpacking rr: %s", err)
}
change := "removed"
if add {
change = "added"
}
log.Printf("Query operation on interface %d %s:\n%s", interfaceIndex, change, rr.String())
}
func ExampleQueryOp() {
op := dnssd.NewQueryOp(0, "golang.org.", 1, 1, ExampleQueryCallbackFunc)
if err := op.Start(); err != nil {
log.Printf("Failed to start query operation: %s", err)
return
}
// later
op.Stop()
}