diff options
Diffstat (limited to 'net/quic/quic_session.cc')
-rw-r--r-- | net/quic/quic_session.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/net/quic/quic_session.cc b/net/quic/quic_session.cc index 35f764f..8cd605a 100644 --- a/net/quic/quic_session.cc +++ b/net/quic/quic_session.cc @@ -108,6 +108,20 @@ bool QuicSession::OnPacket(const IPEndPoint& self_address, stream->OnStreamFrame(frames[i]); } } + + while (!decompression_blocked_streams_.empty()) { + QuicHeaderId header_id = decompression_blocked_streams_.begin()->first; + if (header_id == decompressor_.current_header_id()) { + QuicStreamId stream_id = decompression_blocked_streams_.begin()->second; + decompression_blocked_streams_.erase(header_id); + ReliableQuicStream* stream = GetStream(stream_id); + if (!stream) { + connection()->SendConnectionClose( + QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED); + } + stream->OnDecompressorAvailable(); + } + } return true; } @@ -302,6 +316,11 @@ void QuicSession::MarkWriteBlocked(QuicStreamId id) { write_blocked_streams_.AddBlockedObject(id); } +void QuicSession::MarkDecompressionBlocked(QuicHeaderId header_id, + QuicStreamId stream_id) { + decompression_blocked_streams_[header_id] = stream_id; +} + void QuicSession::PostProcessAfterData() { STLDeleteElements(&closed_streams_); closed_streams_.clear(); |