summaryrefslogtreecommitdiffstats
path: root/net/quic/quic_session.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/quic/quic_session.cc')
-rw-r--r--net/quic/quic_session.cc19
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();