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  }