daemon: refactor common parts of serve funcs
Juan Batiz-Benet committed
Jan 11, 2015 at 23:44 UTC
ed41ac27fd76efd85619737de0b2e19e21149629
2 files changed
+24
-52
cmd/ipfs/daemon.go
+23
-51
@@ -156,32 +156,46 @@ func daemonFunc(req cmds.Request) (interface{}, error) {
156
}
157
158
func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr) error {
159
- _, host, err := manet.DialArgs(addr)
159
+ origin := os.Getenv(originEnvKey)
160
+ cmdHandler := cmdsHttp.NewHandler(*req.Context(), commands.Root, origin)
161
+ gateway, err := NewGatewayHandler(node)
162
if err != nil {
163
return err
164
}
165
164
- origin := os.Getenv(originEnvKey)
165
-
166
- server := manners.NewServer()
166
mux := http.NewServeMux()
168
- cmdHandler := cmdsHttp.NewHandler(*req.Context(), commands.Root, origin)
167
mux.Handle(cmdsHttp.ApiPath+"/", cmdHandler)
168
+ mux.Handle("/ipfs/", gateway)
169
+ mux.Handle("/webui/", &redirectHandler{webuiPath})
170
+ return listenAndServe("API", node, addr, mux)
171
+}
172
173
+// the gateway also listens on its own address:port in addition to the API listener
174
+func listenAndServeGateway(node *core.IpfsNode, addr ma.Multiaddr) error {
175
gateway, err := NewGatewayHandler(node)
176
if err != nil {
177
return err
178
}
179
180
+ mux := http.NewServeMux()
181
mux.Handle("/ipfs/", gateway)
177
- mux.Handle("/webui/", &redirectHandler{webuiPath})
182
+ return listenAndServe("gateway", node, addr, mux)
183
+}
184
+
185
+func listenAndServe(name string, node *core.IpfsNode, addr ma.Multiaddr, mux *http.ServeMux) error {
186
+ _, host, err := manet.DialArgs(addr)
187
+ if err != nil {
188
+ return err
189
+ }
190
+
191
+ server := manners.NewServer()
192
193
// if the server exits beforehand
194
var serverError error
195
serverExited := make(chan struct{})
196
197
go func() {
184
- fmt.Printf("API server listening on %s\n", addr)
198
+ fmt.Printf("%s server listening on %s\n", name, addr)
199
serverError = server.ListenAndServe(host, mux)
200
close(serverExited)
201
}()
@@ -192,57 +206,15 @@ func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr)
206
207
// if node being closed before server exits, close server
208
case <-node.Closing():
195
- log.Infof("daemon at %s terminating...", addr)
209
+ log.Infof("server at %s terminating...", addr)
210
server.Shutdown <- true
211
<-serverExited // now, DO wait until server exit
212
}
213
200
- log.Infof("daemon at %s terminated", addr)
214
+ log.Infof("server at %s terminated", addr)
215
return serverError
216
}
217
204
-// the gateway also listens on its own address:port in addition to the API listener
205
-func listenAndServeGateway(node *core.IpfsNode, addr ma.Multiaddr) error {
206
- _, host, err := manet.DialArgs(addr)
207
- if err != nil {
208
- return err
209
- }
210
-
211
- server := manners.NewServer()
212
- mux := http.NewServeMux()
213
- gateway, err := NewGatewayHandler(node)
214
- if err != nil {
215
- return err
216
- }
217
- mux.Handle("/ipfs/", gateway)
218
-
219
- done := make(chan struct{}, 1)
220
- defer func() {
221
- done <- struct{}{}
222
- }()
223
-
224
- // go wait until the node dies
225
- go func() {
226
- select {
227
- case <-node.Closed():
228
- case <-done:
229
- return
230
- }
231
-
232
- log.Infof("terminating gateway at %s...", addr)
233
- server.Shutdown <- true
234
- }()
235
-
236
- fmt.Printf("Gateway listening on %s\n", addr)
237
- go func() {
238
- if err := server.ListenAndServe(host, mux); err != nil {
239
- log.Error(err)
240
- }
241
- }()
242
-
243
- return nil
244
-}
245
-
218
type redirectHandler struct {
219
path string
220
}
test/sharness/lib/test-lib.sh
+1
-1
@@ -88,7 +88,7 @@ test_launch_ipfs_daemon() {
88
89
test_expect_success FUSE "'ipfs daemon' output looks good" '
90
IPFS_PID=$! &&
91
- echo "daemon listening on /ip4/127.0.0.1/tcp/5001" >expected &&
91
+ echo "API server listening on /ip4/127.0.0.1/tcp/5001" >expected &&
92
test_cmp_repeat_10_sec expected actual ||
93
fsh cat daemon_err
94
'