From 9388e2f59aa6b09c254596f4f8181ed34ccf7631 Mon Sep 17 00:00:00 2001 From: Alois Date: Wed, 29 Jul 2026 02:37:18 +0200 Subject: [PATCH] (fix): stabilize iota replacement routing --- Cargo.lock | 32 ++++++++++++++++---------------- src/rho/connection.rs | 20 ++++++++++++++------ 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3f395d9..bf277ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -616,7 +616,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -1581,7 +1581,7 @@ dependencies = [ [[package]] name = "mtp" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "mtp-client", "mtp-codec", @@ -1597,7 +1597,7 @@ dependencies = [ [[package]] name = "mtp-client" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "mtp-codec", "mtp-common", @@ -1610,7 +1610,7 @@ dependencies = [ [[package]] name = "mtp-codec" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "base64 0.22.1", "byteorder", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "mtp-common" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "quinn", "rustls", @@ -1634,7 +1634,7 @@ dependencies = [ [[package]] name = "mtp-crypto" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "base64 0.22.1", "chacha20poly1305", @@ -1656,7 +1656,7 @@ dependencies = [ [[package]] name = "mtp-files" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "mtp-crypto", "rand 0.10.2", @@ -1667,7 +1667,7 @@ dependencies = [ [[package]] name = "mtp-host" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "mtp-codec", "mtp-common", @@ -1682,7 +1682,7 @@ dependencies = [ [[package]] name = "mtp-transport" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "async-trait", "mtp-codec", @@ -1700,7 +1700,7 @@ dependencies = [ [[package]] name = "mtp-type-map" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "serde", "serde_yaml", @@ -1709,7 +1709,7 @@ dependencies = [ [[package]] name = "mtp-webserver" version = "0.2.0" -source = "git+https://git.methanium.net/Methanium/mtp.git#6f673ba7f2834b95ce724babe131241df8a119c6" +source = "git+https://git.methanium.net/Methanium/mtp.git#a692bed326dbfc8eac1a05825f4a287cbab6fd3e" dependencies = [ "async-trait", "bytes", @@ -2327,7 +2327,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2581,7 +2581,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2640,7 +2640,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -3035,7 +3035,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -3596,7 +3596,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] diff --git a/src/rho/connection.rs b/src/rho/connection.rs index 02957fd..137929b 100755 --- a/src/rho/connection.rs +++ b/src/rho/connection.rs @@ -232,20 +232,25 @@ impl GeneralConnection { self.state.omega.clone().send_message(¬ify).await; let iota = IotaConnection::from_general(self.clone(), id).await; - let rho = Arc::new(RhoConnection::new(iota.clone(), Vec::new()).await); + let previous = self.state.rho.get_by_iota(id as i64).await; + let user_ids = match previous.as_ref() { + Some(previous) => previous.get_user_ids().await, + None => Vec::new(), + }; + let rho = Arc::new(RhoConnection::new(iota.clone(), user_ids).await); iota.set_rho_connection(rho.clone()).await; - if let Some(previous) = self.state.rho.get_by_iota(id as i64).await { + if let Some(previous) = previous { for client in previous.drain_client_connections() { client.set_rho_connection(rho.clone()).await; rho.add_client_connection(client).await; } } self.state.rho.add(rho).await; - self.load_iota_users(&iota, id).await; + self.load_iota_users(id).await; iota.start(); } - async fn load_iota_users(&self, iota: &Arc, iota_id: u64) { + async fn load_iota_users(&self, iota_id: u64) { let request = CommunicationValue::new(CommunicationType::GetIotaData) .add_typed_default(DataType::IotaId, DataValue::SignedNumber(iota_id.into())); let Ok(response) = self @@ -263,11 +268,14 @@ impl GeneralConnection { let user_ids = users .iter() .filter_map(|value| match value { - DataValue::SignedNumber(id) => Some(*id as u64), + DataValue::SignedNumber(id) => Some(*id as i64), _ => None, }) .collect(); - iota.set_user_ids(user_ids).await; + self.state + .rho + .replace_users_for_iota(iota_id as i64, user_ids) + .await; } async fn migrate_anonymous_client(self: &Arc) {