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