diff --git a/src/lib.rs b/src/lib.rs index 1aa22c6..18563c5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,3 +12,4 @@ pub mod settings; pub mod subreddit; pub mod user; pub mod utils; +pub mod p2p_mon; \ No newline at end of file diff --git a/src/p2p.rs b/src/p2p.rs index 25469b9..6fe1c1b 100644 --- a/src/p2p.rs +++ b/src/p2p.rs @@ -18,7 +18,7 @@ use once_cell::sync::Lazy; use serde::{Deserialize, Serialize}; use tokio::{task, time::sleep}; -use crate::config; +use crate::{config, p2p_mon::{Message, MessageLog}}; pub static DASHMAP: Lazy> = Lazy::new(DashMap::new); pub static ONLINE: Lazy = Lazy::new(AtomicBool::default); @@ -92,6 +92,7 @@ async fn subscribe_loop(mut receiver: GossipReceiver) { break; } }; + let message= message.message; // Update dashmap with message's hostname and alive status DASHMAP.insert(message.hostname.clone(), message.online); } @@ -104,6 +105,8 @@ async fn sender_loop(sender: GossipSender, endpoint: Endpoint) { hostname: config::get_setting("REDLIB_FULL_URL").unwrap_or_default(), online: ONLINE.load(Ordering::SeqCst), }; + DASHMAP.insert(message.hostname.clone(), message.online); + let message: MessageLog = message.into(); let encoded_message = SignedMessage::sign_and_encode(endpoint.secret_key(), &message).unwrap(); let message_delivery = sender.broadcast(encoded_message).await; println!("> sent message: {message:?}: {message_delivery:?}"); @@ -152,15 +155,15 @@ struct SignedMessage { } impl SignedMessage { - pub fn verify_and_decode(bytes: &[u8]) -> anyhow::Result<(PublicKey, Message)> { + pub fn verify_and_decode(bytes: &[u8]) -> anyhow::Result<(PublicKey, MessageLog)> { let signed_message: Self = postcard::from_bytes(bytes)?; let key: PublicKey = signed_message.from; key.verify(&signed_message.data, &signed_message.signature)?; - let message: Message = postcard::from_bytes(&signed_message.data)?; + let message: MessageLog = postcard::from_bytes(&signed_message.data)?; Ok((signed_message.from, message)) } - pub fn sign_and_encode(secret_key: &SecretKey, message: &Message) -> anyhow::Result { + pub fn sign_and_encode(secret_key: &SecretKey, message: &MessageLog) -> anyhow::Result { let data: Bytes = postcard::to_stdvec(&message)?.into(); let signature = secret_key.sign(&data); let from: PublicKey = secret_key.public(); @@ -170,11 +173,6 @@ impl SignedMessage { } } -#[derive(Debug, Serialize, Deserialize)] -struct Message { - hostname: String, - online: bool, -} pub async fn map_json() -> Result, String> { let map = &*DASHMAP; diff --git a/src/p2p_mon.rs b/src/p2p_mon.rs index 164dfae..1f5bc54 100644 --- a/src/p2p_mon.rs +++ b/src/p2p_mon.rs @@ -109,25 +109,25 @@ struct SignedMessage { } impl SignedMessage { - pub fn verify_and_decode(bytes: &[u8]) -> anyhow::Result<(PublicKey, Message)> { + pub fn verify_and_decode(bytes: &[u8]) -> anyhow::Result<(PublicKey, MessageLog)> { let signed_message: Self = postcard::from_bytes(bytes)?; let key: PublicKey = signed_message.from; key.verify(&signed_message.data, &signed_message.signature)?; - let message: Message = postcard::from_bytes(&signed_message.data)?; + let message: MessageLog = postcard::from_bytes(&signed_message.data)?; Ok((signed_message.from, message)) } } #[derive(Debug, Serialize, Deserialize)] -struct Message { - hostname: String, - online: bool, +pub struct Message { + pub hostname: String, + pub online: bool, } #[derive(Debug, Serialize, Deserialize)] -struct MessageLog { - timestamp: u64, - message: Message, +pub struct MessageLog { + pub timestamp: u64, + pub message: Message, } impl From for MessageLog { fn from(message: Message) -> Self {