diff --git a/cmd/ipfs/serve.go b/cmd/ipfs/serve.go index 0e2dc9a63..97dae0531 100644 --- a/cmd/ipfs/serve.go +++ b/cmd/ipfs/serve.go @@ -30,16 +30,10 @@ var cmdIpfsServeHttp = &commander.Command{ } func init() { - cmdIpfsServeHttp.Flag.Uint("port", 8080, "Port number") - cmdIpfsServeHttp.Flag.String("hostname", "localhost", "Hostname") + cmdIpfsServeHttp.Flag.String("address", "/ip4/127.0.0.1/tcp/8080", "Listen Address") } func serveHttpCmd(c *commander.Command, _ []string) error { - port := c.Flag.Lookup("port").Value.Get().(uint) - if port < 1 || port > 65535 { - return errors.New("invalid port number") - } - conf, err := getConfigDir(c.Parent.Parent) if err != nil { return err @@ -68,9 +62,12 @@ func serveHttpCmd(c *commander.Command, _ []string) error { go dl.Listen() defer dl.Close() - hostname := c.Flag.Lookup("hostname").Value.Get().(string) - address := fmt.Sprintf("%s:%d", hostname, port) - fmt.Printf("Serving on %s\n", address) + address := c.Flag.Lookup("address").Value.Get().(string) + maddr, err = ma.NewMultiaddr(address) + if err != nil { + return err + } - return h.Serve(address, n) + fmt.Printf("Serving on %s\n", address) + return h.Serve(maddr, n) } diff --git a/server/http/http.go b/server/http/http.go index 591d1660a..75623d5f2 100644 --- a/server/http/http.go +++ b/server/http/http.go @@ -6,7 +6,9 @@ import ( "net/http" "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gorilla/mux" + ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" mh "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash" + core "github.com/jbenet/go-ipfs/core" ) @@ -15,18 +17,23 @@ type handler struct { } // Serve starts the http server -func Serve(address string, node *core.IpfsNode) error { +func Serve(address *ma.Multiaddr, node *core.IpfsNode) error { r := mux.NewRouter() handler := &handler{&ipfsHandler{node}} - r.HandleFunc("/", handler.postHandler).Methods("POST") - r.PathPrefix("/").Handler(handler).Methods("GET") + r.HandleFunc("/ipfs/", handler.postHandler).Methods("POST") + r.PathPrefix("/ipfs/").Handler(handler).Methods("GET") http.Handle("/", r) - return http.ListenAndServe(address, nil) + _, host, err := address.DialArgs() + if err != nil { + return err + } + + return http.ListenAndServe(host, nil) } func (i *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - path := r.URL.Path + path := r.URL.Path[5:] nd, err := i.ResolvePath(path) if err != nil {