base: Remove some unnecessary mutable borrows of the olm machine.
parent
d96142b8cb
commit
d5cd608045
|
@ -721,9 +721,9 @@ impl BaseClient {
|
||||||
ref mut encrypted_event,
|
ref mut encrypted_event,
|
||||||
)) = e
|
)) = e
|
||||||
{
|
{
|
||||||
let mut olm = self.olm.lock().await;
|
let olm = self.olm.lock().await;
|
||||||
|
|
||||||
if let Some(o) = &mut *olm {
|
if let Some(o) = &*olm {
|
||||||
if let Ok(decrypted) = o.decrypt_room_event(&encrypted_event, room_id).await
|
if let Ok(decrypted) = o.decrypt_room_event(&encrypted_event, room_id).await
|
||||||
{
|
{
|
||||||
if let Ok(d) = decrypted.deserialize() {
|
if let Ok(d) = decrypted.deserialize() {
|
||||||
|
@ -937,9 +937,9 @@ impl BaseClient {
|
||||||
|
|
||||||
#[cfg(feature = "encryption")]
|
#[cfg(feature = "encryption")]
|
||||||
{
|
{
|
||||||
let mut olm = self.olm.lock().await;
|
let olm = self.olm.lock().await;
|
||||||
|
|
||||||
if let Some(o) = &mut *olm {
|
if let Some(o) = &*olm {
|
||||||
// Let the crypto machine handle the sync response, this
|
// Let the crypto machine handle the sync response, this
|
||||||
// decryptes to-device events, but leaves room events alone.
|
// decryptes to-device events, but leaves room events alone.
|
||||||
// This makes sure that we have the deryption keys for the room
|
// This makes sure that we have the deryption keys for the room
|
||||||
|
@ -1033,9 +1033,9 @@ impl BaseClient {
|
||||||
|
|
||||||
#[cfg(feature = "encryption")]
|
#[cfg(feature = "encryption")]
|
||||||
{
|
{
|
||||||
let mut olm = self.olm.lock().await;
|
let olm = self.olm.lock().await;
|
||||||
|
|
||||||
if let Some(o) = &mut *olm {
|
if let Some(o) = &*olm {
|
||||||
let room = matrix_room.read().await;
|
let room = matrix_room.read().await;
|
||||||
|
|
||||||
// If the room is encrypted, update the tracked users.
|
// If the room is encrypted, update the tracked users.
|
||||||
|
@ -1275,9 +1275,9 @@ impl BaseClient {
|
||||||
&self,
|
&self,
|
||||||
users: impl Iterator<Item = &UserId>,
|
users: impl Iterator<Item = &UserId>,
|
||||||
) -> Result<BTreeMap<UserId, BTreeMap<Box<DeviceId>, KeyAlgorithm>>> {
|
) -> Result<BTreeMap<UserId, BTreeMap<Box<DeviceId>, KeyAlgorithm>>> {
|
||||||
let mut olm = self.olm.lock().await;
|
let olm = self.olm.lock().await;
|
||||||
|
|
||||||
match &mut *olm {
|
match &*olm {
|
||||||
Some(o) => Ok(o.get_missing_sessions(users).await?),
|
Some(o) => Ok(o.get_missing_sessions(users).await?),
|
||||||
None => Ok(BTreeMap::new()),
|
None => Ok(BTreeMap::new()),
|
||||||
}
|
}
|
||||||
|
@ -1313,9 +1313,9 @@ impl BaseClient {
|
||||||
room_id: &RoomId,
|
room_id: &RoomId,
|
||||||
content: MsgEventContent,
|
content: MsgEventContent,
|
||||||
) -> Result<EncryptedEventContent> {
|
) -> Result<EncryptedEventContent> {
|
||||||
let mut olm = self.olm.lock().await;
|
let olm = self.olm.lock().await;
|
||||||
|
|
||||||
match &mut *olm {
|
match &*olm {
|
||||||
Some(o) => Ok(o.encrypt(room_id, content).await?),
|
Some(o) => Ok(o.encrypt(room_id, content).await?),
|
||||||
None => panic!("Olm machine wasn't started"),
|
None => panic!("Olm machine wasn't started"),
|
||||||
}
|
}
|
||||||
|
@ -1363,9 +1363,9 @@ impl BaseClient {
|
||||||
#[cfg(feature = "encryption")]
|
#[cfg(feature = "encryption")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "encryption")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "encryption")))]
|
||||||
pub async fn receive_keys_upload_response(&self, response: &KeysUploadResponse) -> Result<()> {
|
pub async fn receive_keys_upload_response(&self, response: &KeysUploadResponse) -> Result<()> {
|
||||||
let mut olm = self.olm.lock().await;
|
let olm = self.olm.lock().await;
|
||||||
|
|
||||||
let o = olm.as_mut().expect("Client isn't logged in.");
|
let o = olm.as_ref().expect("Client isn't logged in.");
|
||||||
o.receive_keys_upload_response(response).await?;
|
o.receive_keys_upload_response(response).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1382,9 +1382,9 @@ impl BaseClient {
|
||||||
#[cfg(feature = "encryption")]
|
#[cfg(feature = "encryption")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "encryption")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "encryption")))]
|
||||||
pub async fn receive_keys_claim_response(&self, response: &KeysClaimResponse) -> Result<()> {
|
pub async fn receive_keys_claim_response(&self, response: &KeysClaimResponse) -> Result<()> {
|
||||||
let mut olm = self.olm.lock().await;
|
let olm = self.olm.lock().await;
|
||||||
|
|
||||||
let o = olm.as_mut().expect("Client isn't logged in.");
|
let o = olm.as_ref().expect("Client isn't logged in.");
|
||||||
o.receive_keys_claim_response(response).await?;
|
o.receive_keys_claim_response(response).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1401,9 +1401,9 @@ impl BaseClient {
|
||||||
#[cfg(feature = "encryption")]
|
#[cfg(feature = "encryption")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "encryption")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "encryption")))]
|
||||||
pub async fn receive_keys_query_response(&self, response: &KeysQueryResponse) -> Result<()> {
|
pub async fn receive_keys_query_response(&self, response: &KeysQueryResponse) -> Result<()> {
|
||||||
let mut olm = self.olm.lock().await;
|
let olm = self.olm.lock().await;
|
||||||
|
|
||||||
let o = olm.as_mut().expect("Client isn't logged in.");
|
let o = olm.as_ref().expect("Client isn't logged in.");
|
||||||
o.receive_keys_query_response(response).await?;
|
o.receive_keys_query_response(response).await?;
|
||||||
// TODO notify our callers of new devices via some callback.
|
// TODO notify our callers of new devices via some callback.
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -213,7 +213,7 @@ impl OlmMachine {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Update the count of one-time keys that are currently on the server.
|
/// Update the count of one-time keys that are currently on the server.
|
||||||
fn update_key_count(&mut self, count: u64) {
|
fn update_key_count(&self, count: u64) {
|
||||||
self.account.update_uploaded_key_count(count);
|
self.account.update_uploaded_key_count(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ impl OlmMachine {
|
||||||
/// performed.
|
/// performed.
|
||||||
#[instrument]
|
#[instrument]
|
||||||
pub async fn receive_keys_upload_response(
|
pub async fn receive_keys_upload_response(
|
||||||
&mut self,
|
&self,
|
||||||
response: &keys::upload_keys::Response,
|
response: &keys::upload_keys::Response,
|
||||||
) -> OlmResult<()> {
|
) -> OlmResult<()> {
|
||||||
if !self.account.shared() {
|
if !self.account.shared() {
|
||||||
|
@ -275,7 +275,7 @@ impl OlmMachine {
|
||||||
/// `users` - The list of users that we should check if we lack a session
|
/// `users` - The list of users that we should check if we lack a session
|
||||||
/// with one of their devices.
|
/// with one of their devices.
|
||||||
pub async fn get_missing_sessions(
|
pub async fn get_missing_sessions(
|
||||||
&mut self,
|
&self,
|
||||||
users: impl Iterator<Item = &UserId>,
|
users: impl Iterator<Item = &UserId>,
|
||||||
) -> OlmResult<BTreeMap<UserId, BTreeMap<Box<DeviceId>, KeyAlgorithm>>> {
|
) -> OlmResult<BTreeMap<UserId, BTreeMap<Box<DeviceId>, KeyAlgorithm>>> {
|
||||||
let mut missing = BTreeMap::new();
|
let mut missing = BTreeMap::new();
|
||||||
|
@ -320,7 +320,7 @@ impl OlmMachine {
|
||||||
///
|
///
|
||||||
/// * `response` - The response containing the claimed one-time keys.
|
/// * `response` - The response containing the claimed one-time keys.
|
||||||
pub async fn receive_keys_claim_response(
|
pub async fn receive_keys_claim_response(
|
||||||
&mut self,
|
&self,
|
||||||
response: &keys::claim_keys::Response,
|
response: &keys::claim_keys::Response,
|
||||||
) -> OlmResult<()> {
|
) -> OlmResult<()> {
|
||||||
// TODO log the failures here
|
// TODO log the failures here
|
||||||
|
@ -377,7 +377,7 @@ impl OlmMachine {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_devices_from_key_query(
|
async fn handle_devices_from_key_query(
|
||||||
&mut self,
|
&self,
|
||||||
device_keys_map: &BTreeMap<UserId, BTreeMap<Box<DeviceId>, DeviceKeys>>,
|
device_keys_map: &BTreeMap<UserId, BTreeMap<Box<DeviceId>, DeviceKeys>>,
|
||||||
) -> StoreResult<Vec<Device>> {
|
) -> StoreResult<Vec<Device>> {
|
||||||
let mut changed_devices = Vec::new();
|
let mut changed_devices = Vec::new();
|
||||||
|
@ -471,7 +471,7 @@ impl OlmMachine {
|
||||||
/// * `response` - The keys query response of the request that the client
|
/// * `response` - The keys query response of the request that the client
|
||||||
/// performed.
|
/// performed.
|
||||||
pub async fn receive_keys_query_response(
|
pub async fn receive_keys_query_response(
|
||||||
&mut self,
|
&self,
|
||||||
response: &keys::get_keys::Response,
|
response: &keys::get_keys::Response,
|
||||||
) -> OlmResult<Vec<Device>> {
|
) -> OlmResult<Vec<Device>> {
|
||||||
let changed_devices = self
|
let changed_devices = self
|
||||||
|
@ -500,7 +500,7 @@ impl OlmMachine {
|
||||||
/// This try to decrypt an Olm message using all the sessions we share
|
/// This try to decrypt an Olm message using all the sessions we share
|
||||||
/// have with the given sender.
|
/// have with the given sender.
|
||||||
async fn try_decrypt_olm_message(
|
async fn try_decrypt_olm_message(
|
||||||
&mut self,
|
&self,
|
||||||
sender: &UserId,
|
sender: &UserId,
|
||||||
sender_key: &str,
|
sender_key: &str,
|
||||||
message: &OlmMessage,
|
message: &OlmMessage,
|
||||||
|
@ -562,7 +562,7 @@ impl OlmMachine {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn decrypt_olm_message(
|
async fn decrypt_olm_message(
|
||||||
&mut self,
|
&self,
|
||||||
sender: &UserId,
|
sender: &UserId,
|
||||||
sender_key: &str,
|
sender_key: &str,
|
||||||
message: OlmMessage,
|
message: OlmMessage,
|
||||||
|
@ -698,7 +698,7 @@ impl OlmMachine {
|
||||||
///
|
///
|
||||||
/// * `event` - The to-device event that should be decrypted.
|
/// * `event` - The to-device event that should be decrypted.
|
||||||
async fn decrypt_to_device_event(
|
async fn decrypt_to_device_event(
|
||||||
&mut self,
|
&self,
|
||||||
event: &ToDeviceEvent<EncryptedEventContent>,
|
event: &ToDeviceEvent<EncryptedEventContent>,
|
||||||
) -> OlmResult<Raw<AnyToDeviceEvent>> {
|
) -> OlmResult<Raw<AnyToDeviceEvent>> {
|
||||||
info!("Decrypting to-device event");
|
info!("Decrypting to-device event");
|
||||||
|
@ -760,7 +760,7 @@ impl OlmMachine {
|
||||||
|
|
||||||
/// Create a group session from a room key and add it to our crypto store.
|
/// Create a group session from a room key and add it to our crypto store.
|
||||||
async fn add_room_key(
|
async fn add_room_key(
|
||||||
&mut self,
|
&self,
|
||||||
sender_key: &str,
|
sender_key: &str,
|
||||||
signing_key: &str,
|
signing_key: &str,
|
||||||
event: &mut ToDeviceEvent<RoomKeyEventContent>,
|
event: &mut ToDeviceEvent<RoomKeyEventContent>,
|
||||||
|
@ -867,7 +867,7 @@ impl OlmMachine {
|
||||||
///
|
///
|
||||||
/// * `content` - The content of the event that should be encrypted.
|
/// * `content` - The content of the event that should be encrypted.
|
||||||
async fn olm_encrypt(
|
async fn olm_encrypt(
|
||||||
&mut self,
|
&self,
|
||||||
recipient_device: &Device,
|
recipient_device: &Device,
|
||||||
event_type: EventType,
|
event_type: EventType,
|
||||||
content: Value,
|
content: Value,
|
||||||
|
@ -1038,7 +1038,7 @@ impl OlmMachine {
|
||||||
///
|
///
|
||||||
/// * `event` - The decrypted to-device event.
|
/// * `event` - The decrypted to-device event.
|
||||||
async fn handle_decrypted_to_device_event(
|
async fn handle_decrypted_to_device_event(
|
||||||
&mut self,
|
&self,
|
||||||
sender_key: &str,
|
sender_key: &str,
|
||||||
signing_key: &str,
|
signing_key: &str,
|
||||||
event: &Raw<AnyToDeviceEvent>,
|
event: &Raw<AnyToDeviceEvent>,
|
||||||
|
@ -1101,7 +1101,7 @@ impl OlmMachine {
|
||||||
///
|
///
|
||||||
/// * `response` - The sync latest sync response.
|
/// * `response` - The sync latest sync response.
|
||||||
#[instrument(skip(response))]
|
#[instrument(skip(response))]
|
||||||
pub async fn receive_sync_response(&mut self, response: &mut SyncResponse) {
|
pub async fn receive_sync_response(&self, response: &mut SyncResponse) {
|
||||||
self.verification_machine.garbage_collect();
|
self.verification_machine.garbage_collect();
|
||||||
|
|
||||||
let one_time_key_count = response
|
let one_time_key_count = response
|
||||||
|
@ -1167,7 +1167,7 @@ impl OlmMachine {
|
||||||
///
|
///
|
||||||
/// * `room_id` - The ID of the room where the event was sent to.
|
/// * `room_id` - The ID of the room where the event was sent to.
|
||||||
pub async fn decrypt_room_event(
|
pub async fn decrypt_room_event(
|
||||||
&mut self,
|
&self,
|
||||||
event: &SyncMessageEvent<EncryptedEventContent>,
|
event: &SyncMessageEvent<EncryptedEventContent>,
|
||||||
room_id: &RoomId,
|
room_id: &RoomId,
|
||||||
) -> MegolmResult<Raw<AnySyncRoomEvent>> {
|
) -> MegolmResult<Raw<AnySyncRoomEvent>> {
|
||||||
|
@ -1204,7 +1204,7 @@ impl OlmMachine {
|
||||||
/// key query.
|
/// key query.
|
||||||
///
|
///
|
||||||
/// Returns true if the user was queued up for a key query, false otherwise.
|
/// Returns true if the user was queued up for a key query, false otherwise.
|
||||||
pub async fn mark_user_as_changed(&mut self, user_id: &UserId) -> StoreResult<bool> {
|
pub async fn mark_user_as_changed(&self, user_id: &UserId) -> StoreResult<bool> {
|
||||||
if self.store.read().await.tracked_users().contains(user_id) {
|
if self.store.read().await.tracked_users().contains(user_id) {
|
||||||
self.store
|
self.store
|
||||||
.write()
|
.write()
|
||||||
|
@ -1231,7 +1231,7 @@ impl OlmMachine {
|
||||||
/// considered for a key query.
|
/// considered for a key query.
|
||||||
///
|
///
|
||||||
/// Use the `mark_user_as_changed()` if the user really needs a key query.
|
/// Use the `mark_user_as_changed()` if the user really needs a key query.
|
||||||
pub async fn update_tracked_users<'a, I>(&mut self, users: I)
|
pub async fn update_tracked_users<'a, I>(&self, users: I)
|
||||||
where
|
where
|
||||||
I: IntoIterator<Item = &'a UserId>,
|
I: IntoIterator<Item = &'a UserId>,
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue