Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1034)

Unified Diff: net/quic/quic_session.cc

Issue 185203003: Killing off QUICv12, including cleaning out all of the code for handling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Deleted unused StripUint32 Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_session.h ('k') | net/quic/quic_session_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_session.cc
diff --git a/net/quic/quic_session.cc b/net/quic/quic_session.cc
index 6147224c2fc0e5789f0aa0514ff1270f8c468782..b84eb6aaa57e3fdd1df6f86affd89aaa37de0f20 100644
--- a/net/quic/quic_session.cc
+++ b/net/quic/quic_session.cc
@@ -18,9 +18,6 @@ using std::vector;
namespace net {
-const size_t kMaxPrematurelyClosedStreamsTracked = 20;
-const size_t kMaxZombieStreams = 20;
-
#define ENDPOINT (is_server() ? "Server: " : " Client: ")
// We want to make sure we delete any closed streams in a safe manner.
@@ -112,14 +109,12 @@ QuicSession::QuicSession(QuicConnection* connection,
connection_->SetOverallConnectionTimeout(
config_.max_time_before_crypto_handshake());
}
- if (connection_->version() > QUIC_VERSION_12) {
- headers_stream_.reset(new QuicHeadersStream(this));
- if (!is_server()) {
- // For version above QUIC v12, the headers stream is stream 3, so the
- // next available local stream ID should be 5.
- DCHECK_EQ(kHeadersStreamId, next_stream_id_);
- next_stream_id_ += 2;
- }
+ headers_stream_.reset(new QuicHeadersStream(this));
+ if (!is_server()) {
+ // For version above QUIC v12, the headers stream is stream 3, so the
+ // next available local stream ID should be 5.
+ DCHECK_EQ(kHeadersStreamId, next_stream_id_);
+ next_stream_id_ += 2;
}
}
@@ -132,15 +127,6 @@ bool QuicSession::OnStreamFrames(const vector<QuicStreamFrame>& frames) {
for (size_t i = 0; i < frames.size(); ++i) {
// TODO(rch) deal with the error case of stream id 0
if (IsClosedStream(frames[i].stream_id)) {
- // If we get additional frames for a stream where we didn't process
- // headers, it's highly likely our compression context will end up
- // permanently out of sync with the peer's, so we give up and close the
- // connection.
- if (ContainsKey(prematurely_closed_streams_, frames[i].stream_id)) {
- connection()->SendConnectionClose(
- QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED);
- return false;
- }
continue;
}
@@ -159,31 +145,8 @@ bool QuicSession::OnStreamFrames(const vector<QuicStreamFrame>& frames) {
continue;
}
stream->OnStreamFrame(frames[i]);
-
- // If the stream is a data stream had been prematurely closed, and the
- // headers are now decompressed, then we are finally finished
- // with this stream.
- if (ContainsKey(zombie_streams_, stream_id) &&
- static_cast<QuicDataStream*>(stream)->headers_decompressed()) {
- CloseZombieStream(stream_id);
- }
}
- while (!decompression_blocked_streams_.empty()) {
- QuicHeaderId header_id = decompression_blocked_streams_.begin()->first;
- if (header_id != decompressor_.current_header_id()) {
- break;
- }
- QuicStreamId stream_id = decompression_blocked_streams_.begin()->second;
- decompression_blocked_streams_.erase(header_id);
- QuicDataStream* stream = GetDataStream(stream_id);
- if (!stream) {
- connection()->SendConnectionClose(
- QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED);
- return false;
- }
- stream->OnDecompressorAvailable();
- }
return true;
}
@@ -225,8 +188,7 @@ void QuicSession::OnRstStream(const QuicRstStreamFrame& frame) {
"Attempt to reset the crypto stream");
return;
}
- if (frame.stream_id == kHeadersStreamId &&
- connection()->version() > QUIC_VERSION_12) {
+ if (frame.stream_id == kHeadersStreamId) {
connection()->SendConnectionCloseWithDetails(
QUIC_INVALID_STREAM_ID,
"Attempt to reset the headers stream");
@@ -236,23 +198,7 @@ void QuicSession::OnRstStream(const QuicRstStreamFrame& frame) {
if (!stream) {
return; // Errors are handled by GetStream.
}
- // TODO(rjshade): Adjust flow control windows based on frame.byte_offset.
- if (ContainsKey(zombie_streams_, stream->id())) {
- // If this was a zombie stream then we close it out now.
- CloseZombieStream(stream->id());
- // However, since the headers still have not been decompressed, we want to
- // mark it a prematurely closed so that if we ever receive frames
- // for this stream we can close the connection.
- DCHECK(!stream->headers_decompressed());
- AddPrematurelyClosedStream(frame.stream_id);
- return;
- }
- if (connection()->version() <= QUIC_VERSION_12) {
- if (stream->stream_bytes_read() > 0 && !stream->headers_decompressed()) {
- connection()->SendConnectionClose(
- QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED);
- }
- }
+
stream->OnStreamReset(frame);
}
@@ -363,10 +309,6 @@ QuicConsumedData QuicSession::WritevData(
size_t QuicSession::WriteHeaders(QuicStreamId id,
const SpdyHeaderBlock& headers,
bool fin) {
- DCHECK_LT(QUIC_VERSION_12, connection()->version());
- if (connection()->version() <= QUIC_VERSION_12) {
- return 0;
- }
return headers_stream_->WriteHeaders(id, headers, fin);
}
@@ -402,69 +344,11 @@ void QuicSession::CloseStreamInner(QuicStreamId stream_id,
stream->set_rst_sent(true);
}
- if (connection_->version() <= QUIC_VERSION_12 &&
- connection_->connected() && !stream->headers_decompressed()) {
- // If the stream is being closed locally (for example a client cancelling
- // a request before receiving the response) then we need to make sure that
- // we keep the stream alive long enough to process any response or
- // RST_STREAM frames.
- if (locally_reset && !is_server()) {
- AddZombieStream(stream_id);
- return;
- }
-
- // This stream has been closed before the headers were decompressed.
- // This might cause problems with head of line blocking of headers.
- // If the peer sent headers which were lost but we now close the stream
- // we will never be able to decompress headers for other streams.
- // To deal with this, we keep track of streams which have been closed
- // prematurely. If we ever receive data frames for this steam, then we
- // know there actually has been a problem and we close the connection.
- AddPrematurelyClosedStream(stream->id());
- }
closed_streams_.push_back(it->second);
- if (ContainsKey(zombie_streams_, stream->id())) {
- zombie_streams_.erase(stream->id());
- }
stream_map_.erase(it);
stream->OnClose();
}
-void QuicSession::AddZombieStream(QuicStreamId stream_id) {
- if (zombie_streams_.size() == kMaxZombieStreams) {
- QuicStreamId oldest_zombie_stream_id = zombie_streams_.begin()->first;
- CloseZombieStream(oldest_zombie_stream_id);
- // However, since the headers still have not been decompressed, we want to
- // mark it a prematurely closed so that if we ever receive frames
- // for this stream we can close the connection.
- AddPrematurelyClosedStream(oldest_zombie_stream_id);
- }
- zombie_streams_.insert(make_pair(stream_id, true));
-}
-
-void QuicSession::CloseZombieStream(QuicStreamId stream_id) {
- DCHECK(ContainsKey(zombie_streams_, stream_id));
- zombie_streams_.erase(stream_id);
- QuicDataStream* stream = GetDataStream(stream_id);
- if (!stream) {
- return;
- }
- stream_map_.erase(stream_id);
- stream->OnClose();
- closed_streams_.push_back(stream);
-}
-
-void QuicSession::AddPrematurelyClosedStream(QuicStreamId stream_id) {
- if (connection()->version() > QUIC_VERSION_12) {
- return;
- }
- if (prematurely_closed_streams_.size() ==
- kMaxPrematurelyClosedStreamsTracked) {
- prematurely_closed_streams_.erase(prematurely_closed_streams_.begin());
- }
- prematurely_closed_streams_.insert(make_pair(stream_id, true));
-}
-
bool QuicSession::IsEncryptionEstablished() {
return GetCryptoStream()->encryption_established();
}
@@ -531,8 +415,7 @@ ReliableQuicStream* QuicSession::GetStream(const QuicStreamId stream_id) {
if (stream_id == kCryptoStreamId) {
return GetCryptoStream();
}
- if (stream_id == kHeadersStreamId &&
- connection_->version() > QUIC_VERSION_12) {
+ if (stream_id == kHeadersStreamId) {
return headers_stream_.get();
}
return GetDataStream(stream_id);
@@ -543,8 +426,7 @@ QuicDataStream* QuicSession::GetDataStream(const QuicStreamId stream_id) {
DLOG(FATAL) << "Attempt to call GetDataStream with the crypto stream id";
return NULL;
}
- if (stream_id == kHeadersStreamId &&
- connection_->version() > QUIC_VERSION_12) {
+ if (stream_id == kHeadersStreamId) {
DLOG(FATAL) << "Attempt to call GetDataStream with the headers stream id";
return NULL;
}
@@ -589,7 +471,7 @@ QuicDataStream* QuicSession::GetIncomingDataStream(QuicStreamId stream_id) {
return NULL;
}
if (largest_peer_created_stream_id_ == 0) {
- if (is_server() && connection()->version() > QUIC_VERSION_12) {
+ if (is_server()) {
largest_peer_created_stream_id_= 3;
} else {
largest_peer_created_stream_id_= 1;
@@ -615,13 +497,8 @@ bool QuicSession::IsClosedStream(QuicStreamId id) {
if (id == kCryptoStreamId) {
return false;
}
- if (connection()->version() > QUIC_VERSION_12) {
- if (id == kHeadersStreamId) {
- return false;
- }
- }
- if (ContainsKey(zombie_streams_, id)) {
- return true;
+ if (id == kHeadersStreamId) {
+ return false;
}
if (ContainsKey(stream_map_, id)) {
// Stream is active
@@ -639,8 +516,7 @@ bool QuicSession::IsClosedStream(QuicStreamId id) {
}
size_t QuicSession::GetNumOpenStreams() const {
- return stream_map_.size() + implicitly_created_streams_.size() -
- zombie_streams_.size();
+ return stream_map_.size() + implicitly_created_streams_.size();
}
void QuicSession::MarkWriteBlocked(QuicStreamId id, QuicPriority priority) {
@@ -663,7 +539,7 @@ void QuicSession::MarkWriteBlocked(QuicStreamId id, QuicPriority priority) {
// kHighestPriority.
priority = kHighestPriority;
}
- write_blocked_streams_.PushBack(id, priority, connection()->version());
+ write_blocked_streams_.PushBack(id, priority);
}
bool QuicSession::HasDataToWrite() const {
@@ -671,12 +547,6 @@ bool QuicSession::HasDataToWrite() const {
connection_->HasQueuedData();
}
-void QuicSession::MarkDecompressionBlocked(QuicHeaderId header_id,
- QuicStreamId stream_id) {
- DCHECK_GE(QUIC_VERSION_12, connection()->version());
- decompression_blocked_streams_[header_id] = stream_id;
-}
-
bool QuicSession::GetSSLInfo(SSLInfo* ssl_info) {
NOTIMPLEMENTED();
return false;
« no previous file with comments | « net/quic/quic_session.h ('k') | net/quic/quic_session_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698