1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-06-29 01:12:24 +08:00

cmd/ipfs: Added gateway server to daemon

This commit is contained in:
Matt Bell
2014-12-10 00:58:18 -08:00
parent 8603e8294f
commit 9119435cb6

View File

@ -108,6 +108,13 @@ func daemonFunc(req cmds.Request) (interface{}, error) {
return nil, err return nil, err
} }
// ignore error for gateway address
// if there is an error (invalid address), then don't run the gateway
gatewayMaddr, _ := ma.NewMultiaddr(cfg.Addresses.Gateway)
if gatewayMaddr == nil {
fmt.Println("Invalid gateway address, not running gateway")
}
// mount if the user provided the --mount flag // mount if the user provided the --mount flag
mount, _, err := req.Option(mountKwd).Bool() mount, _, err := req.Option(mountKwd).Bool()
if err != nil { if err != nil {
@ -138,11 +145,14 @@ func daemonFunc(req cmds.Request) (interface{}, error) {
fmt.Printf("IPNS mounted at: %s\n", nsdir) fmt.Printf("IPNS mounted at: %s\n", nsdir)
} }
if gatewayMaddr != nil {
listenAndServeGateway(node, gatewayMaddr)
}
return nil, listenAndServeAPI(node, req, apiMaddr) return nil, listenAndServeAPI(node, req, apiMaddr)
} }
func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr) error { func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr) error {
_, host, err := manet.DialArgs(addr) _, host, err := manet.DialArgs(addr)
if err != nil { if err != nil {
return err return err
@ -163,7 +173,7 @@ func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr)
serverExited := make(chan struct{}) serverExited := make(chan struct{})
go func() { go func() {
fmt.Printf("daemon listening on %s\n", addr) fmt.Printf("API server listening on %s\n", addr)
serverError = server.ListenAndServe(host, mux) serverError = server.ListenAndServe(host, mux)
close(serverExited) close(serverExited)
}() }()
@ -176,9 +186,47 @@ func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr)
case <-node.Closing(): case <-node.Closing():
log.Infof("daemon at %s terminating...", addr) log.Infof("daemon at %s terminating...", addr)
server.Shutdown <- true server.Shutdown <- true
<-serverExited // now, DO wait until server exits <-serverExited // now, DO wait until server exit
} }
log.Infof("daemon at %s terminated", addr) log.Infof("daemon at %s terminated", addr)
return serverError return serverError
} }
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()
ifpsHandler := &ipfsHandler{node}
mux.Handle("/ipfs/", ifpsHandler)
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
}