restore ability to ping by ID alone
Jeromy committed
Jan 10, 2015 at 08:31 UTC
0f4f91c2f3d32c71e07fb4586aa432202b98d627
1 file changed
+40
-12
core/commands/ping.go
+40
-12
@@ -4,10 +4,10 @@ import (
4
"bytes"
5
"fmt"
6
"io"
7
+ "strings"
8
"time"
9
10
cmds "github.com/jbenet/go-ipfs/commands"
10
- config "github.com/jbenet/go-ipfs/config"
11
core "github.com/jbenet/go-ipfs/core"
12
peer "github.com/jbenet/go-ipfs/p2p/peer"
13
u "github.com/jbenet/go-ipfs/util"
@@ -82,21 +82,12 @@ Send pings to a peer using the routing system to discover its address
82
return nil, errNotOnline
83
}
84
85
- bsp, err := config.ParseBootstrapPeer(req.Arguments()[0])
85
+ addr, peerID, err := ParsePeerParam(req.Arguments()[0])
86
if err != nil {
87
return nil, err
88
}
89
90
- peerID, err := peer.IDB58Decode(bsp.PeerID)
91
- if err != nil {
92
- return nil, err
93
- }
94
-
95
- if len(bsp.Address) > 0 {
96
- addr, err := ma.NewMultiaddr(bsp.Address)
97
- if err != nil {
98
- return nil, err
99
- }
90
+ if addr != nil {
91
n.Peerstore.AddAddress(peerID, addr)
92
}
93
@@ -161,3 +152,40 @@ func pingPeer(n *core.IpfsNode, pid peer.ID, numPings int, outChan chan interfac
152
Text: fmt.Sprintf("Average latency: %.2fms", averagems),
153
}
154
}
155
+
156
+func ParsePeerParam(text string) (ma.Multiaddr, peer.ID, error) {
157
+ // to be replaced with just multiaddr parsing, once ptp is a multiaddr protocol
158
+ idx := strings.LastIndex(text, "/")
159
+ if idx == -1 {
160
+ pid, err := peer.IDB58Decode(text)
161
+ if err != nil {
162
+ return nil, "", err
163
+ }
164
+
165
+ return nil, pid, nil
166
+ }
167
+
168
+ addrS := text[:idx]
169
+ peeridS := text[idx+1:]
170
+
171
+ var maddr ma.Multiaddr
172
+ var pid peer.ID
173
+
174
+ // make sure addrS parses as a multiaddr.
175
+ if len(addrS) > 0 {
176
+ var err error
177
+ maddr, err = ma.NewMultiaddr(addrS)
178
+ if err != nil {
179
+ return nil, "", err
180
+ }
181
+ }
182
+
183
+ // make sure idS parses as a peer.ID
184
+ var err error
185
+ pid, err = peer.IDB58Decode(peeridS)
186
+ if err != nil {
187
+ return nil, "", err
188
+ }
189
+
190
+ return maddr, pid, nil
191
+}