From b5967ca799e258c1d4e6cbb5ec5e54597735a551 Mon Sep 17 00:00:00 2001 From: Xevion Date: Mon, 23 Dec 2024 18:29:23 -0600 Subject: [PATCH] Send executables initial message, use filename not path --- src/main.rs | 10 ++++++++-- src/models.rs | 24 ++++++++++++++++++++---- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index f5920bc..f1e1109 100644 --- a/src/main.rs +++ b/src/main.rs @@ -89,7 +89,13 @@ async fn handle_socket(session_id: usize, websocket: WebSocket) { }); tokio::task::spawn(fut_handle_tx_buffer); - let mut store = STORE.lock().await; + let store = &mut *STORE.lock().await; + + // Create the executable message first, borrow issues + let executable_message = OutgoingMessage::Executables { + executables: store.executable_json(), + }; + let session = store .sessions .get_mut(&session_id) @@ -100,7 +106,7 @@ async fn handle_socket(session_id: usize, websocket: WebSocket) { id: session_id, session: session.clone(), }); - drop(store); + session.send_message(executable_message); // Handle incoming messages let fut = async move { diff --git a/src/models.rs b/src/models.rs index ed31fca..ef78308 100644 --- a/src/models.rs +++ b/src/models.rs @@ -94,15 +94,16 @@ impl<'a> State<'a> { let key_start = search(&data, pattern.as_bytes(), 0).unwrap(); let key_end = key_start + pattern.len(); - let filename = path::Path::new(&exe_path); - let name = filename.file_stem().unwrap().to_str().unwrap(); - let extension = match filename.extension() { + let path = path::Path::new(&exe_path); + let name = path.file_stem().unwrap().to_str().unwrap(); + let extension = match path.extension() { Some(s) => s.to_str().unwrap(), None => "", }; let exe = Executable { data, + filename: path.file_name().unwrap().to_str().unwrap().to_string(), name: name.to_string(), extension: extension.to_string(), key_start: key_start, @@ -141,11 +142,26 @@ impl<'a> State<'a> { return id; } + + pub fn executable_json(&self) -> Vec { + let mut executables = Vec::new(); + + for (key, exe) in &self.executables { + executables.push(ExecutableJson { + id: key.to_string(), + size: exe.data.len(), + filename: exe.filename.clone(), + }); + } + + return executables; + } } #[derive(Default, Clone, Debug)] pub struct Executable { - pub data: Vec, // the raw data of the executable + pub data: Vec, // the raw data of the executable + pub filename: String, pub name: String, // the name before the extension pub extension: String, // may be empty string pub key_start: usize, // the index of the byte where the key starts