fix(ffi): on_informational callback had no headers

This commit is contained in:
Sean McArthur
2021-08-19 11:49:12 -07:00
parent adaa8b3f0e
commit 39b6d01aa0
4 changed files with 8 additions and 8 deletions

View File

@@ -148,7 +148,7 @@ static int print_each_header(void *userdata,
return HYPER_ITER_CONTINUE; return HYPER_ITER_CONTINUE;
} }
static void print_informational(void *userdata, const hyper_response *resp) { static void print_informational(void *userdata, hyper_response *resp) {
uint16_t http_status = hyper_response_status(resp); uint16_t http_status = hyper_response_status(resp);
printf("\nInformational (1xx): %d\n", http_status); printf("\nInformational (1xx): %d\n", http_status);

View File

@@ -207,7 +207,7 @@ typedef int (*hyper_body_foreach_callback)(void*, const struct hyper_buf*);
typedef int (*hyper_body_data_callback)(void*, struct hyper_context*, struct hyper_buf**); typedef int (*hyper_body_data_callback)(void*, struct hyper_context*, struct hyper_buf**);
typedef void (*hyper_request_on_informational_callback)(void*, const struct hyper_response*); typedef void (*hyper_request_on_informational_callback)(void*, struct hyper_response*);
typedef int (*hyper_headers_foreach_callback)(void*, const uint8_t*, size_t, const uint8_t*, size_t); typedef int (*hyper_headers_foreach_callback)(void*, const uint8_t*, size_t, const uint8_t*, size_t);
@@ -469,7 +469,7 @@ enum hyper_code hyper_request_set_body(struct hyper_request *req, struct hyper_b
`hyper_response *` which can be inspected as any other response. The `hyper_response *` which can be inspected as any other response. The
body of the response will always be empty. body of the response will always be empty.
NOTE: The `const hyper_response *` is just borrowed data, and will not NOTE: The `hyper_response *` is just borrowed data, and will not
be valid after the callback finishes. You must copy any data you wish be valid after the callback finishes. You must copy any data you wish
to persist. to persist.
*/ */

View File

@@ -34,7 +34,7 @@ pub(crate) struct OnInformational {
data: UserDataPointer, data: UserDataPointer,
} }
type hyper_request_on_informational_callback = extern "C" fn(*mut c_void, *const hyper_response); type hyper_request_on_informational_callback = extern "C" fn(*mut c_void, *mut hyper_response);
// ===== impl hyper_request ===== // ===== impl hyper_request =====
@@ -153,7 +153,7 @@ ffi_fn! {
/// `hyper_response *` which can be inspected as any other response. The /// `hyper_response *` which can be inspected as any other response. The
/// body of the response will always be empty. /// body of the response will always be empty.
/// ///
/// NOTE: The `const hyper_response *` is just borrowed data, and will not /// NOTE: The `hyper_response *` is just borrowed data, and will not
/// be valid after the callback finishes. You must copy any data you wish /// be valid after the callback finishes. You must copy any data you wish
/// to persist. /// to persist.
fn hyper_request_on_informational(req: *mut hyper_request, callback: hyper_request_on_informational_callback, data: *mut c_void) -> hyper_code { fn hyper_request_on_informational(req: *mut hyper_request, callback: hyper_request_on_informational_callback, data: *mut c_void) -> hyper_code {
@@ -437,7 +437,7 @@ unsafe fn raw_name_value(
impl OnInformational { impl OnInformational {
pub(crate) fn call(&mut self, resp: Response<Body>) { pub(crate) fn call(&mut self, resp: Response<Body>) {
let mut resp = hyper_response(resp); let mut resp = hyper_response::wrap(resp);
(self.func)(self.data.0, &mut resp); (self.func)(self.data.0, &mut resp);
} }
} }

View File

@@ -1,5 +1,5 @@
use std::fmt::{self, Write}; use std::fmt::{self, Write};
use std::mem::{self, MaybeUninit}; use std::mem::MaybeUninit;
#[cfg(any(test, feature = "server", feature = "ffi"))] #[cfg(any(test, feature = "server", feature = "ffi"))]
use bytes::Bytes; use bytes::Bytes;
@@ -360,7 +360,7 @@ impl Http1Transaction for Server {
} }
let orig_headers; let orig_headers;
let extensions = mem::take(&mut msg.head.extensions); let extensions = std::mem::take(&mut msg.head.extensions);
let orig_headers = match extensions.get::<HeaderCaseMap>() { let orig_headers = match extensions.get::<HeaderCaseMap>() {
None if msg.title_case_headers => { None if msg.title_case_headers => {
orig_headers = HeaderCaseMap::default(); orig_headers = HeaderCaseMap::default();