@cryptotaxi247 / kubo / commits / 7b32c1134

core: Refactored node initialization

Matt Bell committed Sep 11, 2014 at 17:22 UTC 7b32c11347c7018a7f2ca39d5d362065b8927194
1 file changed +35 -24
core/core.go
+35 -24
@@ -69,13 +69,32 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) {
69 return nil, err
70 }
71
72 - var swap *bitswap.BitSwap
72 + local, err := initIdentity(cfg)
73 + if err != nil {
74 + return nil, err
75 + }
76 +
77 + var (
78 + net *swarm.Swarm
79 + // TODO: refactor so we can use IpfsRouting interface instead of being DHT-specific
80 + route* dht.IpfsDHT
81 + swap *bitswap.BitSwap
82 + )
83 +
84 if online {
74 - swap, err = loadBitswap(cfg, d)
85 + net = swarm.NewSwarm(local)
86 + err = net.Listen()
87 if err != nil {
88 return nil, err
89 }
90 +
91 + route = dht.NewDHT(local, net, d)
92 + route.Start()
93 +
94 + swap = bitswap.NewBitSwap(local, net, d, route)
95 swap.SetStrategy(bitswap.YesManStrategy)
96 +
97 + go initConnections(cfg, route)
98 }
99
100 bs, err := bserv.NewBlockService(d, swap)
@@ -85,19 +104,24 @@ func NewIpfsNode(cfg *config.Config, online bool) (*IpfsNode, error) {
104
105 dag := &merkledag.DAGService{Blocks: bs}
106
88 - n := &IpfsNode{
107 + return &IpfsNode{
108 Config: cfg,
109 PeerMap: &peer.Map{},
110 Datastore: d,
111 Blocks: bs,
112 DAG: dag,
113 Resolver: &path.Resolver{DAG: dag},
95 - }
96 -
97 - return n, nil
114 + BitSwap: swap,
115 + Identity: local,
116 + Routing: route,
117 + }, nil
118 }
119
100 -func loadBitswap(cfg *config.Config, d ds.Datastore) (*bitswap.BitSwap, error) {
120 +func initIdentity(cfg *config.Config) (*peer.Peer, error) {
121 + if len(cfg.Identity.PeerID) == 0 {
122 + return nil, errors.New("No peer ID in config! (was ipfs init run?)")
123 + }
124 +
125 maddr, err := ma.NewMultiaddr(cfg.Identity.Address)
126 if err != nil {
127 return nil, err
@@ -113,26 +137,15 @@ func loadBitswap(cfg *config.Config, d ds.Datastore) (*bitswap.BitSwap, error) {
137 return nil, err
138 }
139
116 - local := &peer.Peer{
140 + return &peer.Peer{
141 ID: peer.ID(b58.Decode(cfg.Identity.PeerID)),
142 Addresses: []*ma.Multiaddr{maddr},
143 PrivKey: sk,
144 PubKey: sk.GetPublic(),
121 - }
122 -
123 - if len(local.ID) == 0 {
124 - return nil, errors.New("No peer ID in config! (was ipfs init run?)")
125 - }
126 -
127 - net := swarm.NewSwarm(local)
128 - err = net.Listen()
129 - if err != nil {
130 - return nil, err
131 - }
132 -
133 - route := dht.NewDHT(local, net, d)
134 - route.Start()
145 + }, nil
146 +}
147
148 +func initConnections(cfg *config.Config, route *dht.IpfsDHT) {
149 for _, p := range cfg.Peers {
150 maddr, err := ma.NewMultiaddr(p.Address)
151 if err != nil {
@@ -145,8 +158,6 @@ func loadBitswap(cfg *config.Config, d ds.Datastore) (*bitswap.BitSwap, error) {
158 u.PErr("Bootstrapping error: %v\n", err)
159 }
160 }
148 -
149 - return bitswap.NewBitSwap(local, net, d, route), nil
161 }
162
163 func (n *IpfsNode) PinDagNode(nd *merkledag.Node) error {