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