summaryrefslogtreecommitdiffstats
path: root/src/transport/mycelium/mod.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-28 05:47:22 +0100
committertv <tv@krebsco.de>2026-10-28 05:47:22 +0100
commitde75b63c44235fab3547ac2e060e610bff94646a (patch)
tree36a501b2f88fb9e617bcd6fe00b2eefeca591940 /src/transport/mycelium/mod.rs
parentdd0e4a5120751d8dcb4b42834881f36de17ec168 (diff)
don't queue PING/PONG probes
Diffstat (limited to 'src/transport/mycelium/mod.rs')
-rw-r--r--src/transport/mycelium/mod.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/transport/mycelium/mod.rs b/src/transport/mycelium/mod.rs
index 61aab85..2bb399c 100644
--- a/src/transport/mycelium/mod.rs
+++ b/src/transport/mycelium/mod.rs
@@ -8,7 +8,9 @@ use thiserror::Error;
use url::Url;
use crate::transport::wire;
-use crate::transport::{EncodedMessage, MessageHandler, ParsedMessage, Transport};
+use crate::transport::{
+ EncodedMessage, HandlerFn, MessageHandler, ParsedMessage, Transport, hand_on_probe, is_probe,
+};
pub(crate) mod daemon;
@@ -289,6 +291,8 @@ impl Transport for MyceliumTransport {
}
drop(tx);
+ // PINGs and PONGs aren't handled after the message before them (`is_probe`).
+ let handler: std::sync::Arc<HandlerFn> = std::sync::Arc::from(handler);
while let Some(inbound_message) = rx.recv().await {
match parse_message(&inbound_message) {
Ok((sender, parsed)) => {
@@ -300,7 +304,9 @@ impl Transport for MyceliumTransport {
"Received message"
);
let payload_len = base64_decoded_len(&inbound_message.payload);
- if let Err(error) = handler(sender, parsed, payload_len).await {
+ if is_probe(&parsed) {
+ hand_on_probe(&handler, sender, parsed, payload_len);
+ } else if let Err(error) = handler(sender, parsed, payload_len).await {
tracing::warn!(error = %format!("{error:#}"), "Failed to process inbound message");
}
}