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

Unified Diff: net/quic/reliable_quic_stream.cc

Issue 14816006: Land Recent QUIC changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added missing NET_PRIVATE_EXPORT to QuicWallTime Created 7 years, 7 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/reliable_quic_stream.h ('k') | net/quic/reliable_quic_stream_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/reliable_quic_stream.cc
diff --git a/net/quic/reliable_quic_stream.cc b/net/quic/reliable_quic_stream.cc
index cdcec21b89409dd15e053300f569891a87443575..cadbe9a584ea02ccceb7038bcff0eca113bcb42a 100644
--- a/net/quic/reliable_quic_stream.cc
+++ b/net/quic/reliable_quic_stream.cc
@@ -20,7 +20,7 @@ ReliableQuicStream::ReliableQuicStream(QuicStreamId id,
visitor_(NULL),
stream_bytes_read_(0),
stream_bytes_written_(0),
- headers_complete_(false),
+ headers_decompressed_(false),
headers_id_(0),
stream_error_(QUIC_STREAM_NO_ERROR),
connection_error_(QUIC_NO_ERROR),
@@ -99,7 +99,7 @@ void ReliableQuicStream::Close(QuicRstStreamErrorCode error) {
}
int ReliableQuicStream::Readv(const struct iovec* iov, int iov_len) {
- if (headers_complete_ && decompressed_headers_.empty()) {
+ if (headers_decompressed_ && decompressed_headers_.empty()) {
return sequencer_.Readv(iov, iov_len);
}
size_t bytes_consumed = 0;
@@ -119,7 +119,7 @@ int ReliableQuicStream::Readv(const struct iovec* iov, int iov_len) {
}
int ReliableQuicStream::GetReadableRegions(iovec* iov, int iov_len) {
- if (headers_complete_ && decompressed_headers_.empty()) {
+ if (headers_decompressed_ && decompressed_headers_.empty()) {
return sequencer_.GetReadableRegions(iov, iov_len);
}
if (iov_len == 0) {
@@ -132,7 +132,7 @@ int ReliableQuicStream::GetReadableRegions(iovec* iov, int iov_len) {
}
bool ReliableQuicStream::IsHalfClosed() const {
- if (!headers_complete_ || !decompressed_headers_.empty()) {
+ if (!headers_decompressed_ || !decompressed_headers_.empty()) {
return false;
}
return sequencer_.IsHalfClosed();
@@ -254,9 +254,16 @@ uint32 ReliableQuicStream::ProcessRawData(const char* data, uint32 data_len) {
DCHECK_NE(0u, headers_id_);
// Once the headers are finished, we simply pass the data through.
- if (headers_complete_ && decompressed_headers_.empty()) {
- DVLOG(1) << "Delegating procesing to ProcessData";
- return total_bytes_consumed + ProcessData(data, data_len);
+ if (headers_decompressed_) {
+ // Some buffered header data remains.
+ if (!decompressed_headers_.empty()) {
+ ProcessHeaderData();
+ }
+ if (decompressed_headers_.empty()) {
+ DVLOG(1) << "Delegating procesing to ProcessData";
+ total_bytes_consumed += ProcessData(data, data_len);
+ }
+ return total_bytes_consumed;
}
QuicHeaderId current_header_id =
@@ -264,9 +271,11 @@ uint32 ReliableQuicStream::ProcessRawData(const char* data, uint32 data_len) {
// Ensure that this header id looks sane.
if (headers_id_ < current_header_id ||
headers_id_ > kMaxHeaderIdDelta + current_header_id) {
- DVLOG(1) << "Invalud headers for stream: " << id()
- << " header_id: " << headers_id_;
+ DVLOG(1) << "Invalid headers for stream: " << id()
+ << " header_id: " << headers_id_
+ << " current_header_id: " << current_header_id;
session_->connection()->SendConnectionClose(QUIC_INVALID_HEADER_ID);
+ return total_bytes_consumed;
}
// If we are head-of-line blocked on decompression, then back up.
@@ -284,18 +293,10 @@ uint32 ReliableQuicStream::ProcessRawData(const char* data, uint32 data_len) {
// Headers are complete if the decompressor has moved on to the
// next stream.
- headers_complete_ =
+ headers_decompressed_ =
session_->decompressor()->current_header_id() != headers_id_;
- if (!decompressed_headers_.empty()) {
- size_t bytes_processed = ProcessData(decompressed_headers_.data(),
- decompressed_headers_.length());
- if (bytes_processed == decompressed_headers_.length()) {
- decompressed_headers_.clear();
- } else {
- decompressed_headers_ = decompressed_headers_.erase(0, bytes_processed);
- }
- }
+ ProcessHeaderData();
// We have processed all of the decompressed data but we might
// have some more raw data to process.
@@ -327,24 +328,24 @@ uint32 ReliableQuicStream::ProcessHeaderData() {
void ReliableQuicStream::OnDecompressorAvailable() {
DCHECK_EQ(headers_id_,
session_->decompressor()->current_header_id());
- DCHECK(!headers_complete_);
+ DCHECK(!headers_decompressed_);
DCHECK_EQ(0u, decompressed_headers_.length());
size_t total_bytes_consumed = 0;
struct iovec iovecs[5];
- while (!headers_complete_) {
+ while (!headers_decompressed_) {
size_t num_iovecs =
sequencer_.GetReadableRegions(iovecs, arraysize(iovecs));
if (num_iovecs == 0) {
return;
}
- for (size_t i = 0; i < num_iovecs && !headers_complete_; i++) {
+ for (size_t i = 0; i < num_iovecs && !headers_decompressed_; i++) {
total_bytes_consumed += session_->decompressor()->DecompressData(
StringPiece(static_cast<char*>(iovecs[i].iov_base),
iovecs[i].iov_len), this);
- headers_complete_ =
+ headers_decompressed_ =
session_->decompressor()->current_header_id() != headers_id_;
}
}
@@ -354,7 +355,7 @@ void ReliableQuicStream::OnDecompressorAvailable() {
ProcessHeaderData(); // Unprocessed headers remain in decompressed_headers_.
- if (headers_complete_ && decompressed_headers_.empty()) {
+ if (headers_decompressed_ && decompressed_headers_.empty()) {
sequencer_.FlushBufferedFrames();
}
}
« no previous file with comments | « net/quic/reliable_quic_stream.h ('k') | net/quic/reliable_quic_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698