@cryptotaxi247 / kubo / commits / 9119435cb

cmd/ipfs: Added gateway server to daemon

Matt Bell committed Dec 10, 2014 at 00:58 UTC 9119435cb68cc8ff37bf8a29cc2b280a4802eb2d
1 file changed +51 -3
cmd/ipfs/daemon.go
+51 -3
@@ -108,6 +108,13 @@ func daemonFunc(req cmds.Request) (interface{}, error) {
108 return nil, err
109 }
110
111 + // ignore error for gateway address
112 + // if there is an error (invalid address), then don't run the gateway
113 + gatewayMaddr, _ := ma.NewMultiaddr(cfg.Addresses.Gateway)
114 + if gatewayMaddr == nil {
115 + fmt.Println("Invalid gateway address, not running gateway")
116 + }
117 +
118 // mount if the user provided the --mount flag
119 mount, _, err := req.Option(mountKwd).Bool()
120 if err != nil {
@@ -138,11 +145,14 @@ func daemonFunc(req cmds.Request) (interface{}, error) {
145 fmt.Printf("IPNS mounted at: %s\n", nsdir)
146 }
147
148 + if gatewayMaddr != nil {
149 + listenAndServeGateway(node, gatewayMaddr)
150 + }
151 +
152 return nil, listenAndServeAPI(node, req, apiMaddr)
153 }
154
155 func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr) error {
145 -
156 _, host, err := manet.DialArgs(addr)
157 if err != nil {
158 return err
@@ -163,7 +173,7 @@ func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr)
173 serverExited := make(chan struct{})
174
175 go func() {
166 - fmt.Printf("daemon listening on %s\n", addr)
176 + fmt.Printf("API server listening on %s\n", addr)
177 serverError = server.ListenAndServe(host, mux)
178 close(serverExited)
179 }()
@@ -176,9 +186,47 @@ func listenAndServeAPI(node *core.IpfsNode, req cmds.Request, addr ma.Multiaddr)
186 case <-node.Closing():
187 log.Infof("daemon at %s terminating...", addr)
188 server.Shutdown <- true
179 - <-serverExited // now, DO wait until server exits
189 + <-serverExited // now, DO wait until server exit
190 }
191
192 log.Infof("daemon at %s terminated", addr)
193 return serverError
194 }
195 +
196 +func listenAndServeGateway(node *core.IpfsNode, addr ma.Multiaddr) error {
197 + _, host, err := manet.DialArgs(addr)
198 + if err != nil {
199 + return err
200 + }
201 +
202 + server := manners.NewServer()
203 + mux := http.NewServeMux()
204 + ifpsHandler := &ipfsHandler{node}
205 + mux.Handle("/ipfs/", ifpsHandler)
206 +
207 + done := make(chan struct{}, 1)
208 + defer func() {
209 + done <- struct{}{}
210 + }()
211 +
212 + // go wait until the node dies
213 + go func() {
214 + select {
215 + case <-node.Closed():
216 + case <-done:
217 + return
218 + }
219 +
220 + log.Infof("terminating gateway at %s...", addr)
221 + server.Shutdown <- true
222 + }()
223 +
224 + fmt.Printf("Gateway listening on %s\n", addr)
225 + go func() {
226 + if err := server.ListenAndServe(host, mux); err != nil {
227 + log.Error(err)
228 + }
229 + }()
230 +
231 + return nil
232 +}