diff --git a/src/message.rs b/src/message.rs index 9e0aef6..80d122d 100644 --- a/src/message.rs +++ b/src/message.rs @@ -5,6 +5,7 @@ //! structure. We only care about sending the message to the remote in the most reliable way //! possible. +use core::fmt; use std::{ collections::{HashMap, VecDeque}, marker::PhantomData, @@ -15,7 +16,7 @@ use std::{ }; use futures::{Stream, StreamExt}; -use log::{debug, error, warn}; +use log::{debug, error, trace, warn}; use rand::Fill; use serde::{de::Visitor, Deserialize, Deserializer, Serialize}; @@ -214,6 +215,11 @@ impl MessageStack { while let Some((packet, src, dst)) = message_packet_stream.next().await { let mp = MessagePacket::new(packet); + trace!( + "Received message packet with flags {:b}", + mp.header().flags() + ); + if mp.header().flags().ack() { self.handle_message_reply(mp); } else { @@ -293,7 +299,7 @@ impl MessageStack { // future. debug!("Received READ ACK"); } else { - debug!("Received unknown ACK message flags {:x}", flags.flags); + debug!("Received unknown ACK message flags {:b}", flags); } } @@ -449,6 +455,8 @@ impl MessageStack { data: message.data, }; + debug!("Message {} reception complete", message.id.as_hex()); + // Move message to be read. inbox.complete_msges.push_back(message); inbox.pending_msges.remove(&message_id); @@ -464,6 +472,7 @@ impl MessageStack { debug!("Got READ for message which is not in received state"); return; } + debug!("Receiver confirmed READ of message {}", message_id.as_hex()); message.state = TransmissionState::Read; } None @@ -476,7 +485,7 @@ impl MessageStack { } None } else { - debug!("Received unknown message flags {:x}", flags.flags); + debug!("Received unknown message flags {:b}", flags); None }; if let Some(reply) = reply { @@ -1059,6 +1068,12 @@ impl<'a> Flags<'a> { } } +impl fmt::Binary for Flags<'_> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_fmt(format_args!("{:016b}", self.flags)) + } +} + /// A mutable reference to the flags in a message header. // We keep a separate struct because creating a u16 from a byte buffer will write the data in // native endiannes, but we need big endian. So we add a drop implementation which forces a big