Extra log output
This commit is contained in:
@@ -128,9 +128,17 @@ impl Headers {
|
|||||||
{
|
{
|
||||||
let flags = HeadersFlag(head.flag());
|
let flags = HeadersFlag(head.flag());
|
||||||
|
|
||||||
|
trace!("loading headers; flags={:?}", flags);
|
||||||
|
|
||||||
// Read the padding length
|
// Read the padding length
|
||||||
if flags.is_padded() {
|
if flags.is_padded() {
|
||||||
let pad = src.get_u8() as usize;
|
let pad = src.get_u8() as usize;
|
||||||
|
let len = src.get_ref().len();
|
||||||
|
|
||||||
|
if pad >= len {
|
||||||
|
trace!("too much padding");
|
||||||
|
return Err(Error::TooMuchPadding);
|
||||||
|
}
|
||||||
|
|
||||||
// Truncate the last `pad` bytes.
|
// Truncate the last `pad` bytes.
|
||||||
let len = src.get_ref().len() - pad;
|
let len = src.get_ref().len() - pad;
|
||||||
@@ -178,7 +186,7 @@ impl Headers {
|
|||||||
// priority.
|
// priority.
|
||||||
//
|
//
|
||||||
// TODO: Provide a way to abort decoding if an error is hit.
|
// TODO: Provide a way to abort decoding if an error is hit.
|
||||||
try!(decoder.decode(src, |header| {
|
let res = decoder.decode(src, |header| {
|
||||||
use hpack::Header::*;
|
use hpack::Header::*;
|
||||||
|
|
||||||
match header {
|
match header {
|
||||||
@@ -191,9 +199,15 @@ impl Headers {
|
|||||||
Path(v) => set_pseudo!(path, v),
|
Path(v) => set_pseudo!(path, v),
|
||||||
Status(v) => set_pseudo!(status, v),
|
Status(v) => set_pseudo!(status, v),
|
||||||
}
|
}
|
||||||
}));
|
});
|
||||||
|
|
||||||
|
if let Err(e) = res {
|
||||||
|
trace!("hpack decoding error; err={:?}", e);
|
||||||
|
return Err(e.into());
|
||||||
|
}
|
||||||
|
|
||||||
if err {
|
if err {
|
||||||
|
trace!("repeated pseudo");
|
||||||
return Err(hpack::DecoderError::RepeatedPseudo.into());
|
return Err(hpack::DecoderError::RepeatedPseudo.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -171,16 +171,20 @@ impl Decoder {
|
|||||||
self.last_max_update = size;
|
self.last_max_update = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace!("decode");
|
||||||
|
|
||||||
while src.has_remaining() {
|
while src.has_remaining() {
|
||||||
// At this point we are always at the beginning of the next block
|
// At this point we are always at the beginning of the next block
|
||||||
// within the HPACK data. The type of the block can always be
|
// within the HPACK data. The type of the block can always be
|
||||||
// determined from the first byte.
|
// determined from the first byte.
|
||||||
match try!(Representation::load(peek_u8(src))) {
|
match try!(Representation::load(peek_u8(src))) {
|
||||||
Indexed => {
|
Indexed => {
|
||||||
|
trace!(" Indexed; rem={:?}", src.remaining());
|
||||||
can_resize = false;
|
can_resize = false;
|
||||||
f(try!(self.decode_indexed(src)));
|
f(try!(self.decode_indexed(src)));
|
||||||
}
|
}
|
||||||
LiteralWithIndexing => {
|
LiteralWithIndexing => {
|
||||||
|
trace!(" LiteralWithIndexing; rem={:?}", src.remaining());
|
||||||
can_resize = false;
|
can_resize = false;
|
||||||
let entry = try!(self.decode_literal(src, true));
|
let entry = try!(self.decode_literal(src, true));
|
||||||
|
|
||||||
@@ -190,11 +194,13 @@ impl Decoder {
|
|||||||
f(entry);
|
f(entry);
|
||||||
}
|
}
|
||||||
LiteralWithoutIndexing => {
|
LiteralWithoutIndexing => {
|
||||||
|
trace!(" LiteralWithoutIndexing; rem={:?}", src.remaining());
|
||||||
can_resize = false;
|
can_resize = false;
|
||||||
let entry = try!(self.decode_literal(src, false));
|
let entry = try!(self.decode_literal(src, false));
|
||||||
f(entry);
|
f(entry);
|
||||||
}
|
}
|
||||||
LiteralNeverIndexed => {
|
LiteralNeverIndexed => {
|
||||||
|
trace!(" LiteralNeverIndexed; rem={:?}", src.remaining());
|
||||||
can_resize = false;
|
can_resize = false;
|
||||||
let entry = try!(self.decode_literal(src, false));
|
let entry = try!(self.decode_literal(src, false));
|
||||||
|
|
||||||
@@ -203,6 +209,7 @@ impl Decoder {
|
|||||||
f(entry);
|
f(entry);
|
||||||
}
|
}
|
||||||
SizeUpdate => {
|
SizeUpdate => {
|
||||||
|
trace!(" SizeUpdate; rem={:?}", src.remaining());
|
||||||
if !can_resize {
|
if !can_resize {
|
||||||
return Err(DecoderError::InvalidMaxDynamicSize);
|
return Err(DecoderError::InvalidMaxDynamicSize);
|
||||||
}
|
}
|
||||||
@@ -277,6 +284,7 @@ impl Decoder {
|
|||||||
let len = try!(decode_int(buf, 7));
|
let len = try!(decode_int(buf, 7));
|
||||||
|
|
||||||
if len > buf.remaining() {
|
if len > buf.remaining() {
|
||||||
|
trace!("decode_string underflow; len={}; remaining={}", len, buf.remaining());
|
||||||
return Err(DecoderError::StringUnderflow);
|
return Err(DecoderError::StringUnderflow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,8 @@ impl<T> FramedRead<T> {
|
|||||||
|
|
||||||
let kind = head.kind();
|
let kind = head.kind();
|
||||||
|
|
||||||
|
trace!(" -> kind={:?}", kind);
|
||||||
|
|
||||||
let frame = match kind {
|
let frame = match kind {
|
||||||
Kind::Settings => {
|
Kind::Settings => {
|
||||||
frame::Settings::load(head, &bytes[frame::HEADER_LEN..])?.into()
|
frame::Settings::load(head, &bytes[frame::HEADER_LEN..])?.into()
|
||||||
|
|||||||
Reference in New Issue
Block a user