diff --git a/Makefile b/Makefile index 6489d896c..6d83f1123 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ CARGO = cargo +nightly #TARGET_PRFX = --target= # Binaries to be built -BINS = darkfid faucetd drk darkirc dnetview vanityaddr tau taud +BINS = darkfid faucetd drk darkirc vanityaddr tau taud # zkas dependencies ZKASDEPS = \ diff --git a/bin/genev/genevd/src/rpc.rs b/bin/genev/genevd/src/rpc.rs index c117e3724..557650a2b 100644 --- a/bin/genev/genevd/src/rpc.rs +++ b/bin/genev/genevd/src/rpc.rs @@ -88,7 +88,9 @@ impl JsonRpcInterface { // // --> {"jsonrpc": "2.0", "method": "dnet_switch", "params": [true], "id": 42} // <-- {"jsonrpc": "2.0", "result": true, "id": 42} - async fn dnet_switch(&self, id: Value, params: &[Value]) -> JsonResult { + async fn dnet_switch(&self, id: Value, params: Value) -> JsonResult { + let params = params.as_array().unwrap(); + if params.len() != 1 && params[0].as_bool().is_none() { return JsonError::new(ErrorCode::InvalidParams, None, id).into() } diff --git a/example/dchat/src/rpc.rs b/example/dchat/src/rpc.rs index 7122488b1..416cac752 100644 --- a/example/dchat/src/rpc.rs +++ b/example/dchat/src/rpc.rs @@ -48,7 +48,8 @@ impl RequestHandler for JsonRpcInterface { // ANCHOR: req_match match req.method.as_str() { Some("ping") => self.pong(req.id, req.params).await, - Some("get_info") => self.get_info(req.id, req.params).await, + Some("dnet_switch") => self.dnet_switch(req.id, req.params).await, + Some("dnet_info") => self.dnet_info(req.id, req.params).await, Some(_) | None => JsonError::new(ErrorCode::MethodNotFound, None, req.id).into(), } // ANCHOR_END: req_match @@ -67,13 +68,37 @@ impl JsonRpcInterface { // ANCHOR_END: pong // RPCAPI: - // Retrieves P2P network information. - // --> {"jsonrpc": "2.0", "method": "get_info", "params": [], "id": 42} - // <-- {"jsonrpc": "2.0", result": {"nodeID": [], "nodeinfo": [], "id": 42} - // ANCHOR: get_info - async fn get_info(&self, id: Value, _params: Value) -> JsonResult { - let resp = self.p2p.get_info().await; - JsonResponse::new(resp, id).into() + // Activate or deactivate dnet in the P2P stack. + // By sending `true`, dnet will be activated, and by sending `false` dnet will + // be deactivated. Returns `true` on success. + // + // --> {"jsonrpc": "2.0", "method": "dnet_switch", "params": [true], "id": 42} + // <-- {"jsonrpc": "2.0", "result": true, "id": 42} + async fn dnet_switch(&self, id: Value, params: Value) -> JsonResult { + let params = params.as_array().unwrap(); + + if params.len() != 1 && params[0].as_bool().is_none() { + return JsonError::new(ErrorCode::InvalidParams, None, id).into() + } + + if params[0].as_bool().unwrap() { + self.p2p.dnet_enable().await; + } else { + self.p2p.dnet_disable().await; + } + + JsonResponse::new(json!(true), id).into() } - // ANCHOR_END: get_info + + // RPCAPI: + // Retrieves P2P network information. + // + // --> {"jsonrpc": "2.0", "method": "dnet_info", "params": [], "id": 42} + // <-- {"jsonrpc": "2.0", result": {"nodeID": [], "nodeinfo": [], "id": 42} + // ANCHOR: dnet_info + async fn dnet_info(&self, id: Value, _params: Value) -> JsonResult { + let dnet_info = self.p2p.dnet_info().await; + JsonResponse::new(net::P2p::map_dnet_info(dnet_info), id).into() + } + // ANCHOR_END: dnet_info } diff --git a/src/net/session/inbound_session.rs b/src/net/session/inbound_session.rs index bd497320a..74e79a542 100644 --- a/src/net/session/inbound_session.rs +++ b/src/net/session/inbound_session.rs @@ -57,13 +57,9 @@ pub struct InboundInfo { impl InboundInfo { async fn dnet_info(&self, p2p: P2pPtr) -> Option { - let Some(ref addr) = self.addr else { - return None - }; + let Some(ref addr) = self.addr else { return None }; - let Some(chan) = p2p.channels().lock().await.get(&addr).cloned() else { - return None - }; + let Some(chan) = p2p.channels().lock().await.get(&addr).cloned() else { return None }; Some(Self { addr: self.addr.clone(), channel: Some(chan.dnet_info().await) }) } diff --git a/src/net/session/outbound_session.rs b/src/net/session/outbound_session.rs index 9612dbff1..7a5f2e4b6 100644 --- a/src/net/session/outbound_session.rs +++ b/src/net/session/outbound_session.rs @@ -86,13 +86,9 @@ pub struct OutboundInfo { impl OutboundInfo { async fn dnet_info(&self, p2p: P2pPtr) -> Option { - let Some(ref addr) = self.addr else { - return None - }; + let Some(ref addr) = self.addr else { return None }; - let Some(chan) = p2p.channels().lock().await.get(&addr).cloned() else { - return None - }; + let Some(chan) = p2p.channels().lock().await.get(&addr).cloned() else { return None }; Some(Self { addr: self.addr.clone(), diff --git a/src/util/ringbuffer.rs b/src/util/ringbuffer.rs index 8a70fd55f..66b5b0a11 100644 --- a/src/util/ringbuffer.rs +++ b/src/util/ringbuffer.rs @@ -80,7 +80,7 @@ mod tests { #[test] fn behaviour() { const BUF_SIZE: usize = 10; - let mut buf = RingBuffer::::new(); + let mut buf = RingBuffer::::new(); for i in 0..BUF_SIZE { buf.push(i);