chore: deprecate go-ipfs-addr
Steven Allen committed
May 31, 2019 at 17:06 UTC
5d468e23ea315811018c3af46e0b29f4355f7d37
10 files changed
+176
-260
core/bootstrap/bootstrap.go
-24
@@ -9,7 +9,6 @@ import (
9
"sync"
10
"time"
11
12
- config "github.com/ipfs/go-ipfs-config"
12
logging "github.com/ipfs/go-log"
13
"github.com/jbenet/goprocess"
14
"github.com/jbenet/goprocess/context"
@@ -216,26 +215,3 @@ func randomSubsetOfPeers(in []peer.AddrInfo, max int) []peer.AddrInfo {
215
}
216
return out
217
}
219
-
220
-type Peers []config.BootstrapPeer
221
-
222
-func (bpeers Peers) ToPeerInfos() []peer.AddrInfo {
223
- pinfos := make(map[peer.ID]*peer.AddrInfo)
224
- for _, bootstrap := range bpeers {
225
- pinfo, ok := pinfos[bootstrap.ID()]
226
- if !ok {
227
- pinfo = new(peer.AddrInfo)
228
- pinfos[bootstrap.ID()] = pinfo
229
- pinfo.ID = bootstrap.ID()
230
- }
231
-
232
- pinfo.Addrs = append(pinfo.Addrs, bootstrap.Transport())
233
- }
234
-
235
- var peers []peer.AddrInfo
236
- for _, pinfo := range pinfos {
237
- peers = append(peers, *pinfo)
238
- }
239
-
240
- return peers
241
-}
core/bootstrap/bootstrap_test.go
-31
@@ -1,10 +1,8 @@
1
package bootstrap
2
3
import (
4
- "fmt"
4
"testing"
5
7
- config "github.com/ipfs/go-ipfs-config"
6
"github.com/libp2p/go-libp2p-core/peer"
7
"github.com/libp2p/go-libp2p-core/test"
8
)
@@ -25,32 +23,3 @@ func TestSubsetWhenMaxIsGreaterThanLengthOfSlice(t *testing.T) {
23
t.Fail()
24
}
25
}
28
-
29
-func TestMultipleAddrsPerPeer(t *testing.T) {
30
- var bsps []config.BootstrapPeer
31
- for i := 0; i < 10; i++ {
32
- pid, err := test.RandPeerID()
33
- if err != nil {
34
- t.Fatal(err)
35
- }
36
-
37
- addr := fmt.Sprintf("/ip4/127.0.0.1/tcp/5001/ipfs/%s", pid.Pretty())
38
- bsp1, err := config.ParseBootstrapPeer(addr)
39
- if err != nil {
40
- t.Fatal(err)
41
- }
42
-
43
- addr = fmt.Sprintf("/ip4/127.0.0.1/udp/5002/utp/ipfs/%s", pid.Pretty())
44
- bsp2, err := config.ParseBootstrapPeer(addr)
45
- if err != nil {
46
- t.Fatal(err)
47
- }
48
-
49
- bsps = append(bsps, bsp1, bsp2)
50
- }
51
-
52
- pinfos := Peers.ToPeerInfos(bsps)
53
- if len(pinfos) != len(bsps)/2 {
54
- t.Fatal("expected fewer peers")
55
- }
56
-}
core/commands/bootstrap.go
+75
-55
@@ -2,6 +2,7 @@ package commands
2
3
import (
4
"errors"
5
+ "fmt"
6
"io"
7
"sort"
8
@@ -11,6 +12,8 @@ import (
12
13
cmds "github.com/ipfs/go-ipfs-cmds"
14
config "github.com/ipfs/go-ipfs-config"
15
+ peer "github.com/libp2p/go-libp2p-core/peer"
16
+ ma "github.com/multiformats/go-multiaddr"
17
)
18
19
type BootstrapOutput struct {
@@ -64,26 +67,13 @@ in the bootstrap list).
67
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
68
deflt, _ := req.Options[defaultOptionName].(bool)
69
67
- var inputPeers []config.BootstrapPeer
68
- if deflt {
69
- // parse separately for meaningful, correct error.
70
- defltPeers, err := config.DefaultBootstrapPeers()
71
- if err != nil {
72
- return err
73
- }
74
-
75
- inputPeers = defltPeers
76
- } else {
70
+ inputPeers := config.DefaultBootstrapAddresses
71
+ if !deflt {
72
if err := req.ParseBodyArgs(); err != nil {
73
return err
74
}
75
81
- parsedPeers, err := config.ParseBootstrapPeers(req.Arguments)
82
- if err != nil {
83
- return err
84
- }
85
-
86
- inputPeers = parsedPeers
76
+ inputPeers = req.Arguments
77
}
78
79
if len(inputPeers) == 0 {
@@ -110,7 +100,7 @@ in the bootstrap list).
100
return err
101
}
102
113
- return cmds.EmitOnce(res, &BootstrapOutput{config.BootstrapPeerStrings(added)})
103
+ return cmds.EmitOnce(res, &BootstrapOutput{added})
104
},
105
Type: BootstrapOutput{},
106
Encoders: cmds.EncoderMap{
@@ -127,11 +117,6 @@ var bootstrapAddDefaultCmd = &cmds.Command{
117
in the bootstrap list).`,
118
},
119
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
130
- defltPeers, err := config.DefaultBootstrapPeers()
131
- if err != nil {
132
- return err
133
- }
134
-
120
cfgRoot, err := cmdenv.GetConfigRoot(env)
121
if err != nil {
122
return err
@@ -148,12 +133,12 @@ in the bootstrap list).`,
133
return err
134
}
135
151
- added, err := bootstrapAdd(r, cfg, defltPeers)
136
+ added, err := bootstrapAdd(r, cfg, config.DefaultBootstrapAddresses)
137
if err != nil {
138
return err
139
}
140
156
- return cmds.EmitOnce(res, &BootstrapOutput{config.BootstrapPeerStrings(added)})
141
+ return cmds.EmitOnce(res, &BootstrapOutput{added})
142
},
143
Type: BootstrapOutput{},
144
Encoders: cmds.EncoderMap{
@@ -201,26 +186,20 @@ var bootstrapRemoveCmd = &cmds.Command{
186
return err
187
}
188
204
- var removed []config.BootstrapPeer
189
+ var removed []string
190
if all {
191
removed, err = bootstrapRemoveAll(r, cfg)
192
} else {
193
if err := req.ParseBodyArgs(); err != nil {
194
return err
195
}
211
-
212
- input, perr := config.ParseBootstrapPeers(req.Arguments)
213
- if perr != nil {
214
- return perr
215
- }
216
-
217
- removed, err = bootstrapRemove(r, cfg, input)
196
+ removed, err = bootstrapRemove(r, cfg, req.Arguments)
197
}
198
if err != nil {
199
return err
200
}
201
223
- return cmds.EmitOnce(res, &BootstrapOutput{config.BootstrapPeerStrings(removed)})
202
+ return cmds.EmitOnce(res, &BootstrapOutput{removed})
203
},
204
Type: BootstrapOutput{},
205
Encoders: cmds.EncoderMap{
@@ -257,7 +236,7 @@ var bootstrapRemoveAllCmd = &cmds.Command{
236
return err
237
}
238
260
- return cmds.EmitOnce(res, &BootstrapOutput{config.BootstrapPeerStrings(removed)})
239
+ return cmds.EmitOnce(res, &BootstrapOutput{removed})
240
},
241
Type: BootstrapOutput{},
242
Encoders: cmds.EncoderMap{
@@ -315,23 +294,36 @@ func bootstrapWritePeers(w io.Writer, prefix string, peers []string) error {
294
return nil
295
}
296
318
-func bootstrapAdd(r repo.Repo, cfg *config.Config, peers []config.BootstrapPeer) ([]config.BootstrapPeer, error) {
297
+func bootstrapAdd(r repo.Repo, cfg *config.Config, peers []string) ([]string, error) {
298
+ for _, p := range peers {
299
+ m, err := ma.NewMultiaddr(p)
300
+ if err != nil {
301
+ return nil, err
302
+ }
303
+ tpt, p2ppart := ma.SplitLast(m)
304
+ if p2ppart == nil || p2ppart.Protocol().Code != ma.P_P2P {
305
+ return nil, fmt.Errorf("invalid bootstrap address: %s", p)
306
+ }
307
+ if tpt == nil {
308
+ return nil, fmt.Errorf("bootstrap address without a transport: %s", p)
309
+ }
310
+ }
311
+
312
addedMap := map[string]struct{}{}
320
- addedList := make([]config.BootstrapPeer, 0, len(peers))
313
+ addedList := make([]string, 0, len(peers))
314
315
// re-add cfg bootstrap peers to rm dupes
316
bpeers := cfg.Bootstrap
317
cfg.Bootstrap = nil
318
319
// add new peers
327
- for _, peer := range peers {
328
- s := peer.String()
320
+ for _, s := range peers {
321
if _, found := addedMap[s]; found {
322
continue
323
}
324
325
cfg.Bootstrap = append(cfg.Bootstrap, s)
334
- addedList = append(addedList, peer)
326
+ addedList = append(addedList, s)
327
addedMap[s] = struct{}{}
328
}
329
@@ -352,27 +344,56 @@ func bootstrapAdd(r repo.Repo, cfg *config.Config, peers []config.BootstrapPeer)
344
return addedList, nil
345
}
346
355
-func bootstrapRemove(r repo.Repo, cfg *config.Config, toRemove []config.BootstrapPeer) ([]config.BootstrapPeer, error) {
356
- removed := make([]config.BootstrapPeer, 0, len(toRemove))
357
- keep := make([]config.BootstrapPeer, 0, len(cfg.Bootstrap))
347
+func bootstrapRemove(r repo.Repo, cfg *config.Config, toRemove []string) ([]string, error) {
348
+ removed := make([]peer.AddrInfo, 0, len(toRemove))
349
+ keep := make([]peer.AddrInfo, 0, len(cfg.Bootstrap))
350
+
351
+ toRemoveAddr, err := config.ParseBootstrapPeers(toRemove)
352
+ if err != nil {
353
+ return nil, err
354
+ }
355
+ toRemoveMap := make(map[peer.ID][]ma.Multiaddr, len(toRemoveAddr))
356
+ for _, addr := range toRemoveAddr {
357
+ toRemoveMap[addr.ID] = addr.Addrs
358
+ }
359
360
peers, err := cfg.BootstrapPeers()
361
if err != nil {
362
return nil, err
363
}
364
364
- for _, peer := range peers {
365
- found := false
366
- for _, peer2 := range toRemove {
367
- if peer.Equal(peer2) {
368
- found = true
369
- removed = append(removed, peer)
370
- break
365
+ for _, p := range peers {
366
+ addrs, ok := toRemoveMap[p.ID]
367
+ // not in the remove set?
368
+ if !ok {
369
+ keep = append(keep, p)
370
+ continue
371
+ }
372
+ // remove the entire peer?
373
+ if len(addrs) == 0 {
374
+ removed = append(removed, p)
375
+ continue
376
+ }
377
+ var (
378
+ keptAddrs, removedAddrs []ma.Multiaddr
379
+ )
380
+ // remove specific addresses
381
+ filter:
382
+ for _, addr := range p.Addrs {
383
+ for _, addr2 := range addrs {
384
+ if addr.Equal(addr2) {
385
+ removedAddrs = append(removedAddrs, addr)
386
+ continue filter
387
+ }
388
}
389
+ keptAddrs = append(keptAddrs, addr)
390
+ }
391
+ if len(removedAddrs) > 0 {
392
+ removed = append(removed, peer.AddrInfo{ID: p.ID, Addrs: removedAddrs})
393
}
394
374
- if !found {
375
- keep = append(keep, peer)
395
+ if len(keptAddrs) > 0 {
396
+ keep = append(keep, peer.AddrInfo{ID: p.ID, Addrs: keptAddrs})
397
}
398
}
399
cfg.SetBootstrapPeers(keep)
@@ -381,10 +402,10 @@ func bootstrapRemove(r repo.Repo, cfg *config.Config, toRemove []config.Bootstra
402
return nil, err
403
}
404
384
- return removed, nil
405
+ return config.BootstrapPeerStrings(removed), nil
406
}
407
387
-func bootstrapRemoveAll(r repo.Repo, cfg *config.Config) ([]config.BootstrapPeer, error) {
408
+func bootstrapRemoveAll(r repo.Repo, cfg *config.Config) ([]string, error) {
409
removed, err := cfg.BootstrapPeers()
410
if err != nil {
411
return nil, err
@@ -394,8 +415,7 @@ func bootstrapRemoveAll(r repo.Repo, cfg *config.Config) ([]config.BootstrapPeer
415
if err := r.SetConfig(cfg); err != nil {
416
return nil, err
417
}
397
-
398
- return removed, nil
418
+ return config.BootstrapPeerStrings(removed), nil
419
}
420
421
const bootstrapSecurityWarning = `
core/commands/p2p.go
+34
-26
@@ -14,8 +14,8 @@ import (
14
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
15
p2p "github.com/ipfs/go-ipfs/p2p"
16
17
- ipfsaddr "github.com/ipfs/go-ipfs-addr"
17
cmds "github.com/ipfs/go-ipfs-cmds"
18
+ peer "github.com/libp2p/go-libp2p-core/peer"
19
pstore "github.com/libp2p/go-libp2p-core/peerstore"
20
protocol "github.com/libp2p/go-libp2p-core/protocol"
21
ma "github.com/multiformats/go-multiaddr"
@@ -133,37 +133,49 @@ Example:
133
}
134
135
// parseIpfsAddr is a function that takes in addr string and return ipfsAddrs
136
-func parseIpfsAddr(addr string) ([]ipfsaddr.IPFSAddr, error) {
137
- mutiladdr, err := ma.NewMultiaddr(addr)
136
+func parseIpfsAddr(addr string) (*peer.AddrInfo, error) {
137
+ multiaddr, err := ma.NewMultiaddr(addr)
138
if err != nil {
139
return nil, err
140
}
141
- if _, err := mutiladdr.ValueForProtocol(ma.P_IPFS); err == nil {
142
- iaddrs := make([]ipfsaddr.IPFSAddr, 1)
143
- iaddrs[0], err = ipfsaddr.ParseMultiaddr(mutiladdr)
144
- if err != nil {
145
- return nil, err
146
- }
147
- return iaddrs, nil
141
+
142
+ pi, err := peer.AddrInfoFromP2pAddr(multiaddr)
143
+ if err == nil {
144
+ return pi, nil
145
}
149
- // resolve mutiladdr whose protocol is not ma.P_IPFS
146
+
147
+ // resolve multiaddr whose protocol is not ma.P_IPFS
148
ctx, cancel := context.WithTimeout(context.Background(), resolveTimeout)
149
defer cancel()
152
- addrs, err := madns.Resolve(ctx, mutiladdr)
150
+ addrs, err := madns.Resolve(ctx, multiaddr)
151
if err != nil {
152
return nil, err
153
}
154
if len(addrs) == 0 {
157
- return nil, errors.New("fail to resolve the multiaddr:" + mutiladdr.String())
155
+ return nil, errors.New("fail to resolve the multiaddr:" + multiaddr.String())
156
}
159
- iaddrs := make([]ipfsaddr.IPFSAddr, len(addrs))
160
- for i, addr := range addrs {
161
- iaddrs[i], err = ipfsaddr.ParseMultiaddr(addr)
162
- if err != nil {
163
- return nil, err
157
+ var info peer.AddrInfo
158
+ for _, addr := range addrs {
159
+ taddr, id := peer.SplitAddr(addr)
160
+ if id == "" {
161
+ // not an ipfs addr, skipping.
162
+ continue
163
+ }
164
+ switch info.ID {
165
+ case "":
166
+ info.ID = id
167
+ case id:
168
+ default:
169
+ return nil, fmt.Errorf(
170
+ "ambiguous multiaddr %s could refer to %s or %s",
171
+ multiaddr,
172
+ info.ID,
173
+ id,
174
+ )
175
}
176
+ info.Addrs = append(info.Addrs, taddr)
177
}
166
- return iaddrs, nil
178
+ return &info, nil
179
}
180
181
var p2pListenCmd = &cmds.Command{
@@ -256,14 +268,10 @@ func checkPort(target ma.Multiaddr) error {
268
}
269
270
// forwardLocal forwards local connections to a libp2p service
259
-func forwardLocal(ctx context.Context, p *p2p.P2P, ps pstore.Peerstore, proto protocol.ID, bindAddr ma.Multiaddr, addrs []ipfsaddr.IPFSAddr) error {
260
- for _, addr := range addrs {
261
- ps.AddAddr(addr.ID(), addr.Multiaddr(), pstore.TempAddrTTL)
262
- }
271
+func forwardLocal(ctx context.Context, p *p2p.P2P, ps pstore.Peerstore, proto protocol.ID, bindAddr ma.Multiaddr, addr *peer.AddrInfo) error {
272
+ ps.AddAddrs(addr.ID, addr.Addrs, pstore.TempAddrTTL)
273
// TODO: return some info
264
- // the length of the addrs must large than 0
265
- // peerIDs in addr must be the same and choose addr[0] to connect
266
- _, err := p.ForwardLocal(ctx, addrs[0].ID(), proto, bindAddr)
274
+ _, err := p.ForwardLocal(ctx, addr.ID, proto, bindAddr)
275
return err
276
}
277
core/commands/ping.go
+6
-3
@@ -10,7 +10,6 @@ import (
10
11
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
12
13
- iaddr "github.com/ipfs/go-ipfs-addr"
13
cmds "github.com/ipfs/go-ipfs-cmds"
14
peer "github.com/libp2p/go-libp2p-core/peer"
15
pstore "github.com/libp2p/go-libp2p-core/peerstore"
@@ -207,11 +206,15 @@ trip latency information.
206
func ParsePeerParam(text string) (ma.Multiaddr, peer.ID, error) {
207
// Multiaddr
208
if strings.HasPrefix(text, "/") {
210
- a, err := iaddr.ParseString(text)
209
+ maddr, err := ma.NewMultiaddr(text)
210
if err != nil {
211
return nil, "", err
212
}
214
- return a.Transport(), a.ID(), nil
213
+ transport, id := peer.SplitAddr(maddr)
214
+ if id == "" {
215
+ return nil, "", peer.ErrInvalidAddr
216
+ }
217
+ return transport, id, nil
218
}
219
// Raw peer ID
220
p, err := peer.IDB58Decode(text)
core/commands/swarm.go
+28
-62
@@ -15,7 +15,6 @@ import (
15
repo "github.com/ipfs/go-ipfs/repo"
16
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
17
18
- iaddr "github.com/ipfs/go-ipfs-addr"
18
cmds "github.com/ipfs/go-ipfs-cmds"
19
config "github.com/ipfs/go-ipfs-config"
20
inet "github.com/libp2p/go-libp2p-core/network"
@@ -369,7 +368,7 @@ ipfs swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3
368
369
addrs := req.Arguments
370
372
- pis, err := peersWithAddresses(req.Context, addrs)
371
+ pis, err := parseAddresses(req.Context, addrs)
372
if err != nil {
373
return err
374
}
@@ -415,19 +414,34 @@ it will reconnect.
414
return err
415
}
416
418
- iaddrs, err := parseAddresses(req.Arguments)
417
+ addrs, err := parseAddresses(req.Context, req.Arguments)
418
if err != nil {
419
return err
420
}
421
423
- output := make([]string, len(iaddrs))
424
- for i, addr := range iaddrs {
425
- output[i] = "disconnect " + addr.ID().Pretty()
426
-
427
- if err := api.Swarm().Disconnect(req.Context, addr.Multiaddr()); err != nil {
428
- output[i] += " failure: " + err.Error()
429
- } else {
430
- output[i] += " success"
422
+ output := make([]string, 0, len(addrs))
423
+ for _, ainfo := range addrs {
424
+ maddrs, err := peer.AddrInfoToP2pAddrs(&ainfo)
425
+ if err != nil {
426
+ return err
427
+ }
428
+ // FIXME: This will print:
429
+ //
430
+ // disconnect QmFoo success
431
+ // disconnect QmFoo success
432
+ // ...
433
+ //
434
+ // Once per address specified. However, I'm not sure of
435
+ // a good backwards compat solution. Right now, I'm just
436
+ // preserving the current behavior.
437
+ for _, addr := range maddrs {
438
+ msg := "disconnect " + ainfo.ID.Pretty()
439
+ if err := api.Swarm().Disconnect(req.Context, addr); err != nil {
440
+ msg += " failure: " + err.Error()
441
+ } else {
442
+ msg += " success"
443
+ }
444
+ output = append(output, msg)
445
}
446
}
447
return cmds.EmitOnce(res, &stringList{output})
@@ -439,63 +453,15 @@ it will reconnect.
453
}
454
455
// parseAddresses is a function that takes in a slice of string peer addresses
442
-// (multiaddr + peerid) and returns slices of multiaddrs and peerids.
443
-func parseAddresses(addrs []string) (iaddrs []iaddr.IPFSAddr, err error) {
444
- iaddrs = make([]iaddr.IPFSAddr, len(addrs))
445
- for i, saddr := range addrs {
446
- iaddrs[i], err = iaddr.ParseString(saddr)
447
- if err != nil {
448
- return nil, cmds.ClientError("invalid peer address: " + err.Error())
449
- }
450
- }
451
- return
452
-}
453
-
454
-// parseMultiaddrs is a function that takes in a slice of peer multiaddr
455
-// and returns slices of multiaddrs and peerids
456
-func parseMultiaddrs(maddrs []ma.Multiaddr) (iaddrs []iaddr.IPFSAddr, err error) {
457
- iaddrs = make([]iaddr.IPFSAddr, len(maddrs))
458
- for i, maddr := range maddrs {
459
- iaddrs[i], err = iaddr.ParseMultiaddr(maddr)
460
- if err != nil {
461
- return nil, cmds.ClientError("invalid peer address: " + err.Error())
462
- }
463
- }
464
- return
465
-}
466
-
467
-// peersWithAddresses is a function that takes in a slice of string peer addresses
456
// (multiaddr + peerid) and returns a slice of properly constructed peers
469
-func peersWithAddresses(ctx context.Context, addrs []string) ([]peer.AddrInfo, error) {
457
+func parseAddresses(ctx context.Context, addrs []string) ([]peer.AddrInfo, error) {
458
// resolve addresses
459
maddrs, err := resolveAddresses(ctx, addrs)
460
if err != nil {
461
return nil, err
462
}
463
476
- iaddrs, err := parseMultiaddrs(maddrs)
477
- if err != nil {
478
- return nil, err
479
- }
480
-
481
- peers := make(map[peer.ID][]ma.Multiaddr, len(iaddrs))
482
- for _, iaddr := range iaddrs {
483
- id := iaddr.ID()
484
- current, ok := peers[id]
485
- if tpt := iaddr.Transport(); tpt != nil {
486
- peers[id] = append(current, tpt)
487
- } else if !ok {
488
- peers[id] = nil
489
- }
490
- }
491
- pis := make([]peer.AddrInfo, 0, len(peers))
492
- for id, maddrs := range peers {
493
- pis = append(pis, peer.AddrInfo{
494
- ID: id,
495
- Addrs: maddrs,
496
- })
497
- }
498
- return pis, nil
464
+ return peer.AddrInfosFromP2pAddrs(maddrs...)
465
}
466
467
// resolveAddresses resolves addresses parallelly
@@ -531,7 +497,7 @@ func resolveAddresses(ctx context.Context, addrs []string) ([]ma.Multiaddr, erro
497
// filter out addresses that still doesn't end in `ipfs/Qm...`
498
found := 0
499
for _, raddr := range raddrs {
534
- if _, last := ma.SplitLast(raddr); last.Protocol().Code == ma.P_IPFS {
500
+ if _, last := ma.SplitLast(raddr); last != nil && last.Protocol().Code == ma.P_IPFS {
501
maddrC <- raddr
502
found++
503
}
core/core.go
+1
-5
@@ -166,11 +166,7 @@ func (n *IpfsNode) loadBootstrapPeers() ([]peer.AddrInfo, error) {
166
return nil, err
167
}
168
169
- parsed, err := cfg.BootstrapPeers()
170
- if err != nil {
171
- return nil, err
172
- }
173
- return bootstrap.Peers.ToPeerInfos(parsed), nil
169
+ return cfg.BootstrapPeers()
170
}
171
172
type ConstructPeerHostOpts struct {
core/coreapi/swarm.go
+12
-18
@@ -5,7 +5,6 @@ import (
5
"sort"
6
"time"
7
8
- iaddr "github.com/ipfs/go-ipfs-addr"
8
coreiface "github.com/ipfs/interface-go-ipfs-core"
9
inet "github.com/libp2p/go-libp2p-core/network"
10
peer "github.com/libp2p/go-libp2p-core/peer"
@@ -52,34 +51,29 @@ func (api *SwarmAPI) Disconnect(ctx context.Context, addr ma.Multiaddr) error {
51
return coreiface.ErrOffline
52
}
53
55
- ia, err := iaddr.ParseMultiaddr(ma.Multiaddr(addr))
56
- if err != nil {
57
- return err
54
+ taddr, id := peer.SplitAddr(addr)
55
+ if id == "" {
56
+ return peer.ErrInvalidAddr
57
}
58
60
- taddr := ia.Transport()
61
- id := ia.ID()
59
net := api.peerHost.Network()
63
-
60
if taddr == nil {
61
if net.Connectedness(id) != inet.Connected {
62
return coreiface.ErrNotConnected
67
- } else if err := net.ClosePeer(id); err != nil {
63
+ }
64
+ if err := net.ClosePeer(id); err != nil {
65
return err
66
}
70
- } else {
71
- for _, conn := range net.ConnsToPeer(id) {
72
- if !conn.RemoteMultiaddr().Equal(taddr) {
73
- continue
74
- }
75
-
76
- return conn.Close()
67
+ return nil
68
+ }
69
+ for _, conn := range net.ConnsToPeer(id) {
70
+ if !conn.RemoteMultiaddr().Equal(taddr) {
71
+ continue
72
}
73
79
- return coreiface.ErrConnNotFound
74
+ return conn.Close()
75
}
81
-
82
- return nil
76
+ return coreiface.ErrConnNotFound
77
}
78
79
func (api *SwarmAPI) KnownAddrs(context.Context) (map[peer.ID][]ma.Multiaddr, error) {
go.mod
+3
-4
@@ -30,12 +30,11 @@ require (
30
github.com/ipfs/go-ds-leveldb v0.0.2
31
github.com/ipfs/go-ds-measure v0.0.1
32
github.com/ipfs/go-fs-lock v0.0.1
33
- github.com/ipfs/go-ipfs-addr v0.0.1
33
github.com/ipfs/go-ipfs-blockstore v0.0.1
34
github.com/ipfs/go-ipfs-blocksutil v0.0.1
35
github.com/ipfs/go-ipfs-chunker v0.0.1
36
github.com/ipfs/go-ipfs-cmds v0.0.8
38
- github.com/ipfs/go-ipfs-config v0.0.4
37
+ github.com/ipfs/go-ipfs-config v0.0.5
38
github.com/ipfs/go-ipfs-ds-help v0.0.1
39
github.com/ipfs/go-ipfs-exchange-interface v0.0.1
40
github.com/ipfs/go-ipfs-exchange-offline v0.0.1
@@ -58,7 +57,7 @@ require (
57
github.com/ipfs/hang-fds v0.0.1
58
github.com/ipfs/interface-go-ipfs-core v0.1.0
59
github.com/ipfs/iptb v1.4.0
61
- github.com/ipfs/iptb-plugins v0.0.2
60
+ github.com/ipfs/iptb-plugins v0.1.0
61
github.com/jbenet/go-is-domain v1.0.2
62
github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c
63
github.com/jbenet/go-random-files v0.0.0-20190219210431-31b3f20ebded
@@ -68,7 +67,7 @@ require (
67
github.com/libp2p/go-libp2p-autonat-svc v0.1.0
68
github.com/libp2p/go-libp2p-circuit v0.1.0
69
github.com/libp2p/go-libp2p-connmgr v0.1.0
71
- github.com/libp2p/go-libp2p-core v0.0.2
70
+ github.com/libp2p/go-libp2p-core v0.0.3
71
github.com/libp2p/go-libp2p-kad-dht v0.1.0
72
github.com/libp2p/go-libp2p-kbucket v0.2.0
73
github.com/libp2p/go-libp2p-loggables v0.1.0
go.sum
+17
-32
@@ -23,7 +23,6 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF
23
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
24
github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
25
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
26
-github.com/bifurcation/mint v0.0.0-20181105073638-824af6541065/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU=
26
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
27
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
28
github.com/bren2010/proquint v0.0.0-20160323162903-38337c27106d h1:QgeLLoPD3kRVmeu/1al9iIpIANMi9O1zXFm8BnYGCJg=
@@ -193,7 +192,6 @@ github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0r
192
github.com/ipfs/dir-index-html v1.0.3 h1:cKdOjJBKJgewgcv97zOlqsNOle52N91d3nAkbQadnuY=
193
github.com/ipfs/dir-index-html v1.0.3/go.mod h1:TG9zbaH/+4MnkGel0xF4SLNhk+YZvBNo6jjBkO/LaWc=
194
github.com/ipfs/go-bitswap v0.0.3/go.mod h1:jadAZYsP/tcRMl47ZhFxhaNuDQoXawT8iHMg+iFoQbg=
196
-github.com/ipfs/go-bitswap v0.0.9 h1:Dy0qvYlaOd2E2FOL2gApJ21qVjepJsGNNfstLrGf+0I=
195
github.com/ipfs/go-bitswap v0.0.9/go.mod h1:kAPf5qgn2W2DrgAcscZ3HrM9qh4pH+X8Fkk3UPrwvis=
196
github.com/ipfs/go-bitswap v0.1.0 h1:28YsHYw9ut6wootnImPXH0WpnU5Dbo3qm6cvQ6e6wYY=
197
github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSAE1wsxj0=
@@ -230,8 +228,6 @@ github.com/ipfs/go-ds-measure v0.0.1 h1:PrCueug+yZLkDCOthZTXKinuoCal/GvlAT7cNxzr
228
github.com/ipfs/go-ds-measure v0.0.1/go.mod h1:wiH6bepKsgyNKpz3nyb4erwhhIVpIxnZbsjN1QpVbbE=
229
github.com/ipfs/go-fs-lock v0.0.1 h1:XHX8uW4jQBYWHj59XXcjg7BHlHxV9ZOYs6Y43yb7/l0=
230
github.com/ipfs/go-fs-lock v0.0.1/go.mod h1:DNBekbboPKcxs1aukPSaOtFA3QfSdi5C855v0i9XJ8Y=
233
-github.com/ipfs/go-ipfs-addr v0.0.1 h1:DpDFybnho9v3/a1dzJ5KnWdThWD1HrFLpQ+tWIyBaFI=
234
-github.com/ipfs/go-ipfs-addr v0.0.1/go.mod h1:uKTDljHT3Q3SUWzDLp3aYUi8MrY32fgNgogsIa0npjg=
231
github.com/ipfs/go-ipfs-blockstore v0.0.1 h1:O9n3PbmTYZoNhkgkEyrXTznbmktIXif62xLX+8dPHzc=
232
github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08=
233
github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ=
@@ -240,9 +236,8 @@ github.com/ipfs/go-ipfs-chunker v0.0.1 h1:cHUUxKFQ99pozdahi+uSC/3Y6HeRpi9oTeUHbE
236
github.com/ipfs/go-ipfs-chunker v0.0.1/go.mod h1:tWewYK0we3+rMbOh7pPFGDyypCtvGcBFymgY4rSDLAw=
237
github.com/ipfs/go-ipfs-cmds v0.0.8 h1:ZMo0ZeQOr10ZKY4yxYA3lRHUbnF/ZYcV9cpU0IrlGFI=
238
github.com/ipfs/go-ipfs-cmds v0.0.8/go.mod h1:TiK4e7/V31tuEb8YWDF8lN3qrnDH+BS7ZqWIeYJlAs8=
243
-github.com/ipfs/go-ipfs-config v0.0.1/go.mod h1:KDbHjNyg4e6LLQSQpkgQMBz6Jf4LXiWAcmnkcwmH0DU=
244
-github.com/ipfs/go-ipfs-config v0.0.4 h1:zOWk1gGvIOptjHvvu0qSC8psB2IBKO/FbQArFnmm0LM=
245
-github.com/ipfs/go-ipfs-config v0.0.4/go.mod h1:KDbHjNyg4e6LLQSQpkgQMBz6Jf4LXiWAcmnkcwmH0DU=
239
+github.com/ipfs/go-ipfs-config v0.0.5 h1:D9ek19anOzm8iYPvezeeamSg5mzwqKPb2jyAyJZT/4A=
240
+github.com/ipfs/go-ipfs-config v0.0.5/go.mod h1:IGkVTacurWv9WFKc7IBPjHGM/7hi6+PEClqUb/l2BIM=
241
github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
242
github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ=
243
github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
@@ -307,8 +302,8 @@ github.com/ipfs/interface-go-ipfs-core v0.1.0 h1:4LD2TJThswXVMJgAji9k9PyPsOGNtmd
302
github.com/ipfs/interface-go-ipfs-core v0.1.0/go.mod h1:h1zJvvfh9dcNU0bK+Jag516LputHLKQkHsDP+z0dz4A=
303
github.com/ipfs/iptb v1.4.0 h1:YFYTrCkLMRwk/35IMyC6+yjoQSHTEcNcefBStLJzgvo=
304
github.com/ipfs/iptb v1.4.0/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg=
310
-github.com/ipfs/iptb-plugins v0.0.2 h1:JZp4h/+7f00dY4Epr8gzF+VqKITXmVGsZabvmZp7E9I=
311
-github.com/ipfs/iptb-plugins v0.0.2/go.mod h1:Vud+X6lHv5QlgVbqCPBHt91I0gPIRgmkD6/tMUsI07U=
305
+github.com/ipfs/iptb-plugins v0.1.0 h1:9/PTKJX+rB2qqXkaX/3IDxLSHTBwMMvFrYEf7g2mFo8=
306
+github.com/ipfs/iptb-plugins v0.1.0/go.mod h1:gE+R5nCAM9+Cajd1UhIBk8k7CZus7IG8FFXE0lHvJx0=
307
github.com/jackpal/gateway v1.0.4/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA=
308
github.com/jackpal/gateway v1.0.5 h1:qzXWUJfuMdlLMtt0a3Dgt+xkWQiA5itDEITVJtuSwMc=
309
github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA=
@@ -317,7 +312,6 @@ github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+
312
github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs=
313
github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc=
314
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
320
-github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
315
github.com/jbenet/go-is-domain v1.0.2 h1:11r5MSptcNFZyBoqubBQnVMUKRWLuRjL1banaIk+iYo=
316
github.com/jbenet/go-is-domain v1.0.2/go.mod h1:xbRLRb0S7FgzDBTJlguhDVwLYM/5yNtvktxj2Ttfy7Q=
317
github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c h1:uUx61FiAa1GI6ZmVd2wf2vULeQZIKG66eybjNXKYCz4=
@@ -371,7 +365,6 @@ github.com/libp2p/go-libp2p-autonat v0.0.2/go.mod h1:fs71q5Xk+pdnKU014o2iq1RhMs9
365
github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE=
366
github.com/libp2p/go-libp2p-autonat v0.1.0 h1:aCWAu43Ri4nU0ZPO7NyLzUvvfqd0nE3dX0R/ZGYVgOU=
367
github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8=
374
-github.com/libp2p/go-libp2p-autonat-svc v0.0.2/go.mod h1:j4iMiw0d3diRm5iB0noXumtb0mPvWrM1qAyh640cp8w=
368
github.com/libp2p/go-libp2p-autonat-svc v0.1.0 h1:28IM7iWMDclZeVkpiFQaWVANwXwE7zLlpbnS7yXxrfs=
369
github.com/libp2p/go-libp2p-autonat-svc v0.1.0/go.mod h1:fqi8Obl/z3R4PFVLm8xFtZ6PBL9MlV/xumymRFkKq5A=
370
github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc=
@@ -381,33 +374,30 @@ github.com/libp2p/go-libp2p-circuit v0.0.1/go.mod h1:Dqm0s/BiV63j8EEAs8hr1H5Hudq
374
github.com/libp2p/go-libp2p-circuit v0.0.9/go.mod h1:uU+IBvEQzCu953/ps7bYzC/D/R0Ho2A9LfKVVCatlqU=
375
github.com/libp2p/go-libp2p-circuit v0.1.0 h1:eniLL3Y9aq/sryfyV1IAHj5rlvuyj3b7iz8tSiZpdhY=
376
github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8=
384
-github.com/libp2p/go-libp2p-connmgr v0.0.1/go.mod h1:eUBBlbuwBBTd/eim7KV5x0fOD2UHDjSwhzmBL6miIx8=
377
github.com/libp2p/go-libp2p-connmgr v0.1.0 h1:vp0t0F0EuT3rrlTtnMnIyyzCnly7nIlRoEbhJpgp0qU=
378
github.com/libp2p/go-libp2p-connmgr v0.1.0/go.mod h1:wZxh8veAmU5qdrfJ0ZBLcU8oJe9L82ciVP/fl1VHjXk=
379
github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco=
380
github.com/libp2p/go-libp2p-core v0.0.2 h1:86uOwW+O6Uc7NbaK4diuLZo2/Ikvqw2rgyV03VcSbLE=
381
github.com/libp2p/go-libp2p-core v0.0.2/go.mod h1:9dAcntw/n46XycV4RnlBq3BpgrmyUi9LuoTNdPrbUco=
382
+github.com/libp2p/go-libp2p-core v0.0.3 h1:+IonUYY0nJZLb5Fdv6a6DOjtGP1L8Bb3faamiI2q5FY=
383
+github.com/libp2p/go-libp2p-core v0.0.3/go.mod h1:j+YQMNz9WNSkNezXOsahp9kwZBKBvxLpKD316QWSJXE=
384
github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE=
385
github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I=
386
github.com/libp2p/go-libp2p-crypto v0.1.0 h1:k9MFy+o2zGDNGsaoZl0MA3iZ75qXxr9OOoAZF+sD5OQ=
387
github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI=
394
-github.com/libp2p/go-libp2p-daemon v0.0.6/go.mod h1:nkhjsjSzkF+tg6iScsTTgq9m+VfyMtXNpycYG4CFvC8=
388
+github.com/libp2p/go-libp2p-daemon v0.2.0/go.mod h1:1hlzu8xFRi+fkC1N+zvhSgznGZGo9HxpJtSrj3X5HQw=
389
github.com/libp2p/go-libp2p-discovery v0.0.1/go.mod h1:ZkkF9xIFRLA1xCc7bstYFkd80gBGK8Fc1JqGoU2i+zI=
390
github.com/libp2p/go-libp2p-discovery v0.0.5/go.mod h1:YtF20GUxjgoKZ4zmXj8j3Nb2TUSBHFlOCetzYdbZL5I=
391
github.com/libp2p/go-libp2p-discovery v0.1.0 h1:j+R6cokKcGbnZLf4kcNwpx6mDEUPF3N6SrqMymQhmvs=
392
github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFTGElt8HnoDzwkFZm29g=
393
github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go=
400
-github.com/libp2p/go-libp2p-host v0.0.3 h1:BB/1Z+4X0rjKP5lbQTmjEjLbDVbrcmLOlA6QDsN5/j4=
394
github.com/libp2p/go-libp2p-host v0.0.3/go.mod h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8=
395
github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
396
github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
404
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.5 h1:KG/KNYL2tYzXAfMvQN5K1aAGTYSYUMJ1prgYa2/JI1E=
397
github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
398
github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k=
407
-github.com/libp2p/go-libp2p-kad-dht v0.0.4/go.mod h1:oaBflOQcuC8H+SVV0YN26H6AS+wcUEJyjUGV66vXuSY=
399
github.com/libp2p/go-libp2p-kad-dht v0.1.0 h1:cupGornmncdQCnjArAv9Txkqy43wgQCxoe/5pfIDF/4=
400
github.com/libp2p/go-libp2p-kad-dht v0.1.0/go.mod h1:EiH74cOsCxcu2Yh1XxQMpf1uHcLNm/hYEJBOIRlzHNE=
410
-github.com/libp2p/go-libp2p-kbucket v0.0.1/go.mod h1:Y0iQDHRTk/ZgM8PC4jExoF+E4j+yXWwRkdldkMa5Xm4=
401
github.com/libp2p/go-libp2p-kbucket v0.2.0 h1:FB2a0VkOTNGTP5gu/I444u4WabNM9V1zCkQcWb7zajI=
402
github.com/libp2p/go-libp2p-kbucket v0.2.0/go.mod h1:JNymBToym3QXKBMKGy3m29+xprg0EVr/GJFHxFEdgh8=
403
github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg=
@@ -421,9 +411,7 @@ github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiY
411
github.com/libp2p/go-libp2p-nat v0.0.2/go.mod h1:QrjXQSD5Dj4IJOdEcjHRkWTSomyxRo6HnUkf/TfQpLQ=
412
github.com/libp2p/go-libp2p-nat v0.0.4 h1:+KXK324yaY701On8a0aGjTnw8467kW3ExKcqW2wwmyw=
413
github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY=
424
-github.com/libp2p/go-libp2p-net v0.0.0-20190226201932-e71fff5ba6e9/go.mod h1:8W6Wx3AZbTRTe8zSMLoAmT3mGyau+w6kGIRk+Z+MZ7Q=
414
github.com/libp2p/go-libp2p-net v0.0.1/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c=
426
-github.com/libp2p/go-libp2p-net v0.0.2 h1:qP06u4TYXfl7uW/hzqPhlVVTSA2nw1B/bHBJaUnbh6M=
415
github.com/libp2p/go-libp2p-net v0.0.2/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c=
416
github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod h1:GdusFvujWZI9Vt0X5BKqwWWmZFxecf9Gt03cKxm2f/Q=
417
github.com/libp2p/go-libp2p-netutil v0.1.0 h1:zscYDNVEcGxyUpMd0JReUZTrpMfia8PmLKcKF72EAMQ=
@@ -432,23 +420,22 @@ github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J
420
github.com/libp2p/go-libp2p-peer v0.1.1/go.mod h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es=
421
github.com/libp2p/go-libp2p-peer v0.2.0 h1:EQ8kMjaCUwt/Y5uLgjT8iY2qg0mGUT0N1zUjer50DsY=
422
github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY=
435
-github.com/libp2p/go-libp2p-peerstore v0.0.0-20190226201924-e2df3e49eabf/go.mod h1:lLfgn0N3z2t+ER57a88K7NTZjMO27ez5TyWSURd428E=
423
github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20=
424
github.com/libp2p/go-libp2p-peerstore v0.0.6/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20=
425
github.com/libp2p/go-libp2p-peerstore v0.1.0 h1:MKh7pRNPHSh1fLPj8u/M/s/napdmeNpoi9BRy9lPN0E=
426
github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY=
427
github.com/libp2p/go-libp2p-pnet v0.1.0 h1:kRUES28dktfnHNIRW4Ro78F7rKBHBiw5MJpl0ikrLIA=
428
github.com/libp2p/go-libp2p-pnet v0.1.0/go.mod h1:ZkyZw3d0ZFOex71halXRihWf9WH/j3OevcJdTmD0lyE=
442
-github.com/libp2p/go-libp2p-protocol v0.0.0-20171212212132-b29f3d97e3a2/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
429
github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
444
-github.com/libp2p/go-libp2p-protocol v0.1.0 h1:HdqhEyhg0ToCaxgMhnOmUO8snQtt/kQlcjVk3UoJU3c=
430
github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk=
446
-github.com/libp2p/go-libp2p-pubsub v0.0.1/go.mod h1:fYKlZBOF2yrJzYlgeEVFSbYWfbS+E8Zix6gMZ0A6WgE=
431
github.com/libp2p/go-libp2p-pubsub v0.1.0 h1:SmQeMa7IUv5vadh0fYgYsafWCBA1sCy5d/68kIYqGcU=
432
github.com/libp2p/go-libp2p-pubsub v0.1.0/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q=
433
github.com/libp2p/go-libp2p-pubsub-router v0.1.0 h1:xA5B8Sdx64tNlSRIcay2QUngtlu8LpUJClaUk/dYYrg=
434
github.com/libp2p/go-libp2p-pubsub-router v0.1.0/go.mod h1:PnHOshBr/2I2ZxVfEsqfgCQPsVg09zo+DhSlWkOhPFM=
451
-github.com/libp2p/go-libp2p-quic-transport v0.0.0-20190301030811-862195d91de1/go.mod h1:bw/6H57fSVn44ldP1Js6hnzpoiUm9YgBDKSv+ch+hWc=
435
+github.com/libp2p/go-libp2p-quic-transport v0.1.0 h1:YXKs6LA4aCl0OfhUq50xvdXDHaUlAsjmDFDcBcJPDGI=
436
+github.com/libp2p/go-libp2p-quic-transport v0.1.0 h1:YXKs6LA4aCl0OfhUq50xvdXDHaUlAsjmDFDcBcJPDGI=
437
+github.com/libp2p/go-libp2p-quic-transport v0.1.0/go.mod h1:1oh6y4f8/lDX42jIGlhXO95ox3Y1XMLdffb7zde29Y8=
438
+github.com/libp2p/go-libp2p-quic-transport v0.1.0/go.mod h1:1oh6y4f8/lDX42jIGlhXO95ox3Y1XMLdffb7zde29Y8=
439
github.com/libp2p/go-libp2p-quic-transport v0.1.1 h1:MFMJzvsxIEDEVKzO89BnB/FgvMj9WI4GDGUW2ArDPUA=
440
github.com/libp2p/go-libp2p-quic-transport v0.1.1/go.mod h1:wqG/jzhF3Pu2NrhJEvE+IE0NTHNXslOPn9JQzyCAxzU=
441
github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q=
@@ -473,7 +460,6 @@ github.com/libp2p/go-libp2p-testing v0.0.3 h1:bdij4bKaaND7tCsaXVjRfYkMpvoOeKj9AV
460
github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E=
461
github.com/libp2p/go-libp2p-tls v0.1.0 h1:o4bjjAdnUjNgJoPoDd0wUaZH7K+EenlNWJpgyXB3ulA=
462
github.com/libp2p/go-libp2p-tls v0.1.0/go.mod h1:VZdoSWQDeNpIIAFJFv+6uqTqpnIIDHcqZQSTC/A1TT0=
476
-github.com/libp2p/go-libp2p-transport v0.0.0-20190226201958-e8580c8a519d/go.mod h1:lcwgOszllbhvQXul37Kv5YbSYXPoUhRB2Z+Nr3jaBmo=
463
github.com/libp2p/go-libp2p-transport v0.0.1/go.mod h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk=
464
github.com/libp2p/go-libp2p-transport v0.0.4/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A=
465
github.com/libp2p/go-libp2p-transport v0.0.5/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A=
@@ -503,9 +489,7 @@ github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQza
489
github.com/libp2p/go-reuseport-transport v0.0.1/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs=
490
github.com/libp2p/go-reuseport-transport v0.0.2 h1:WglMwyXyBu61CMkjCCtnmqNqnjib0GIEjMiHTwR/KN4=
491
github.com/libp2p/go-reuseport-transport v0.0.2/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs=
506
-github.com/libp2p/go-stream-muxer v0.0.0-20190218175335-a3f82916c8ad/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14=
492
github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14=
508
-github.com/libp2p/go-stream-muxer v0.1.0 h1:3ToDXUzx8pDC6RfuOzGsUYP5roMDthbUKRdMRRhqAqY=
493
github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ=
494
github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw=
495
github.com/libp2p/go-stream-muxer-multistream v0.2.0 h1:714bRJ4Zy9mdhyTLJ+ZKiROmAFwUHpeRidG+q7LTQOg=
@@ -514,7 +498,6 @@ github.com/libp2p/go-tcp-transport v0.0.1/go.mod h1:mnjg0o0O5TmXUaUIanYPUqkW4+u6
498
github.com/libp2p/go-tcp-transport v0.0.4/go.mod h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o=
499
github.com/libp2p/go-tcp-transport v0.1.0 h1:IGhowvEqyMFknOar4FWCKSWE0zL36UFKQtiRQD60/8o=
500
github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc=
517
-github.com/libp2p/go-testutil v0.0.1 h1:Xg+O0G2HIMfHqBOBDcMS1iSZJ3GEcId4qOxCQvsGZHk=
501
github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I=
502
github.com/libp2p/go-testutil v0.1.0 h1:4QhjaWGO89udplblLVpgGDOQjzFlRavZOjuEnz2rLMc=
503
github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc=
@@ -527,11 +510,12 @@ github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZ
510
github.com/libp2p/go-yamux v1.2.3 h1:xX8A36vpXb59frIzWFdEgptLMsOANMFq2K7fPRlunYI=
511
github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
512
github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
530
-github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04=
531
-github.com/lucas-clemente/quic-go v0.10.0/go.mod h1:wuD+2XqEx8G9jtwx5ou2BEYBsE+whgQmlj0Vz/77PrY=
513
+github.com/lucas-clemente/quic-go v0.11.1 h1:zasajC848Dqq/+WqfqBCkmPw+YHNe1MBts/z7y7nXf4=
514
+github.com/lucas-clemente/quic-go v0.11.1 h1:zasajC848Dqq/+WqfqBCkmPw+YHNe1MBts/z7y7nXf4=
515
+github.com/lucas-clemente/quic-go v0.11.1/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw=
516
+github.com/lucas-clemente/quic-go v0.11.1/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw=
517
github.com/lucas-clemente/quic-go v0.11.2 h1:Mop0ac3zALaBR3wGs6j8OYe/tcFvFsxTUFMkE/7yUOI=
518
github.com/lucas-clemente/quic-go v0.11.2/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw=
534
-github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58=
519
github.com/magiconair/properties v1.7.6 h1:U+1DqNen04MdEPgFiIwdOUiqZ8qPa37xgogX/sd3+54=
520
github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
521
github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA=
@@ -743,6 +727,8 @@ golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACk
727
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
728
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo=
729
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
730
+golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5 h1:8dUaAV7K4uHsF56JQWkprecIQKdPHtR9jCHF5nB8uzc=
731
+golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
732
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
733
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
734
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -801,7 +787,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3
787
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
788
golang.org/x/tools v0.0.0-20190420000508-685fecacd0a0 h1:pa1CyBALPFjblgkNQp7T7gEcFcG/GOG5Ck8IcnSVWGs=
789
golang.org/x/tools v0.0.0-20190420000508-685fecacd0a0/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
804
-golang.org/x/xerrors v0.0.0-20190212162355-a5947ffaace3/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
790
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522 h1:bhOzK9QyoD0ogCnFro1m2mz41+Ib0oOhfJnBp5MR4K4=
791
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
792
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=