diff --git a/Cargo.lock b/Cargo.lock index 2e208b1..32d7a52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -667,9 +667,9 @@ checksum = "1a9fcbcc408c5526c3ab80d534e5c86e7967c1fb7aa0a8c76abd1edc27deb877" [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ "ctutils", "typenum", diff --git a/example/Cargo.lock b/example/Cargo.lock index 0d5ae64..3ca21d9 100644 --- a/example/Cargo.lock +++ b/example/Cargo.lock @@ -908,6 +908,7 @@ dependencies = [ "mtp-crypto", "mtp-transport", "rand 0.8.6", + "tokio", ] [[package]] @@ -957,6 +958,7 @@ dependencies = [ "mtp-crypto", "mtp-transport", "rand 0.8.6", + "tokio", ] [[package]] diff --git a/example/server/src/handlers.rs b/example/server/src/handlers.rs index 941d468..5a797d3 100644 --- a/example/server/src/handlers.rs +++ b/example/server/src/handlers.rs @@ -27,9 +27,9 @@ pub fn process_and_respond( let value_id = DataTypeId(tm.data_id_enum(DataType::Value).unwrap()); let bin_id = DataTypeId(tm.data_id_enum(DataType::BinaryData).unwrap()); let items_id = DataTypeId(tm.data_id_enum(DataType::Items).unwrap()); - let enc_id = DataTypeId(tm.data_id_enum(DataType::EncryptedPayload).unwrap()); - let sig_id = DataTypeId(tm.data_id_enum(DataType::SignedPayload).unwrap()); - let secure_id = DataTypeId(tm.data_id_enum(DataType::SecurePayload).unwrap()); + let _enc_id = DataTypeId(tm.data_id_enum(DataType::EncryptedPayload).unwrap()); + let _sig_id = DataTypeId(tm.data_id_enum(DataType::SignedPayload).unwrap()); + let _secure_id = DataTypeId(tm.data_id_enum(DataType::SecurePayload).unwrap()); let description = msg.get_data(DataType::Description); let timestamp = msg.get_data(DataType::Timestamp); diff --git a/example/server/src/main.rs b/example/server/src/main.rs index 7280f2c..a9854a2 100644 --- a/example/server/src/main.rs +++ b/example/server/src/main.rs @@ -5,7 +5,9 @@ mod tls; use mtp::host::{HostConfig, MTPHost}; use mtp::type_map::TypeMap; +use std::future::Future; use std::path::Path; +use std::pin::Pin; fn dev_cert_paths() -> (String, String) { let cert = std::env::var("MTP_DEV_CERT").unwrap_or_else(|_| { @@ -44,34 +46,42 @@ async fn main() -> Result<(), Box> { let (clients, next_id) = clients::load_client_db("clients.json")?; let clients_for_get = clients.clone(); - let get_existing_user = move |id: u64| -> Option { - let result = clients_for_get.lock().unwrap().get(&id).cloned(); - if result.is_some() { - println!("Auth lookup: client ID {id} found"); - } else { - eprintln!("Auth lookup: unknown client ID {id}"); - } - result + let get_existing_user = move |id: u64| { + let clients = clients_for_get.clone(); + Box::pin(async move { + let result = clients.lock().unwrap().get(&id).cloned(); + if result.is_some() { + println!("Auth lookup: client ID {id} found"); + } else { + eprintln!("Auth lookup: unknown client ID {id}"); + } + result + }) as Pin> + Send>> }; let clients_for_register = clients.clone(); let next_id_for_register = next_id.clone(); let clients_path = "clients.json".to_string(); - let complete_register = move |bundle: mtp::crypto::PublicKeyBundle| -> u64 { - let mut db = clients_for_register.lock().unwrap(); - let mut nid = next_id_for_register.lock().unwrap(); - let id = *nid; - *nid += 1; - db.insert(id, bundle); - match serde_json::to_string_pretty(&*db) { - Ok(json) => match std::fs::write(&clients_path, json) { - Ok(()) => {} - Err(e) => eprintln!("Failed to persist client database to {clients_path}: {e}"), - }, - Err(e) => eprintln!("Failed to serialize client database after registering {id}: {e}"), - } - println!("Registered new client with ID: {}", id); - id + let complete_register = move |bundle: mtp::crypto::PublicKeyBundle| { + let db_arc = clients_for_register.clone(); + let nid_arc = next_id_for_register.clone(); + let path = clients_path.clone(); + Box::pin(async move { + let mut db = db_arc.lock().unwrap(); + let mut nid = nid_arc.lock().unwrap(); + let id = *nid; + *nid += 1; + db.insert(id, bundle); + match serde_json::to_string_pretty(&*db) { + Ok(json) => match std::fs::write(&path, json) { + Ok(()) => {} + Err(e) => eprintln!("Failed to persist client database to {path}: {e}"), + }, + Err(e) => eprintln!("Failed to serialize client database after registering {id}: {e}"), + } + println!("Registered new client with ID: {}", id); + id + }) as Pin + Send>> }; println!("Starting MTP server on port 8080 ..."); diff --git a/type-map/build.rs b/type-map/build.rs index ea8e09c..91c342e 100755 --- a/type-map/build.rs +++ b/type-map/build.rs @@ -905,7 +905,7 @@ fn generate_all_types_methods( write!(out, "CommunicationType::{}", entry.name).unwrap(); first = false; } - for (name, _) in &tm_cfg.communication_types { + for name in tm_cfg.communication_types.keys() { if !first { write!(out, ", ").unwrap(); } @@ -936,7 +936,7 @@ fn generate_all_types_methods( write!(out, "DataType::{}", entry.name).unwrap(); first = false; } - for (name, _) in &tm_cfg.data_types { + for name in tm_cfg.data_types.keys() { if !first { write!(out, ", ").unwrap(); } @@ -973,7 +973,7 @@ fn generate_all_types_methods_single(out: &mut String, config: &Config) { first = false; } if let Some(tm_cfg) = tm_cfg { - for (name, _) in &tm_cfg.communication_types { + for name in tm_cfg.communication_types.keys() { if !first { write!(out, ", ").unwrap(); } @@ -1003,7 +1003,7 @@ fn generate_all_types_methods_single(out: &mut String, config: &Config) { first = false; } if let Some(tm_cfg) = tm_cfg { - for (name, _) in &tm_cfg.data_types { + for name in tm_cfg.data_types.keys() { if !first { write!(out, ", ").unwrap(); } diff --git a/wasm/src/frame.rs b/wasm/src/frame.rs index 04cbcd8..d003bda 100644 --- a/wasm/src/frame.rs +++ b/wasm/src/frame.rs @@ -254,26 +254,26 @@ pub fn parse_auth_response(response: &[u8]) -> Result { .map_err(|e| js_error(&format!("parse failed: {}", e)))?; let connected = matches!( - comm.get_data(DataType::Connected)), + comm.get_data(DataType::Connected), DataValue::BoolTrue ); - let client_nonce = match comm.get_data(DataType::ClientNonce)) { + let client_nonce = match comm.get_data(DataType::ClientNonce) { DataValue::UnsignedNumber(n) => Some(*n), _ => None, }; - let assigned_id = match comm.get_data(DataType::Id)) { + let assigned_id = match comm.get_data(DataType::Id) { DataValue::UnsignedNumber(n) => Some(*n as u64), _ => None, }; - let timestamp = match comm.get_data(DataType::Timestamp)) { + let timestamp = match comm.get_data(DataType::Timestamp) { DataValue::UnsignedNumber(n) => Some(*n), _ => None, }; - let signature = match comm.get_data(DataType::Signature)) { + let signature = match comm.get_data(DataType::Signature) { DataValue::Bytes(b) => Some(b.clone()), _ => None, };