summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFerris Tseng <ferristseng@fastmail.fm>2017-11-26 11:17:31 -0500
committerFerris Tseng <ferristseng@fastmail.fm>2017-11-26 11:17:31 -0500
commita419d102241c11e47ffc9476dd1800e70fd94320 (patch)
tree04268b866032e955c3688e4930a8cac247174a75
parent5c3c9b170f1415fcbb4c0de28339467bcbca5e29 (diff)
finish implementing dht
-rw-r--r--ipfs-cli/src/command/dht.rs57
1 files changed, 31 insertions, 26 deletions
diff --git a/ipfs-cli/src/command/dht.rs b/ipfs-cli/src/command/dht.rs
index 7fd72e1..fbad7ac 100644
--- a/ipfs-cli/src/command/dht.rs
+++ b/ipfs-cli/src/command/dht.rs
@@ -34,11 +34,20 @@ pub fn signature<'a, 'b>() -> App<'a, 'b> {
(about: "Announce to the network that you are providing the given values")
(@arg KEY: +required "The key you are providing")
)
+ (@subcommand put =>
+ (about: "Write a key/value pair to the DHT")
+ (@arg KEY: +required "The key to store the value at")
+ (@arg VALUE: +required "The value to store")
+ )
+ (@subcommand query =>
+ (about: "Find the closest peer to a given peer by querying the DHT")
+ (@arg PEER: +required "The peer to run the query against")
+ )
)
}
-fn print_dht_response(res: DhtMessage) {
+fn print_dht_response<E>(res: DhtMessage) -> Result<(), E> {
println!("");
println!(" id : {}", res.id);
println!(" type : {:?}", res.typ);
@@ -53,51 +62,47 @@ fn print_dht_response(res: DhtMessage) {
}
println!(" extra : {}", res.extra);
println!("");
+
+ Ok(())
}
pub fn handle(core: &mut Core, client: &IpfsClient, args: &ArgMatches) {
- match args.subcommand() {
+ let req = match args.subcommand() {
("findpeer", Some(args)) => {
let peer = args.value_of("PEER").unwrap();
- let req = client.dht_findpeer(&peer).for_each(|peer| {
- print_dht_response(peer);
-
- Ok(())
- });
- core.run(req).expect(EXPECTED_API);
+ client.dht_findpeer(&peer)
}
("findprovs", Some(args)) => {
let key = args.value_of("KEY").unwrap();
- let req = client.dht_findprovs(&key).for_each(|peer| {
- print_dht_response(peer);
- Ok(())
- });
-
- core.run(req).expect(EXPECTED_API);
+ client.dht_findprovs(&key)
}
("get", Some(args)) => {
let key = args.value_of("KEY").unwrap();
- let req = client.dht_get(&key).for_each(|peer| {
- print_dht_response(peer);
-
- Ok(())
- });
- core.run(req).expect(EXPECTED_API);
+ client.dht_get(&key)
}
("provide", Some(args)) => {
let key = args.value_of("KEY").unwrap();
- let req = client.dht_provide(&key).for_each(|peer| {
- print_dht_response(peer);
- Ok(())
- });
+ client.dht_provide(&key)
+
+ }
+ ("put", Some(args)) => {
+ let key = args.value_of("KEY").unwrap();
+ let val = args.value_of("VALUE").unwrap();
+
+ client.dht_put(&key, &val)
+ }
+ ("query", Some(args)) => {
+ let peer = args.value_of("PEER").unwrap();
- core.run(req).expect(EXPECTED_API);
+ client.dht_query(&peer)
}
_ => unreachable!(),
- }
+ };
+
+ core.run(req.for_each(print_dht_response)).expect(EXPECTED_API);
}