@cryptotaxi247 / kubo / commits / 0f4f91c2f

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