| Index: net/quic/core/quic_spdy_stream.cc
|
| diff --git a/net/quic/core/quic_spdy_stream.cc b/net/quic/core/quic_spdy_stream.cc
|
| index 502145c66de315a6500f3412cbd1ad03535c73bb..2e743f7c66383fc92868410ae0cab86576f3acc8 100644
|
| --- a/net/quic/core/quic_spdy_stream.cc
|
| +++ b/net/quic/core/quic_spdy_stream.cc
|
| @@ -146,21 +146,7 @@ bool QuicSpdyStream::IsDoneReading() const {
|
| }
|
|
|
| bool QuicSpdyStream::HasBytesToRead() const {
|
| - bool headers_to_read = !decompressed_headers_.empty();
|
| - bool body_to_read = sequencer()->HasBytesToRead();
|
| - bool trailers_to_read = !decompressed_trailers_.empty();
|
| - return headers_to_read || body_to_read || trailers_to_read;
|
| -}
|
| -
|
| -void QuicSpdyStream::MarkHeadersConsumed(size_t bytes_consumed) {
|
| - decompressed_headers_.erase(0, bytes_consumed);
|
| - if (FinishedReadingHeaders()) {
|
| - sequencer()->SetUnblocked();
|
| - }
|
| -}
|
| -
|
| -void QuicSpdyStream::MarkTrailersConsumed(size_t bytes_consumed) {
|
| - decompressed_trailers_.erase(0, bytes_consumed);
|
| + return sequencer()->HasBytesToRead();
|
| }
|
|
|
| void QuicSpdyStream::MarkTrailersConsumed() {
|
| @@ -180,28 +166,11 @@ void QuicSpdyStream::SetPriority(SpdyPriority priority) {
|
| priority_ = priority;
|
| }
|
|
|
| -void QuicSpdyStream::OnStreamHeaders(StringPiece headers_data) {
|
| - if (!headers_decompressed_) {
|
| - headers_data.AppendToString(&decompressed_headers_);
|
| - } else {
|
| - DCHECK(!trailers_decompressed_);
|
| - headers_data.AppendToString(&decompressed_trailers_);
|
| - }
|
| -}
|
| -
|
| void QuicSpdyStream::OnStreamHeadersPriority(SpdyPriority priority) {
|
| DCHECK_EQ(Perspective::IS_SERVER, session()->connection()->perspective());
|
| SetPriority(priority);
|
| }
|
|
|
| -void QuicSpdyStream::OnStreamHeadersComplete(bool fin, size_t frame_len) {
|
| - if (!headers_decompressed_) {
|
| - OnInitialHeadersComplete(fin, frame_len);
|
| - } else {
|
| - OnTrailingHeadersComplete(fin, frame_len);
|
| - }
|
| -}
|
| -
|
| void QuicSpdyStream::OnStreamHeaderList(bool fin,
|
| size_t frame_len,
|
| const QuicHeaderList& header_list) {
|
| @@ -209,6 +178,8 @@ void QuicSpdyStream::OnStreamHeaderList(bool fin,
|
| // if the current headers are too large. So if the list is empty here
|
| // then the headers list must have been too large, and the stream should
|
| // be reset.
|
| + // TODO(rch): Use an explicit "headers too large" signal. An empty header list
|
| + // might be acceptable if it corresponds to a trailing header frame.
|
| if (FLAGS_quic_limit_uncompressed_headers && header_list.empty()) {
|
| OnHeadersTooLarge();
|
| if (IsDoneReading()) {
|
| @@ -226,16 +197,6 @@ void QuicSpdyStream::OnHeadersTooLarge() {
|
| Reset(QUIC_HEADERS_TOO_LARGE);
|
| }
|
|
|
| -void QuicSpdyStream::OnInitialHeadersComplete(bool fin, size_t /*frame_len*/) {
|
| - headers_decompressed_ = true;
|
| - if (fin) {
|
| - OnStreamFrame(QuicStreamFrame(id(), fin, 0, StringPiece()));
|
| - }
|
| - if (FinishedReadingHeaders()) {
|
| - sequencer()->SetUnblocked();
|
| - }
|
| -}
|
| -
|
| void QuicSpdyStream::OnInitialHeadersComplete(
|
| bool fin,
|
| size_t /*frame_len*/,
|
| @@ -250,21 +211,6 @@ void QuicSpdyStream::OnInitialHeadersComplete(
|
| }
|
| }
|
|
|
| -void QuicSpdyStream::OnPromiseHeaders(StringPiece headers_data) {
|
| - headers_data.AppendToString(&decompressed_headers_);
|
| -}
|
| -
|
| -void QuicSpdyStream::OnPromiseHeadersComplete(
|
| - QuicStreamId /* promised_stream_id */,
|
| - size_t /* frame_len */) {
|
| - // To be overridden in QuicSpdyClientStream. Not supported on
|
| - // server side.
|
| - session()->connection()->CloseConnection(
|
| - QUIC_INVALID_HEADERS_STREAM_DATA, "Promise headers received by server",
|
| - ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
|
| - return;
|
| -}
|
| -
|
| void QuicSpdyStream::OnPromiseHeaderList(
|
| QuicStreamId /* promised_id */,
|
| size_t /* frame_len */,
|
| @@ -277,41 +223,6 @@ void QuicSpdyStream::OnPromiseHeaderList(
|
| return;
|
| }
|
|
|
| -void QuicSpdyStream::OnTrailingHeadersComplete(bool fin, size_t /*frame_len*/) {
|
| - DCHECK(!trailers_decompressed_);
|
| - if (fin_received()) {
|
| - DLOG(ERROR) << "Received Trailers after FIN, on stream: " << id();
|
| - session()->connection()->CloseConnection(
|
| - QUIC_INVALID_HEADERS_STREAM_DATA, "Trailers after fin",
|
| - ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
|
| - return;
|
| - }
|
| - if (!fin) {
|
| - DLOG(ERROR) << "Trailers must have FIN set, on stream: " << id();
|
| - session()->connection()->CloseConnection(
|
| - QUIC_INVALID_HEADERS_STREAM_DATA, "Fin missing from trailers",
|
| - ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
|
| - return;
|
| - }
|
| -
|
| - size_t final_byte_offset = 0;
|
| - if (!SpdyUtils::ParseTrailers(decompressed_trailers().data(),
|
| - decompressed_trailers().length(),
|
| - &final_byte_offset, &received_trailers_)) {
|
| - DLOG(ERROR) << "Trailers are malformed: " << id();
|
| - session()->connection()->CloseConnection(
|
| - QUIC_INVALID_HEADERS_STREAM_DATA, "Trailers are malformed",
|
| - ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
|
| - return;
|
| - }
|
| -
|
| - // The data on this stream ends at |final_byte_offset|.
|
| - DVLOG(1) << "Stream ends at byte offset: " << final_byte_offset
|
| - << " currently read: " << stream_bytes_read();
|
| - trailers_decompressed_ = true;
|
| - OnStreamFrame(QuicStreamFrame(id(), fin, final_byte_offset, StringPiece()));
|
| -}
|
| -
|
| void QuicSpdyStream::OnTrailingHeadersComplete(
|
| bool fin,
|
| size_t /*frame_len*/,
|
| @@ -379,8 +290,7 @@ void QuicSpdyStream::OnCanWrite() {
|
| }
|
|
|
| bool QuicSpdyStream::FinishedReadingHeaders() const {
|
| - return headers_decompressed_ && decompressed_headers_.empty() &&
|
| - header_list_.empty();
|
| + return headers_decompressed_ && header_list_.empty();
|
| }
|
|
|
| bool QuicSpdyStream::ParseHeaderStatusCode(const SpdyHeaderBlock& header,
|
| @@ -412,7 +322,7 @@ bool QuicSpdyStream::FinishedReadingTrailers() const {
|
| } else if (!trailers_decompressed_) {
|
| return true;
|
| } else {
|
| - return trailers_consumed_ && decompressed_trailers_.empty();
|
| + return trailers_consumed_;
|
| }
|
| }
|
|
|
|
|