From ed41ac27fd76efd85619737de0b2e19e21149629 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Sun, 11 Jan 2015 23:44:05 -0800 Subject: [PATCH] daemon: refactor common parts of serve funcs --- cmd/ipfs/daemon.go | 82 ++++++++++++----------------------- test/sharness/lib/test-lib.sh | 2 +- 2 files changed, 28 insertions(+), 56 deletions(-) diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index 9999cb9f6..af0b3a8d7 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -156,32 +156,46 @@ func daemonFunc(req cmds.Request) (interface{}, error) { } func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr) error { - _, host, err := manet.DialArgs(addr) - if err != nil { - return err - } - origin := os.Getenv(originEnvKey) - - server := manners.NewServer() - mux := http.NewServeMux() cmdHandler := cmdsHttp.NewHandler(*req.Context(), commands.Root, origin) - mux.Handle(cmdsHttp.ApiPath+"/", cmdHandler) - gateway, err := NewGatewayHandler(node) if err != nil { return err } + mux := http.NewServeMux() + mux.Handle(cmdsHttp.ApiPath+"/", cmdHandler) mux.Handle("/ipfs/", gateway) mux.Handle("/webui/", &redirectHandler{webuiPath}) + return listenAndServe("API", node, addr, mux) +} + +// the gateway also listens on its own address:port in addition to the API listener +func listenAndServeGateway(node *core.IpfsNode, addr ma.Multiaddr) error { + gateway, err := NewGatewayHandler(node) + if err != nil { + return err + } + + mux := http.NewServeMux() + mux.Handle("/ipfs/", gateway) + return listenAndServe("gateway", node, addr, mux) +} + +func listenAndServe(name string, node *core.IpfsNode, addr ma.Multiaddr, mux *http.ServeMux) error { + _, host, err := manet.DialArgs(addr) + if err != nil { + return err + } + + server := manners.NewServer() // if the server exits beforehand var serverError error serverExited := make(chan struct{}) go func() { - fmt.Printf("API server listening on %s\n", addr) + fmt.Printf("%s server listening on %s\n", name, addr) serverError = server.ListenAndServe(host, mux) close(serverExited) }() @@ -192,57 +206,15 @@ func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr) // if node being closed before server exits, close server case <-node.Closing(): - log.Infof("daemon at %s terminating...", addr) + log.Infof("server at %s terminating...", addr) server.Shutdown <- true <-serverExited // now, DO wait until server exit } - log.Infof("daemon at %s terminated", addr) + log.Infof("server at %s terminated", addr) return serverError } -// the gateway also listens on its own address:port in addition to the API listener -func listenAndServeGateway(node *core.IpfsNode, addr ma.Multiaddr) error { - _, host, err := manet.DialArgs(addr) - if err != nil { - return err - } - - server := manners.NewServer() - mux := http.NewServeMux() - gateway, err := NewGatewayHandler(node) - if err != nil { - return err - } - mux.Handle("/ipfs/", gateway) - - done := make(chan struct{}, 1) - defer func() { - done <- struct{}{} - }() - - // go wait until the node dies - go func() { - select { - case <-node.Closed(): - case <-done: - return - } - - log.Infof("terminating gateway at %s...", addr) - server.Shutdown <- true - }() - - fmt.Printf("Gateway listening on %s\n", addr) - go func() { - if err := server.ListenAndServe(host, mux); err != nil { - log.Error(err) - } - }() - - return nil -} - type redirectHandler struct { path string } diff --git a/test/sharness/lib/test-lib.sh b/test/sharness/lib/test-lib.sh index 968627be5..43bd1397d 100644 --- a/test/sharness/lib/test-lib.sh +++ b/test/sharness/lib/test-lib.sh @@ -88,7 +88,7 @@ test_launch_ipfs_daemon() { test_expect_success FUSE "'ipfs daemon' output looks good" ' IPFS_PID=$! && - echo "daemon listening on /ip4/127.0.0.1/tcp/5001" >expected && + echo "API server listening on /ip4/127.0.0.1/tcp/5001" >expected && test_cmp_repeat_10_sec expected actual || fsh cat daemon_err '