From 7b32c11347c7018a7f2ca39d5d362065b8927194 Mon Sep 17 00:00:00 2001 From: Matt Bell <mappum@gmail.com> Date: Thu, 11 Sep 2014 17:22:44 -0700 Subject: [PATCH] core: Refactored node initialization --- core/core.go | 59 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/core/core.go b/core/core.go index b369f2ff..4e06621f 100644 --- a/core/core.go +++ b/core/core.go @@ -69,13 +69,32 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) { return nil, err } - var swap *bitswap.BitSwap + local, err := initIdentity(cfg) + if err != nil { + return nil, err + } + + var ( + net *swarm.Swarm + // TODO: refactor so we can use IpfsRouting interface instead of being DHT-specific + route* dht.IpfsDHT + swap *bitswap.BitSwap + ) + if online { - swap, err = loadBitswap(cfg, d) + net = swarm.NewSwarm(local) + err = net.Listen() if err != nil { return nil, err } + + route = dht.NewDHT(local, net, d) + route.Start() + + swap = bitswap.NewBitSwap(local, net, d, route) swap.SetStrategy(bitswap.YesManStrategy) + + go initConnections(cfg, route) } bs, err := bserv.NewBlockService(d, swap) @@ -85,19 +104,24 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) { dag := &merkledag.DAGService{Blocks: bs} - n := &IpfsNode{ + return &IpfsNode{ Config: cfg, PeerMap: &peer.Map{}, Datastore: d, Blocks: bs, DAG: dag, Resolver: &path.Resolver{DAG: dag}, - } - - return n, nil + BitSwap: swap, + Identity: local, + Routing: route, + }, nil } -func loadBitswap(cfg *config.Config, d ds.Datastore) (*bitswap.BitSwap, error) { +func initIdentity(cfg *config.Config) (*peer.Peer, error) { + if len(cfg.Identity.PeerID) == 0 { + return nil, errors.New("No peer ID in config! (was ipfs init run?)") + } + maddr, err := ma.NewMultiaddr(cfg.Identity.Address) if err != nil { return nil, err @@ -113,26 +137,15 @@ func loadBitswap(cfg *config.Config, d ds.Datastore) (*bitswap.BitSwap, error) { return nil, err } - local := &peer.Peer{ + return &peer.Peer{ ID: peer.ID(b58.Decode(cfg.Identity.PeerID)), Addresses: []*ma.Multiaddr{maddr}, PrivKey: sk, PubKey: sk.GetPublic(), - } - - if len(local.ID) == 0 { - return nil, errors.New("No peer ID in config! (was ipfs init run?)") - } - - net := swarm.NewSwarm(local) - err = net.Listen() - if err != nil { - return nil, err - } - - route := dht.NewDHT(local, net, d) - route.Start() + }, nil +} +func initConnections(cfg *config.Config, route *dht.IpfsDHT) { for _, p := range cfg.Peers { maddr, err := ma.NewMultiaddr(p.Address) if err != nil { @@ -145,8 +158,6 @@ func loadBitswap(cfg *config.Config, d ds.Datastore) (*bitswap.BitSwap, error) { u.PErr("Bootstrapping error: %v\n", err) } } - - return bitswap.NewBitSwap(local, net, d, route), nil } func (n *IpfsNode) PinDagNode(nd *merkledag.Node) error { -- GitLab