From 5262cd98d407a4d277aac6da37d39bc798e8fb13 Mon Sep 17 00:00:00 2001 From: Matti Viljanen Date: Fri, 2 Aug 2024 18:51:22 +0300 Subject: [PATCH] Add destination ServiceAddress to Metadata --- libsignal-service/src/cipher.rs | 4 ++++ libsignal-service/src/content.rs | 1 + libsignal-service/src/envelope.rs | 10 +++++++++- libsignal-service/src/receiver.rs | 2 -- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/libsignal-service/src/cipher.rs b/libsignal-service/src/cipher.rs index ea79eee73..09649b679 100644 --- a/libsignal-service/src/cipher.rs +++ b/libsignal-service/src/cipher.rs @@ -164,6 +164,7 @@ where ) .await?; let metadata = Metadata { + destination: envelope.destination_address(), sender: envelope.source_address(), sender_device: envelope.source_device(), timestamp: envelope.server_timestamp(), @@ -201,6 +202,7 @@ where Type::PlaintextContent => { tracing::warn!(?envelope, "Envelope with plaintext content. This usually indicates a decryption retry."); let metadata = Metadata { + destination: envelope.destination_address(), sender: envelope.source_address(), sender_device: envelope.source_device(), timestamp: envelope.server_timestamp(), @@ -221,6 +223,7 @@ where ) .await?; let metadata = Metadata { + destination: envelope.destination_address(), sender: envelope.source_address(), sender_device: envelope.source_device(), timestamp: envelope.timestamp(), @@ -290,6 +293,7 @@ where }; let metadata = Metadata { + destination: envelope.destination_address(), sender, sender_device: device_id.into(), timestamp: envelope.timestamp(), diff --git a/libsignal-service/src/content.rs b/libsignal-service/src/content.rs index 16c83dcf2..8fead84b8 100644 --- a/libsignal-service/src/content.rs +++ b/libsignal-service/src/content.rs @@ -19,6 +19,7 @@ mod story_message; #[derive(Clone, Debug)] pub struct Metadata { pub sender: crate::ServiceAddress, + pub destination: crate::ServiceAddress, pub sender_device: u32, pub timestamp: u64, pub needs_receipt: bool, diff --git a/libsignal-service/src/envelope.rs b/libsignal-service/src/envelope.rs index 75f0d6d89..1a33de669 100644 --- a/libsignal-service/src/envelope.rs +++ b/libsignal-service/src/envelope.rs @@ -136,10 +136,18 @@ impl Envelope { pub fn source_address(&self) -> ServiceAddress { match self.source_service_id.as_deref() { Some(service_id) => ServiceAddress::try_from(service_id) - .expect("invalid ProtocolAddress UUID or prefix"), + .expect("invalid source ProtocolAddress UUID or prefix"), None => panic!("source_service_id is set"), } } + + pub fn destination_address(&self) -> ServiceAddress { + match self.destination_service_id.as_deref() { + Some(service_id) => ServiceAddress::try_from(service_id) + .expect("invalid destination ProtocolAddress UUID or prefix"), + None => panic!("destination_address is set"), + } + } } #[derive(serde::Serialize, serde::Deserialize)] diff --git a/libsignal-service/src/receiver.rs b/libsignal-service/src/receiver.rs index 9c8d5920f..5cb121256 100644 --- a/libsignal-service/src/receiver.rs +++ b/libsignal-service/src/receiver.rs @@ -32,8 +32,6 @@ impl MessageReceiver { &mut self, allow_stories: bool, ) -> Result, ServiceError> { - use std::convert::TryFrom; - let entities = self.service.get_messages(allow_stories).await?; let entities = entities .into_iter()