From e5191f0fd77e03102ed051b43d6264c30bd09c2e Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 15 Apr 2024 15:04:44 -0400 Subject: [PATCH] fix: give the correct code+error if protocol upgrade fails --- src/core/server.ml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/core/server.ml b/src/core/server.ml index f64ed167..ded29518 100644 --- a/src/core/server.ml +++ b/src/core/server.ml @@ -364,14 +364,14 @@ let client_handle_for (self : t) ~client_addr ic oc : unit = let handle_upgrade ~(middlewares : Head_middleware.t list) req (module UP : UPGRADE_HANDLER) : unit = + Log.debug (fun k -> k "upgrade connection"); + + let send_resp resp = + log_response req resp; + Response.Private_.output_ ~bytes:bytes_res oc resp + in + try - Log.debug (fun k -> k "upgrade connection"); - - let send_resp resp = - log_response req resp; - Response.Private_.output_ ~bytes:bytes_res oc resp - in - (* apply head middlewares *) let req = List.fold_left Head_middleware.apply' req middlewares in @@ -399,7 +399,9 @@ let client_handle_for (self : t) ~client_addr ic oc : unit = (* handshake successful, proceed with the upgrade handler *) UP.handle_connection handshake_st ic oc - with e -> + with + | Bad_req (code, err) -> send_resp @@ Response.make_raw ~code err + | e -> let bt = Printexc.get_raw_backtrace () in handle_bad_req req e bt in