github.com/zignig/go-ipfs@v0.0.0-20141111235910-c9e5fdf55a52/cmd/ipfs2/daemon.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "net/http" 6 7 ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" 8 manet "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr/net" 9 10 cmds "github.com/jbenet/go-ipfs/commands" 11 cmdsHttp "github.com/jbenet/go-ipfs/commands/http" 12 core "github.com/jbenet/go-ipfs/core" 13 commands "github.com/jbenet/go-ipfs/core/commands2" 14 daemon "github.com/jbenet/go-ipfs/daemon2" 15 ) 16 17 var daemonCmd = &cmds.Command{ 18 Options: []cmds.Option{}, 19 Help: "run a network-connected ipfs node", // TODO adjust copy 20 Subcommands: map[string]*cmds.Command{}, 21 Run: daemonFunc, 22 } 23 24 func daemonFunc(req cmds.Request) (interface{}, error) { 25 ctx := req.Context() 26 27 lock, err := daemon.Lock(ctx.ConfigRoot) 28 if err != nil { 29 return nil, fmt.Errorf("Couldn't obtain lock. Is another daemon already running?") 30 } 31 defer lock.Close() 32 33 node, err := core.NewIpfsNode(ctx.Config, true) 34 if err != nil { 35 return nil, err 36 } 37 ctx.Node = node 38 39 addr, err := ma.NewMultiaddr(ctx.Config.Addresses.API) 40 if err != nil { 41 return nil, err 42 } 43 44 _, host, err := manet.DialArgs(addr) 45 if err != nil { 46 return nil, err 47 } 48 49 cmdHandler := cmdsHttp.NewHandler(*ctx, commands.Root) 50 http.Handle(cmdsHttp.ApiPath+"/", cmdHandler) 51 52 ifpsHandler := &ipfsHandler{node} 53 http.Handle("/ipfs/", ifpsHandler) 54 55 fmt.Printf("API server listening on '%s'\n", host) 56 57 err = http.ListenAndServe(host, nil) 58 if err != nil { 59 return nil, err 60 } 61 62 return nil, nil 63 }