@cryptotaxi247 / kubo / commits / eb6c40d5d

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 +}