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 {