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..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 ); } @@ -1955,35 +1956,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,11 @@ fn generate_component_impl( } hyperware_process_lib::Message::Request { .. } => { 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, http_server_request, message.blob()); + } else { + 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" {