http2: support padded data frames

Ticket: #5691
pull/8198/head
Philippe Antoine 3 years ago committed by Victor Julien
parent 2edfff7a0c
commit c6349d3cfc

@ -933,6 +933,7 @@ impl HTTP2State {
let over = head.flags & parser::HTTP2_FLAG_HEADER_EOS != 0; let over = head.flags & parser::HTTP2_FLAG_HEADER_EOS != 0;
let ftype = head.ftype; let ftype = head.ftype;
let sid = head.stream_id; let sid = head.stream_id;
let padded = head.flags & parser::HTTP2_FLAG_HEADER_PADDED != 0;
if dir == Direction::ToServer { if dir == Direction::ToServer {
tx.frames_ts.push(HTTP2Frame { tx.frames_ts.push(HTTP2Frame {
header: head, header: head,
@ -956,9 +957,12 @@ impl HTTP2State {
} else { } else {
tx_same.ft_ts.tx_id = tx_same.tx_id - 1; tx_same.ft_ts.tx_id = tx_same.tx_id - 1;
}; };
let mut dinput = &rem[..hlsafe];
if padded && rem.len() > 0 && usize::from(rem[0]) < hlsafe{
dinput = &rem[1..hlsafe - usize::from(rem[0])];
}
match tx_same.decompress( match tx_same.decompress(
&rem[..hlsafe], dinput,
dir, dir,
sfcm, sfcm,
over, over,

@ -585,7 +585,7 @@ pub struct HTTP2FrameHeaders {
//end stream //end stream
pub const HTTP2_FLAG_HEADER_EOS: u8 = 0x1; pub const HTTP2_FLAG_HEADER_EOS: u8 = 0x1;
pub const HTTP2_FLAG_HEADER_END_HEADERS: u8 = 0x4; pub const HTTP2_FLAG_HEADER_END_HEADERS: u8 = 0x4;
const HTTP2_FLAG_HEADER_PADDED: u8 = 0x8; pub const HTTP2_FLAG_HEADER_PADDED: u8 = 0x8;
const HTTP2_FLAG_HEADER_PRIORITY: u8 = 0x20; const HTTP2_FLAG_HEADER_PRIORITY: u8 = 0x20;
fn http2_parse_headers_blocks<'a>( fn http2_parse_headers_blocks<'a>(

Loading…
Cancel
Save