refactor(core): isolate the complex initialization of PeerHost construction
Brian Tiger Chow committed
Jan 10, 2015 at 20:57 UTC
eb6c40d5dd0db765464f5f06f05a43cb1ffc6a90
1 file changed
+30
-30
core/core.go
+30
-30
@@ -191,9 +191,11 @@ func (n *IpfsNode) StartOnlineServices() error {
191
return err
192
}
193
194
- if err := n.startNetwork(); err != nil {
195
- return err
194
+ peerhost, err := constructPeerHost(ctx, n.ContextGroup, n.Config, n.Identity, n.Peerstore)
195
+ if err != nil {
196
+ return debugerror.Wrap(err)
197
}
198
+ n.PeerHost = peerhost
199
200
// setup diagnostics service
201
n.Diagnostics = diag.NewDiagnostics(n.Identity, n.PeerHost)
@@ -234,34 +236,6 @@ func (n *IpfsNode) StartOnlineServices() error {
236
return nil
237
}
238
237
-func (n *IpfsNode) startNetwork() error {
238
- ctx := n.Context()
239
-
240
- // setup the network
241
- listenAddrs, err := listenAddresses(n.Config)
242
- if err != nil {
243
- return debugerror.Wrap(err)
244
- }
245
- // make sure we dont error out if our config includes some addresses we cant use.
246
- listenAddrs = swarm.FilterAddrs(listenAddrs)
247
- network, err := swarm.NewNetwork(ctx, listenAddrs, n.Identity, n.Peerstore)
248
- if err != nil {
249
- return debugerror.Wrap(err)
250
- }
251
- n.AddChildGroup(network.CtxGroup())
252
- n.PeerHost = p2pbhost.New(network)
253
-
254
- // explicitly set these as our listen addrs.
255
- // (why not do it inside inet.NewNetwork? because this way we can
256
- // listen on addresses without necessarily advertising those publicly.)
257
- addrs, err := n.PeerHost.Network().InterfaceListenAddresses()
258
- if err != nil {
259
- return debugerror.Wrap(err)
260
- }
261
- n.Peerstore.AddAddresses(n.Identity, addrs)
262
- return nil
263
-}
264
-
239
func (n *IpfsNode) teardown() error {
240
if err := n.Datastore.Close(); err != nil {
241
return err
@@ -381,3 +355,29 @@ func listenAddresses(cfg *config.Config) ([]ma.Multiaddr, error) {
355
356
return listen, nil
357
}
358
+
359
+// isolates the complex initialization steps
360
+func constructPeerHost(ctx context.Context, ctxg ctxgroup.ContextGroup, cfg *config.Config, id peer.ID, ps peer.Peerstore) (p2phost.Host, error) {
361
+ listenAddrs, err := listenAddresses(cfg)
362
+ // make sure we dont error out if our config includes some addresses we cant use.
363
+ filteredAddrs := swarm.FilterAddrs(listenAddrs)
364
+ if err != nil {
365
+ return nil, debugerror.Wrap(err)
366
+ }
367
+ network, err := swarm.NewNetwork(ctx, filteredAddrs, id, ps)
368
+ if err != nil {
369
+ return nil, debugerror.Wrap(err)
370
+ }
371
+ ctxg.AddChildGroup(network.CtxGroup())
372
+
373
+ peerhost := p2pbhost.New(network)
374
+ // explicitly set these as our listen addrs.
375
+ // (why not do it inside inet.NewNetwork? because this way we can
376
+ // listen on addresses without necessarily advertising those publicly.)
377
+ addrs, err := peerhost.Network().InterfaceListenAddresses()
378
+ if err != nil {
379
+ return nil, debugerror.Wrap(err)
380
+ }
381
+ ps.AddAddresses(id, addrs)
382
+ return peerhost, nil
383
+}