diff --git a/common/client-core/src/client/received_buffer.rs b/common/client-core/src/client/received_buffer.rs index fe6887b01f..021fd75d1a 100644 --- a/common/client-core/src/client/received_buffer.rs +++ b/common/client-core/src/client/received_buffer.rs @@ -50,19 +50,26 @@ struct ReceivedMessagesBufferInner { } impl ReceivedMessagesBufferInner { - fn recover_from_fragment(&mut self, fragment_data: &[u8]) -> Option { + fn recover_from_fragment( + &mut self, + fragment_data: &[u8], + fragment_data_size: usize, + ) -> Option { if nym_sphinx::cover::is_cover(fragment_data) { trace!("The message was a loop cover message! Skipping it"); + // NOTE: it's important to note that there is quite a bit of difference in size of + // received and sent packets due to the sphinx layers being removed by the exit gateway + // before it reaches the mixnet client. self.stats_tx .report(PacketStatisticsEvent::CoverPacketReceived( - fragment_data.len(), + fragment_data_size, )); return None; } self.stats_tx .report(PacketStatisticsEvent::RealPacketReceived( - fragment_data.len(), + fragment_data_size, )); let fragment = match self.message_receiver.recover_fragment(fragment_data) { @@ -116,15 +123,17 @@ impl ReceivedMessagesBufferInner { reply_ciphertext: &mut [u8], reply_key: SurbEncryptionKey, ) -> Result, MessageRecoveryError> { + let reply_ciphertext_size = reply_ciphertext.len(); // note: this performs decryption IN PLACE without extra allocation self.message_receiver .recover_plaintext_from_reply(reply_ciphertext, reply_key)?; let fragment_data = reply_ciphertext; - Ok(self.recover_from_fragment(fragment_data)) + Ok(self.recover_from_fragment(fragment_data, reply_ciphertext_size)) } fn process_received_regular_packet(&mut self, mut raw_fragment: Vec) -> Option { + let raw_fragment_size = raw_fragment.len(); let fragment_data = match self.message_receiver.recover_plaintext_from_regular_packet( self.local_encryption_keypair.private_key(), &mut raw_fragment, @@ -136,7 +145,7 @@ impl ReceivedMessagesBufferInner { Ok(frag_data) => frag_data, }; - self.recover_from_fragment(fragment_data) + self.recover_from_fragment(fragment_data, raw_fragment_size) } } diff --git a/common/client-libs/gateway-client/src/client.rs b/common/client-libs/gateway-client/src/client.rs index f8803bcc12..f65e61c29f 100644 --- a/common/client-libs/gateway-client/src/client.rs +++ b/common/client-libs/gateway-client/src/client.rs @@ -354,10 +354,7 @@ impl GatewayClient { msg: Message, ) -> Result<(), GatewayClientError> { match self.connection { - SocketState::Available(ref mut conn) => { - conn.send(msg).await?; - Ok(()) - } + SocketState::Available(ref mut conn) => Ok(conn.send(msg).await?), SocketState::PartiallyDelegated(ref mut partially_delegated) => { if let Err(err) = partially_delegated.send_without_response(msg).await { error!("failed to send message without response - {err}...");