Skip to content

Commit

Permalink
Merge pull request #15 from roburio/fix
Browse files Browse the repository at this point in the history
request: pass response in body_f, so that an unsuccessful response can be discarded or logged
  • Loading branch information
hannesm authored Nov 3, 2022
2 parents 14fe3e8 + 04e75bb commit dc2dd80
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 29 deletions.
2 changes: 1 addition & 1 deletion app/hurl.ml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ let jump () protocol uri meth headers input output no_follow =
let fd = Unix.openfile fn [ Unix.O_WRONLY ] 0o644 in
fd, fun () -> Unix.close fd
in
let reply () data =
let reply _response () data =
let bytes = Bytes.of_string data in
let blen = String.length data in
let written = Unix.write fd bytes 0 blen in
Expand Down
53 changes: 26 additions & 27 deletions src/http_lwt_client.ml
Original file line number Diff line number Diff line change
Expand Up @@ -114,28 +114,28 @@ let single_http_1_1_request ?config fd user_pass host meth path headers body f f
Lwt.wakeup_later notify_finished v;
w := true
in
let on_eof response data () =
let headers =
H2.Headers.of_list (Httpaf.Headers.to_list response.Httpaf.Response.headers)
in
let response : response = {
version = response.Httpaf.Response.version ;
status = (response.Httpaf.Response.status :> H2.Status.t) ;
reason = response.Httpaf.Response.reason ;
headers
} in
wakeup (Ok (response, data))
let on_eof response data () = wakeup (Ok (response, data))
in
let response_handler response response_body =
let response : response =
{
version = response.Httpaf.Response.version ;
status = (response.Httpaf.Response.status :> H2.Status.t) ;
reason = response.Httpaf.Response.reason ;
headers =
H2.Headers.of_list
(Httpaf.Headers.to_list response.Httpaf.Response.headers)
}
in
let open Lwt.Infix in
let rec on_read on_eof data bs ~off ~len =
let data =
data >>= fun data ->
f data (Bigstringaf.substring ~off ~len bs)
let rec on_read on_eof acc bs ~off ~len =
let acc =
acc >>= fun acc ->
f response acc (Bigstringaf.substring ~off ~len bs)
in
Httpaf.Body.schedule_read response_body
~on_read:(on_read on_eof data)
~on_eof:(on_eof response data)
~on_read:(on_read on_eof acc)
~on_eof:(on_eof response acc)
in
let f_init = Lwt.return f_init in
Httpaf.Body.schedule_read response_body
Expand Down Expand Up @@ -178,25 +178,24 @@ let single_h2_request ?config fd scheme user_pass host meth path headers body f
Lwt.wakeup_later notify_finished v;
w := true
in
let on_eof response data () =
let on_eof response data () = wakeup (Ok (response, data))
in
let response_handler response response_body =
let response : response = {
version = { major = 2 ; minor = 0 } ;
status = response.H2.Response.status ;
reason = "" ;
headers = response.H2.Response.headers ;
} in
wakeup (Ok (response, data))
in
let response_handler response response_body =
let open Lwt.Infix in
let rec on_read on_eof data bs ~off ~len =
let data =
data >>= fun data ->
f data (Bigstringaf.substring ~off ~len bs)
let rec on_read on_eof acc bs ~off ~len =
let acc =
acc >>= fun acc ->
f response acc (Bigstringaf.substring ~off ~len bs)
in
H2.Body.Reader.schedule_read response_body
~on_read:(on_read on_eof data)
~on_eof:(on_eof response data)
~on_read:(on_read on_eof acc)
~on_eof:(on_eof response acc)
in
let f_init = Lwt.return f_init in
H2.Body.Reader.schedule_read response_body
Expand Down
2 changes: 1 addition & 1 deletion src/http_lwt_client.mli
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,6 @@ val request
-> ?follow_redirect:bool
-> ?happy_eyeballs:Happy_eyeballs_lwt.t
-> string
-> ('a -> string -> 'a Lwt.t)
-> (response -> 'a -> string -> 'a Lwt.t)
-> 'a
-> (response * 'a, [> `Msg of string ]) Lwt_result.t

0 comments on commit dc2dd80

Please sign in to comment.