@cryptotaxi247 / kubo / commits / 4607f5425

add findpeer command

Jeromy committed Jan 23, 2015 at 09:01 UTC 4607f542545acd538d1bdadde12d6b42a28b77b1
1 file changed +53
core/commands/dht.go
+53
@@ -23,6 +23,7 @@ var DhtCmd = &cmds.Command{
23 Subcommands: map[string]*cmds.Command{
24 "query": queryDhtCmd,
25 "findprovs": findProvidersDhtCmd,
26 + "findpeer": findPeerDhtCmd,
27 },
28 }
29
@@ -190,3 +191,55 @@ FindProviders will return a list of peers who are able to provide the value requ
191 },
192 Type: peer.PeerInfo{},
193 }
194 +
195 +var findPeerDhtCmd = &cmds.Command{
196 + Helptext: cmds.HelpText{
197 + Tagline: "Run a 'FindPeer' query through the DHT",
198 + ShortDescription: ``,
199 + },
200 +
201 + Arguments: []cmds.Argument{
202 + cmds.StringArg("peerID", true, true, "The peer to search for"),
203 + },
204 + Run: func(req cmds.Request) (interface{}, error) {
205 + n, err := req.Context().GetNode()
206 + if err != nil {
207 + return nil, err
208 + }
209 +
210 + dht, ok := n.Routing.(*ipdht.IpfsDHT)
211 + if !ok {
212 + return nil, errors.New("Routing service was not a dht")
213 + }
214 +
215 + pid, err := peer.IDB58Decode(req.Arguments()[0])
216 + if err != nil {
217 + return nil, err
218 + }
219 +
220 + pi, err := dht.FindPeer(req.Context().Context, pid)
221 + if err != nil {
222 + return nil, err
223 + }
224 +
225 + return &pi, nil
226 + },
227 + Marshalers: cmds.MarshalerMap{
228 + cmds.Text: func(res cmds.Response) (io.Reader, error) {
229 + pinfo, ok := res.Output().(*peer.PeerInfo)
230 + if !ok {
231 + return nil, u.ErrCast()
232 + }
233 +
234 + buf := new(bytes.Buffer)
235 + fmt.Fprintf(buf, "found peer: %s\n", pinfo.ID)
236 + fmt.Fprintf(buf, "reported addresses:\n")
237 + for _, addr := range pinfo.Addrs {
238 + fmt.Fprintf(buf, "\t%s\n", addr)
239 + }
240 +
241 + return buf, nil
242 + },
243 + },
244 + Type: peer.PeerInfo{},
245 +}