diff --git a/src/features/signal.rs b/src/features/signal.rs index 5f2907aed..bb3d0ab34 100644 --- a/src/features/signal.rs +++ b/src/features/signal.rs @@ -3,7 +3,6 @@ //! Encryption, decryption, session management, and participant node creation. use anyhow::{Result, anyhow}; -use prost::Message as ProtoMessage; use wacore::libsignal::protocol::{ CiphertextMessage, PreKeySignalMessage, SignalMessage, UsePQRatchet, message_decrypt, message_encrypt, @@ -270,7 +269,7 @@ impl<'a> Signal<'a> { _session_guards.push(mutex.lock().await); } - let plaintext = MessageUtils::pad_message_v2(message.encode_to_vec()); + let plaintext = MessageUtils::encode_and_pad(message); let mut adapter = self.client.signal_adapter().await; let mediatype = wacore::send::media_type_from_message(message); let hide_decrypt_fail = wacore::send::should_hide_decrypt_fail(message); diff --git a/src/receipt.rs b/src/receipt.rs index 4798ac96f..83b145bff 100644 --- a/src/receipt.rs +++ b/src/receipt.rs @@ -46,25 +46,25 @@ impl Client { debug!("Received receipt type '{receipt_type:?}' for message {id} from {from}"); - let sender = if from.is_group() { + let is_group = from.is_group(); + let sender = if is_group { participant.unwrap_or_else(|| from.clone()) } else { from.clone() }; let receipt = Receipt { - message_ids: vec![id.clone()], + message_ids: vec![id], source: crate::types::message::MessageSource { - chat: from.clone(), - sender: sender.clone(), + chat: from, + sender, ..Default::default() }, timestamp: wacore::time::now_utc(), - r#type: receipt_type.clone(), - message_sender: sender.clone(), + r#type: receipt_type, }; - if receipt_type == ReceiptType::Retry { + if receipt.r#type == ReceiptType::Retry { let client_clone = Arc::clone(self); let node_clone = Arc::clone(&node); self.runtime @@ -81,7 +81,7 @@ impl Client { } })) .detach(); - } else if receipt_type == ReceiptType::EncRekeyRetry { + } else if receipt.r#type == ReceiptType::EncRekeyRetry { // WA Web: both "retry" and "enc_rekey_retry" route through // handleMessageRetryRequest, but enc_rekey_retry branches to the // VoIP stack's resendEncRekeyRetry(peerJid, retryCount). @@ -97,7 +97,7 @@ impl Client { .optional_string("call-id") .as_deref() .unwrap_or_default(), - from, + receipt.source.chat, child_attrs .optional_string("call-creator") .as_deref() diff --git a/wacore/src/send.rs b/wacore/src/send.rs index 332efeab3..de5f39b70 100644 --- a/wacore/src/send.rs +++ b/wacore/src/send.rs @@ -403,8 +403,6 @@ where .await? .is_some() { - // Session exists under direct address, use it - jid_to_encryption_jid.insert(device_jid, device_jid.clone()); continue; } @@ -728,7 +726,7 @@ pub async fn prepare_dm_stanza< ..Default::default() }; - let own_devices_plaintext = MessageUtils::pad_message_v2(dsm.encode_to_vec()); + let own_devices_plaintext = MessageUtils::encode_and_pad(&dsm); let total_devices = all_devices.len(); let (recipient_devices, own_other_devices) = @@ -1118,8 +1116,7 @@ pub async fn prepare_group_stanza< }), ..Default::default() }; - let skdm_plaintext_to_encrypt = - MessageUtils::pad_message_v2(skdm_wrapper_msg.encode_to_vec()); + let skdm_plaintext_to_encrypt = MessageUtils::encode_and_pad(&skdm_wrapper_msg); // WA Web's GroupSkmsgJob wraps ensureE2ESessions in try/catch — logs error // but does NOT rethrow. SKDM distribution failure must not prevent the group diff --git a/wacore/src/types/events.rs b/wacore/src/types/events.rs index 5c94ed124..ec82d1441 100644 --- a/wacore/src/types/events.rs +++ b/wacore/src/types/events.rs @@ -695,7 +695,6 @@ pub struct Receipt { pub message_ids: Vec, pub timestamp: DateTime, pub r#type: ReceiptType, - pub message_sender: Jid, } #[derive(Debug, Clone, Serialize)]