From 8b6cd15a448645a80d49a09074a76c977475c9e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Juki=C4=87?= Date: Thu, 2 Oct 2025 20:49:00 +0200 Subject: [PATCH 1/8] wip --- Cargo.lock | 2 +- src/lib.rs | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fe0f162..596623d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1628,7 +1628,7 @@ dependencies = [ [[package]] name = "hyperware_process_lib" version = "2.2.0" -source = "git+https://github.com/hyperware-ai/process_lib?rev=a16d47a#a16d47a2bfae7864e97d70a3914829b4e54a4033" +source = "git+https://github.com/hyperware-ai/process_lib?rev=b9f1ead#b9f1ead63356bfd4b60b337a380fef1be81d81c6" dependencies = [ "alloy", "alloy-primitives", diff --git a/src/lib.rs b/src/lib.rs index 2970aff..4328310 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2196,14 +2196,19 @@ fn generate_component_impl( }); } hyperware_process_lib::Message::Request { .. } => { + hyperware_process_lib::logging::debug!("received message: {:?}", message); if message.is_local() && message.source().process == "http-server:distro:sys" { - handle_http_server_message(&mut state, message); + if let Ok(http_server_request) = serde_json::from_slice::(message.body()) { + handle_http_server_message(&mut state, message); + } else { + // the only thing is that erroring will be clunky, because if there is a misformatted http message, we will parse it as a local message + // can add logging in the local message handler to say if there was a misformatted http msg it would have ended up there + handle_local_message(&mut state, message); + } } else if message.is_local() && message.source().process == "http-client:distro:sys" { handle_websocket_client_message(&mut state, message); } else if message.is_local() && message.source().process == "eth:distro:sys" { handle_eth_message(&mut state, message); - } else if message.is_local() { - handle_local_message(&mut state, message); } else { handle_remote_message(&mut state, message); } From 9285a7a6ff020259c9e9a22ae2b747e06b5399d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Juki=C4=87?= Date: Thu, 2 Oct 2025 21:11:59 +0200 Subject: [PATCH 2/8] wip --- src/lib.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 4328310..6a64cfa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1960,13 +1960,14 @@ fn generate_message_handlers( match serde_json::from_slice::(message.body()) { Ok(http_server_request) => { - match http_server_request { + match http_server_request.clone() { hyperware_process_lib::http::server::HttpServerRequest::Http(http_request) => { + hyperware_process_lib::logging::debug!("Processing HTTP request, message has blob: {}", blob_opt.is_some()); if let Some(ref blob) = blob_opt { hyperware_process_lib::logging::debug!("Blob size: {} bytes, content: {}", blob.bytes.len(), String::from_utf8_lossy(&blob.bytes[..std::cmp::min(200, blob.bytes.len())])); } - + hyperware_process_lib::logging::debug!("http_server_request: {:?}", http_server_request.clone()); #http_context_setup #http_request_parsing #http_dispatcher @@ -2100,7 +2101,7 @@ fn generate_component_impl( // Initialize logging hyperware_process_lib::logging::init_logging( hyperware_process_lib::logging::Level::DEBUG, - hyperware_process_lib::logging::Level::INFO, + hyperware_process_lib::logging::Level::DEBUG, None, Some((0, 0, 1, 1)), None ).unwrap(); } From 8c3d647e41a8f91f3bbd926b8dd83186006d47fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Juki=C4=87?= Date: Thu, 2 Oct 2025 21:24:09 +0200 Subject: [PATCH 3/8] works --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 6a64cfa..d91bde1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1668,6 +1668,7 @@ fn generate_http_handler_dispatcher( quote! { hyperware_process_lib::logging::debug!("Starting handler matching for {} {}", http_method, current_path); + if blob_opt.is_some() && !blob_opt.as_ref().unwrap().bytes.is_empty() { hyperware_process_lib::logging::debug!("Request has body, using two-phase matching"); @@ -2197,7 +2198,6 @@ fn generate_component_impl( }); } hyperware_process_lib::Message::Request { .. } => { - hyperware_process_lib::logging::debug!("received message: {:?}", message); if message.is_local() && message.source().process == "http-server:distro:sys" { if let Ok(http_server_request) = serde_json::from_slice::(message.body()) { handle_http_server_message(&mut state, message); From 998b79fa229df8e02f276fa08e3bcf0eee58daa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Juki=C4=87?= Date: Thu, 2 Oct 2025 22:42:51 +0200 Subject: [PATCH 4/8] cleanup --- src/lib.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index d91bde1..ffd8ede 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1668,7 +1668,6 @@ fn generate_http_handler_dispatcher( quote! { hyperware_process_lib::logging::debug!("Starting handler matching for {} {}", http_method, current_path); - if blob_opt.is_some() && !blob_opt.as_ref().unwrap().bytes.is_empty() { hyperware_process_lib::logging::debug!("Request has body, using two-phase matching"); @@ -1961,14 +1960,12 @@ fn generate_message_handlers( match serde_json::from_slice::(message.body()) { Ok(http_server_request) => { - match http_server_request.clone() { + match http_server_request { hyperware_process_lib::http::server::HttpServerRequest::Http(http_request) => { - hyperware_process_lib::logging::debug!("Processing HTTP request, message has blob: {}", blob_opt.is_some()); if let Some(ref blob) = blob_opt { hyperware_process_lib::logging::debug!("Blob size: {} bytes, content: {}", blob.bytes.len(), String::from_utf8_lossy(&blob.bytes[..std::cmp::min(200, blob.bytes.len())])); } - hyperware_process_lib::logging::debug!("http_server_request: {:?}", http_server_request.clone()); #http_context_setup #http_request_parsing #http_dispatcher @@ -2202,8 +2199,6 @@ fn generate_component_impl( if let Ok(http_server_request) = serde_json::from_slice::(message.body()) { handle_http_server_message(&mut state, message); } else { - // the only thing is that erroring will be clunky, because if there is a misformatted http message, we will parse it as a local message - // can add logging in the local message handler to say if there was a misformatted http msg it would have ended up there handle_local_message(&mut state, message); } } else if message.is_local() && message.source().process == "http-client:distro:sys" { From 858b9d8fa285fa38158a12633bafca7f5b82e350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Juki=C4=87?= Date: Thu, 2 Oct 2025 22:50:06 +0200 Subject: [PATCH 5/8] handlers finally correct --- src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index ffd8ede..bf33eca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2205,6 +2205,8 @@ fn generate_component_impl( handle_websocket_client_message(&mut state, message); } else if message.is_local() && message.source().process == "eth:distro:sys" { handle_eth_message(&mut state, message); + } else if message.is_local() { + handle_local_message(&mut state, message); } else { handle_remote_message(&mut state, message); } From e2ce5657d87ff87c3ab632f2ef582274df7fc3b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Juki=C4=87?= Date: Thu, 2 Oct 2025 22:52:27 +0200 Subject: [PATCH 6/8] reset logging level to info --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index bf33eca..5e67e4e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2099,7 +2099,7 @@ fn generate_component_impl( // Initialize logging hyperware_process_lib::logging::init_logging( hyperware_process_lib::logging::Level::DEBUG, - hyperware_process_lib::logging::Level::DEBUG, + hyperware_process_lib::logging::Level::INFO, None, Some((0, 0, 1, 1)), None ).unwrap(); } From c18867a816760ddc7be878792c6e1d6ab1ade3fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Juki=C4=87?= Date: Mon, 6 Oct 2025 10:46:54 +0200 Subject: [PATCH 7/8] pass http server req and blob --- src/lib.rs | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 5e67e4e..0c344d7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1955,34 +1955,21 @@ fn generate_message_handlers( #websocket_client_handler } /// Handle messages from the HTTP server - fn handle_http_server_message(state: *mut #self_ty, message: hyperware_process_lib::Message) { - let blob_opt = message.blob(); - - match serde_json::from_slice::(message.body()) { - Ok(http_server_request) => { - match http_server_request { - hyperware_process_lib::http::server::HttpServerRequest::Http(http_request) => { - hyperware_process_lib::logging::debug!("Processing HTTP request, message has blob: {}", blob_opt.is_some()); - if let Some(ref blob) = blob_opt { - hyperware_process_lib::logging::debug!("Blob size: {} bytes, content: {}", blob.bytes.len(), String::from_utf8_lossy(&blob.bytes[..std::cmp::min(200, blob.bytes.len())])); - } - #http_context_setup - #http_request_parsing - #http_dispatcher - }, - #websocket_handlers + fn handle_http_server_message(state: *mut #self_ty, http_server_request: hyperware_process_lib::http::server::HttpServerRequest, blob_opt: Option) { + match http_server_request { + hyperware_process_lib::http::server::HttpServerRequest::Http(http_request) => { + hyperware_process_lib::logging::debug!("Processing HTTP request, message has blob: {}", blob_opt.is_some()); + if let Some(ref blob) = blob_opt { + hyperware_process_lib::logging::debug!("Blob size: {} bytes, content: {}", blob.bytes.len(), String::from_utf8_lossy(&blob.bytes[..std::cmp::min(200, blob.bytes.len())])); } + #http_context_setup + #http_request_parsing + #http_dispatcher }, - Err(e) => { - hyperware_process_lib::logging::error!( - "Failed to parse HTTP server request: {}\n\ - This usually indicates a malformed message to the HTTP server.", - e - ); - } + #websocket_handlers } } - + #local_message_handler #remote_message_handler #eth_message_handler @@ -2197,7 +2184,7 @@ fn generate_component_impl( hyperware_process_lib::Message::Request { .. } => { if message.is_local() && message.source().process == "http-server:distro:sys" { if let Ok(http_server_request) = serde_json::from_slice::(message.body()) { - handle_http_server_message(&mut state, message); + handle_http_server_message(&mut state, http_server_request, message.blob()); } else { handle_local_message(&mut state, message); } From 7d75e54640b87d4c026c320ee6450d6a1b04b60f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jurij=20Juki=C4=87?= Date: Mon, 6 Oct 2025 10:53:56 +0200 Subject: [PATCH 8/8] add to error message --- src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 0c344d7..ec70445 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1881,7 +1881,8 @@ fn generate_local_message_handler( Source: {:?}\n\ Body: {}\n\ \n\ - 💡 This usually means the message format doesn't match any of your #[local] or #[remote] handlers.", + 💡 This usually means the message format doesn't match any of your #[local] or #[remote] handlers.\n\ + 💡 If you are sending an HTTP message, if it is malformed, it might have ended up in the local message handler.", e, message.source(), raw_body ); }