Additional debug/trace logging (#180)

This commit is contained in:
Carl Lerche
2017-12-10 13:51:28 -06:00
committed by GitHub
parent 6c68f72fbd
commit 71888acea5
2 changed files with 14 additions and 8 deletions

View File

@@ -354,6 +354,7 @@ impl Recv {
let sz = sz as WindowSize; let sz = sz as WindowSize;
if !stream.state.is_recv_streaming() { if !stream.state.is_recv_streaming() {
trace!("stream is not in receiving state; state={:?}", stream.state);
// Receiving a DATA frame when not expecting one is a protocol // Receiving a DATA frame when not expecting one is a protocol
// error. // error.
return Err(RecvError::Connection(Reason::PROTOCOL_ERROR)); return Err(RecvError::Connection(Reason::PROTOCOL_ERROR));
@@ -383,6 +384,7 @@ impl Recv {
self.in_flight_data += sz; self.in_flight_data += sz;
if stream.dec_content_length(frame.payload().len()).is_err() { if stream.dec_content_length(frame.payload().len()).is_err() {
trace!("content-length overflow");
return Err(RecvError::Stream { return Err(RecvError::Stream {
id: stream.id, id: stream.id,
reason: Reason::PROTOCOL_ERROR, reason: Reason::PROTOCOL_ERROR,
@@ -391,6 +393,7 @@ impl Recv {
if frame.is_end_stream() { if frame.is_end_stream() {
if stream.ensure_content_length_zero().is_err() { if stream.ensure_content_length_zero().is_err() {
trace!("content-length underflow");
return Err(RecvError::Stream { return Err(RecvError::Stream {
id: stream.id, id: stream.id,
reason: Reason::PROTOCOL_ERROR, reason: Reason::PROTOCOL_ERROR,
@@ -398,6 +401,7 @@ impl Recv {
} }
if stream.state.recv_close().is_err() { if stream.state.recv_close().is_err() {
trace!("failed to transition to closed state");
return Err(RecvError::Connection(Reason::PROTOCOL_ERROR)); return Err(RecvError::Connection(Reason::PROTOCOL_ERROR));
} }
} }
@@ -467,6 +471,7 @@ impl Recv {
pub fn ensure_not_idle(&self, id: StreamId) -> Result<(), Reason> { pub fn ensure_not_idle(&self, id: StreamId) -> Result<(), Reason> {
if let Ok(next) = self.next_stream_id { if let Ok(next) = self.next_stream_id {
if id >= next { if id >= next {
trace!("stream ID implicitly closed");
return Err(Reason::PROTOCOL_ERROR); return Err(Reason::PROTOCOL_ERROR);
} }
} }

View File

@@ -427,12 +427,13 @@ impl proto::Peer for Peer {
let (pseudo, fields) = headers.into_parts(); let (pseudo, fields) = headers.into_parts();
macro_rules! malformed { macro_rules! malformed {
() => { ($($arg:tt)*) => {{
debug!($($arg)*);
return Err(RecvError::Stream { return Err(RecvError::Stream {
id: stream_id, id: stream_id,
reason: Reason::PROTOCOL_ERROR, reason: Reason::PROTOCOL_ERROR,
}); });
} }}
}; };
b.version(Version::HTTP_2); b.version(Version::HTTP_2);
@@ -440,7 +441,7 @@ impl proto::Peer for Peer {
if let Some(method) = pseudo.method { if let Some(method) = pseudo.method {
b.method(method); b.method(method);
} else { } else {
malformed!(); malformed!("malformed headers: missing method");
} }
// Specifying :status for a request is a protocol error // Specifying :status for a request is a protocol error
@@ -453,24 +454,24 @@ impl proto::Peer for Peer {
if let Some(scheme) = pseudo.scheme { if let Some(scheme) = pseudo.scheme {
parts.scheme = Some(uri::Scheme::from_shared(scheme.into_inner()) parts.scheme = Some(uri::Scheme::from_shared(scheme.into_inner())
.or_else(|_| malformed!())?); .or_else(|_| malformed!("malformed headers: malformed scheme"))?);
} else { } else {
malformed!(); malformed!("malformed headers: missing scheme");
} }
if let Some(authority) = pseudo.authority { if let Some(authority) = pseudo.authority {
parts.authority = Some(uri::Authority::from_shared(authority.into_inner()) parts.authority = Some(uri::Authority::from_shared(authority.into_inner())
.or_else(|_| malformed!())?); .or_else(|_| malformed!("malformed headers: malformed authority"))?);
} }
if let Some(path) = pseudo.path { if let Some(path) = pseudo.path {
// This cannot be empty // This cannot be empty
if path.is_empty() { if path.is_empty() {
malformed!(); malformed!("malformed headers: missing path");
} }
parts.path_and_query = Some(uri::PathAndQuery::from_shared(path.into_inner()) parts.path_and_query = Some(uri::PathAndQuery::from_shared(path.into_inner())
.or_else(|_| malformed!())?); .or_else(|_| malformed!("malformed headers: malformed path"))?);
} }
b.uri(parts); b.uri(parts);