chore: cargo fmt, clippy
This commit is contained in:
committed by
Sean McArthur
parent
e72d6dc189
commit
f46840f3fa
@@ -2,8 +2,8 @@ use super::{util, StreamDependency, StreamId};
|
||||
use crate::frame::{Error, Frame, Head, Kind};
|
||||
use crate::hpack;
|
||||
|
||||
use http::{uri, HeaderMap, Method, StatusCode, Uri};
|
||||
use http::header::{self, HeaderName, HeaderValue};
|
||||
use http::{uri, HeaderMap, Method, StatusCode, Uri};
|
||||
|
||||
use bytes::{Bytes, BytesMut};
|
||||
use string::String;
|
||||
@@ -118,12 +118,12 @@ impl Headers {
|
||||
/// Create a new HEADERS frame
|
||||
pub fn new(stream_id: StreamId, pseudo: Pseudo, fields: HeaderMap) -> Self {
|
||||
Headers {
|
||||
stream_id: stream_id,
|
||||
stream_id,
|
||||
stream_dep: None,
|
||||
header_block: HeaderBlock {
|
||||
fields: fields,
|
||||
fields,
|
||||
is_over_size: false,
|
||||
pseudo: pseudo,
|
||||
pseudo,
|
||||
},
|
||||
flags: HeadersFlag::default(),
|
||||
}
|
||||
@@ -137,11 +137,11 @@ impl Headers {
|
||||
stream_id,
|
||||
stream_dep: None,
|
||||
header_block: HeaderBlock {
|
||||
fields: fields,
|
||||
fields,
|
||||
is_over_size: false,
|
||||
pseudo: Pseudo::default(),
|
||||
},
|
||||
flags: flags,
|
||||
flags,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,7 +156,7 @@ impl Headers {
|
||||
|
||||
// Read the padding length
|
||||
if flags.is_padded() {
|
||||
if src.len() < 1 {
|
||||
if src.is_empty() {
|
||||
return Err(Error::MalformedMessage);
|
||||
}
|
||||
pad = src[0] as usize;
|
||||
@@ -195,19 +195,24 @@ impl Headers {
|
||||
|
||||
let headers = Headers {
|
||||
stream_id: head.stream_id(),
|
||||
stream_dep: stream_dep,
|
||||
stream_dep,
|
||||
header_block: HeaderBlock {
|
||||
fields: HeaderMap::new(),
|
||||
is_over_size: false,
|
||||
pseudo: Pseudo::default(),
|
||||
},
|
||||
flags: flags,
|
||||
flags,
|
||||
};
|
||||
|
||||
Ok((headers, src))
|
||||
}
|
||||
|
||||
pub fn load_hpack(&mut self, src: &mut BytesMut, max_header_list_size: usize, decoder: &mut hpack::Decoder) -> Result<(), Error> {
|
||||
pub fn load_hpack(
|
||||
&mut self,
|
||||
src: &mut BytesMut,
|
||||
max_header_list_size: usize,
|
||||
decoder: &mut hpack::Decoder,
|
||||
) -> Result<(), Error> {
|
||||
self.header_block.load(src, max_header_list_size, decoder)
|
||||
}
|
||||
|
||||
@@ -263,9 +268,9 @@ impl Headers {
|
||||
// Get the HEADERS frame head
|
||||
let head = self.head();
|
||||
|
||||
self.header_block.into_encoding()
|
||||
.encode(&head, encoder, dst, |_| {
|
||||
})
|
||||
self.header_block
|
||||
.into_encoding()
|
||||
.encode(&head, encoder, dst, |_| {})
|
||||
}
|
||||
|
||||
fn head(&self) -> Head {
|
||||
@@ -307,7 +312,7 @@ impl PushPromise {
|
||||
|
||||
// Read the padding length
|
||||
if flags.is_padded() {
|
||||
if src.len() < 1 {
|
||||
if src.is_empty() {
|
||||
return Err(Error::MalformedMessage);
|
||||
}
|
||||
|
||||
@@ -336,19 +341,24 @@ impl PushPromise {
|
||||
}
|
||||
|
||||
let frame = PushPromise {
|
||||
flags: flags,
|
||||
flags,
|
||||
header_block: HeaderBlock {
|
||||
fields: HeaderMap::new(),
|
||||
is_over_size: false,
|
||||
pseudo: Pseudo::default(),
|
||||
},
|
||||
promised_id: promised_id,
|
||||
promised_id,
|
||||
stream_id: head.stream_id(),
|
||||
};
|
||||
Ok((frame, src))
|
||||
}
|
||||
|
||||
pub fn load_hpack(&mut self, src: &mut BytesMut, max_header_list_size: usize, decoder: &mut hpack::Decoder) -> Result<(), Error> {
|
||||
pub fn load_hpack(
|
||||
&mut self,
|
||||
src: &mut BytesMut,
|
||||
max_header_list_size: usize,
|
||||
decoder: &mut hpack::Decoder,
|
||||
) -> Result<(), Error> {
|
||||
self.header_block.load(src, max_header_list_size, decoder)
|
||||
}
|
||||
|
||||
@@ -381,7 +391,8 @@ impl PushPromise {
|
||||
let head = self.head();
|
||||
let promised_id = self.promised_id;
|
||||
|
||||
self.header_block.into_encoding()
|
||||
self.header_block
|
||||
.into_encoding()
|
||||
.encode(&head, encoder, dst, |dst| {
|
||||
dst.put_u32_be(promised_id.into());
|
||||
})
|
||||
@@ -456,9 +467,7 @@ impl Continuation {
|
||||
// Get the CONTINUATION frame head
|
||||
let head = self.head();
|
||||
|
||||
self.header_block
|
||||
.encode(&head, encoder, dst, |_| {
|
||||
})
|
||||
self.header_block.encode(&head, encoder, dst, |_| {})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -471,7 +480,7 @@ impl Pseudo {
|
||||
let mut path = parts
|
||||
.path_and_query
|
||||
.map(|v| v.into())
|
||||
.unwrap_or_else(|| Bytes::new());
|
||||
.unwrap_or_else(Bytes::new);
|
||||
|
||||
if path.is_empty() && method != Method::OPTIONS {
|
||||
path = Bytes::from_static(b"/");
|
||||
@@ -527,13 +536,15 @@ fn to_string(src: Bytes) -> String<Bytes> {
|
||||
// ===== impl EncodingHeaderBlock =====
|
||||
|
||||
impl EncodingHeaderBlock {
|
||||
fn encode<F>(mut self,
|
||||
head: &Head,
|
||||
encoder: &mut hpack::Encoder,
|
||||
dst: &mut BytesMut,
|
||||
f: F)
|
||||
-> Option<Continuation>
|
||||
where F: FnOnce(&mut BytesMut),
|
||||
fn encode<F>(
|
||||
mut self,
|
||||
head: &Head,
|
||||
encoder: &mut hpack::Encoder,
|
||||
dst: &mut BytesMut,
|
||||
f: F,
|
||||
) -> Option<Continuation>
|
||||
where
|
||||
F: FnOnce(&mut BytesMut),
|
||||
{
|
||||
let head_pos = dst.len();
|
||||
|
||||
@@ -610,12 +621,9 @@ impl Iterator for Iter {
|
||||
|
||||
self.pseudo = None;
|
||||
|
||||
self.fields.next().map(|(name, value)| {
|
||||
Field {
|
||||
name: name,
|
||||
value: value,
|
||||
}
|
||||
})
|
||||
self.fields
|
||||
.next()
|
||||
.map(|(name, value)| Field { name, value })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -727,9 +735,13 @@ impl fmt::Debug for PushPromiseFlag {
|
||||
|
||||
// ===== HeaderBlock =====
|
||||
|
||||
|
||||
impl HeaderBlock {
|
||||
fn load(&mut self, src: &mut BytesMut, max_header_list_size: usize, decoder: &mut hpack::Decoder) -> Result<(), Error> {
|
||||
fn load(
|
||||
&mut self,
|
||||
src: &mut BytesMut,
|
||||
max_header_list_size: usize,
|
||||
decoder: &mut hpack::Decoder,
|
||||
) -> Result<(), Error> {
|
||||
let mut reg = !self.fields.is_empty();
|
||||
let mut malformed = false;
|
||||
let mut headers_size = self.calculate_header_list_size();
|
||||
@@ -744,7 +756,8 @@ impl HeaderBlock {
|
||||
malformed = true;
|
||||
} else {
|
||||
let __val = $val;
|
||||
headers_size += decoded_header_size(stringify!($ident).len() + 1, __val.as_str().len());
|
||||
headers_size +=
|
||||
decoded_header_size(stringify!($ident).len() + 1, __val.as_str().len());
|
||||
if headers_size < max_header_list_size {
|
||||
self.pseudo.$field = Some(__val);
|
||||
} else if !self.is_over_size {
|
||||
@@ -752,7 +765,7 @@ impl HeaderBlock {
|
||||
self.is_over_size = true;
|
||||
}
|
||||
}
|
||||
}}
|
||||
}};
|
||||
}
|
||||
|
||||
let mut cursor = Cursor::new(src);
|
||||
@@ -765,10 +778,7 @@ impl HeaderBlock {
|
||||
use crate::hpack::Header::*;
|
||||
|
||||
match header {
|
||||
Field {
|
||||
name,
|
||||
value,
|
||||
} => {
|
||||
Field { name, value } => {
|
||||
// Connection level header fields are not supported and must
|
||||
// result in a protocol error.
|
||||
|
||||
@@ -794,7 +804,7 @@ impl HeaderBlock {
|
||||
self.is_over_size = true;
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
Authority(v) => set_pseudo!(authority, v),
|
||||
Method(v) => set_pseudo!(method, v),
|
||||
Scheme(v) => set_pseudo!(scheme, v),
|
||||
@@ -810,7 +820,7 @@ impl HeaderBlock {
|
||||
|
||||
if malformed {
|
||||
log::trace!("malformed message");
|
||||
return Err(Error::MalformedMessage.into());
|
||||
return Err(Error::MalformedMessage);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
@@ -835,36 +845,38 @@ impl HeaderBlock {
|
||||
/// > overhead of 32 octets for each header field.
|
||||
fn calculate_header_list_size(&self) -> usize {
|
||||
macro_rules! pseudo_size {
|
||||
($name:ident) => ({
|
||||
($name:ident) => {{
|
||||
self.pseudo
|
||||
.$name
|
||||
.as_ref()
|
||||
.map(|m| decoded_header_size(stringify!($name).len() + 1, m.as_str().len()))
|
||||
.unwrap_or(0)
|
||||
});
|
||||
}};
|
||||
}
|
||||
|
||||
pseudo_size!(method) +
|
||||
pseudo_size!(scheme) +
|
||||
pseudo_size!(status) +
|
||||
pseudo_size!(authority) +
|
||||
pseudo_size!(path) +
|
||||
self.fields.iter()
|
||||
.map(|(name, value)| decoded_header_size(name.as_str().len(), value.len()))
|
||||
.sum::<usize>()
|
||||
pseudo_size!(method)
|
||||
+ pseudo_size!(scheme)
|
||||
+ pseudo_size!(status)
|
||||
+ pseudo_size!(authority)
|
||||
+ pseudo_size!(path)
|
||||
+ self
|
||||
.fields
|
||||
.iter()
|
||||
.map(|(name, value)| decoded_header_size(name.as_str().len(), value.len()))
|
||||
.sum::<usize>()
|
||||
}
|
||||
|
||||
/// Iterate over all pseudos and headers to see if any individual pair
|
||||
/// would be too large to encode.
|
||||
pub(crate) fn has_too_big_field(&self) -> bool {
|
||||
macro_rules! pseudo_size {
|
||||
($name:ident) => ({
|
||||
($name:ident) => {{
|
||||
self.pseudo
|
||||
.$name
|
||||
.as_ref()
|
||||
.map(|m| decoded_header_size(stringify!($name).len() + 1, m.as_str().len()))
|
||||
.unwrap_or(0)
|
||||
});
|
||||
}};
|
||||
}
|
||||
|
||||
if pseudo_size!(method) > MAX_HEADER_LENGTH {
|
||||
|
||||
Reference in New Issue
Block a user