Skip to content

Commit

Permalink
cohttp-eio: server: return connection header
Browse files Browse the repository at this point in the history
  • Loading branch information
ushitora-anqou committed Mar 10, 2024
1 parent 638c52e commit b6db33e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
16 changes: 15 additions & 1 deletion cohttp-eio/src/server.ml
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,21 @@ let callback { conn_closed; handler } ((_, peer_address) as conn) input output =
let () =
try
match handler (conn, id) request body with
| `Response (response, body) -> write output response body
| `Response (response, body) ->
let keep_alive =
Http.Request.is_keep_alive request
&& Http.Response.is_keep_alive response
in
let response =
let headers =
Http.Header.add_unless_exists
(Http.Response.headers response)
"connection"
(if keep_alive then "keep-alive" else "close")
in
{ response with Http.Response.headers }
in
write output response body
| `Expert (response, handler) ->
let () = Io.Response.write_header response output in
handler input output
Expand Down
8 changes: 6 additions & 2 deletions cohttp-eio/tests/test.ml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ let () =
[ Cstruct.of_string "GET / HTTP/1.1\r\nconnection: close\r\n\r\n" ]
in
Alcotest.(check ~here:[%here] string)
"response" "HTTP/1.1 200 OK\r\ncontent-length: 4\r\n\r\nroot"
"response"
"HTTP/1.1 200 OK\r\nconnection: close\r\ncontent-length: 4\r\n\r\nroot"
Eio.Buf_read.(of_flow ~max_size:max_int socket |> take_all)
and missing socket =
let () =
Expand All @@ -54,7 +55,8 @@ let () =
]
in
Alcotest.(check ~here:[%here] string)
"response" "HTTP/1.1 404 Not Found\r\ncontent-length: 0\r\n\r\n"
"response"
"HTTP/1.1 404 Not Found\r\nconnection: close\r\ncontent-length: 0\r\n\r\n"
Eio.Buf_read.(of_flow ~max_size:max_int socket |> take_all)
and streaming_response socket =
let () =
Expand All @@ -66,6 +68,7 @@ let () =
Alcotest.(check ~here:[%here] string)
"response"
"HTTP/1.1 200 OK\r\n\
connection: close\r\n\
transfer-encoding: chunked\r\n\
\r\n\
5\r\n\
Expand All @@ -90,6 +93,7 @@ let () =
Alcotest.(check ~here:[%here] string)
"response"
"HTTP/1.1 200 OK\r\n\
connection: close\r\n\
transfer-encoding: chunked\r\n\
\r\n\
c\r\n\
Expand Down

0 comments on commit b6db33e

Please sign in to comment.