@cryptotaxi247 / kubo / commits / ed41ac27f

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 '