refactor(ffi): Add HeaderCaseMap preserving http1 header casing

This commit is contained in:
Sean McArthur
2021-01-07 17:22:12 -08:00
parent 3ae1581a53
commit 4c32daeea0
12 changed files with 321 additions and 35 deletions

View File

@@ -44,6 +44,8 @@ where
error: None,
keep_alive: KA::Busy,
method: None,
#[cfg(feature = "ffi")]
preserve_header_case: false,
title_case_headers: false,
notify_read: false,
reading: Reading::Init,
@@ -142,6 +144,8 @@ where
ParseContext {
cached_headers: &mut self.state.cached_headers,
req_method: &mut self.state.method,
#[cfg(feature = "ffi")]
preserve_header_case: self.state.preserve_header_case,
}
)) {
Ok(msg) => msg,
@@ -474,6 +478,16 @@ where
self.enforce_version(&mut head);
// Maybe check if we should preserve header casing on received
// message headers...
#[cfg(feature = "ffi")]
{
if T::is_client() && !self.state.preserve_header_case {
self.state.preserve_header_case =
head.extensions.get::<crate::ffi::HeaderCaseMap>().is_some();
}
}
let buf = self.io.headers_buf();
match super::role::encode_headers::<T>(
Encode {
@@ -736,6 +750,8 @@ struct State {
/// This is used to know things such as if the message can include
/// a body or not.
method: Option<Method>,
#[cfg(feature = "ffi")]
preserve_header_case: bool,
title_case_headers: bool,
/// Set to true when the Dispatcher should poll read operations
/// again. See the `maybe_notify` method for more.