From 79b8428bb5b1981821e2afc35bad9ce6f100f576 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Wed, 21 Feb 2024 11:59:40 -0400 Subject: [PATCH] feat: add listen addresses --- waku-bindings/Cargo.toml | 3 ++- waku-bindings/src/node/management.rs | 32 ++++++++++++++++++++++------ waku-bindings/src/node/mod.rs | 6 ++++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/waku-bindings/Cargo.toml b/waku-bindings/Cargo.toml index cd21ff1..d709db1 100644 --- a/waku-bindings/Cargo.toml +++ b/waku-bindings/Cargo.toml @@ -3,7 +3,8 @@ name = "waku-bindings" version = "0.5.0" edition = "2021" authors = [ - "Daniel Sanchez Quiros " + "Daniel Sanchez Quiros ", + "Richard Ramos " ] description = "Waku networking library" license = "MIT OR Apache-2.0" diff --git a/waku-bindings/src/node/management.rs b/waku-bindings/src/node/management.rs index 8bc53df..5d29d50 100644 --- a/waku-bindings/src/node/management.rs +++ b/waku-bindings/src/node/management.rs @@ -4,6 +4,7 @@ use std::ffi::CString; // crates use libc::c_void; +use multiaddr::Multiaddr; // internal use super::config::WakuNodeConfig; use crate::general::Result; @@ -33,13 +34,11 @@ pub fn waku_new(config: Option) -> Result<*mut c_void> { out }; - // TODO: create error handler function, format of err message is - // {"message":"The actual message","eventType":"error"} - if !error.is_empty() { - return Err(error); + return if !error.is_empty() { + Err(error) + } else { + Ok(node_ptr) } - - Ok(node_ptr) } /// Start a Waku node mounting all the protocols that were enabled during the Waku node instantiation. @@ -84,10 +83,24 @@ pub fn waku_version(ctx: *mut c_void) -> Result { handle_response(code, &result) } +/// Get the multiaddresses the Waku node is listening to +/// as per [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_listen_addresses) +pub fn waku_listen_addresses(ctx: *mut c_void) -> Result> { + let mut result: String = Default::default(); + let result_cb = |v: &str| result = v.to_string(); + let code = unsafe { + let mut closure = result_cb; + let cb = get_trampoline(&closure); + waku_sys::waku_listen_addresses(ctx, cb, &mut closure as *mut _ as *mut c_void) + }; + + handle_json_response(code, &result) +} + #[cfg(test)] mod test { use super::waku_new; - use crate::node::management::{waku_start, waku_stop, waku_version}; + use crate::node::management::{waku_start, waku_stop, waku_listen_addresses, waku_version}; use serial_test::serial; #[test] @@ -97,6 +110,11 @@ mod test { waku_start(node).unwrap(); + // test addresses + let addresses = waku_listen_addresses(node).unwrap(); + dbg!(&addresses); + assert!(!addresses.is_empty()); + waku_stop(node).unwrap(); } diff --git a/waku-bindings/src/node/mod.rs b/waku-bindings/src/node/mod.rs index cf5c2c7..70e83e8 100644 --- a/waku-bindings/src/node/mod.rs +++ b/waku-bindings/src/node/mod.rs @@ -39,6 +39,12 @@ impl WakuNodeHandle { management::waku_stop(self.ctx) } + /// Get the multiaddresses the Waku node is listening to + /// as per [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_listen_addresses) + pub fn listen_addresses(&self) -> Result> { + management::waku_listen_addresses(self.ctx) + } + /// Get the nwaku version pub fn version(&self) -> Result { management::waku_version(self.ctx)