| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/tools/quic/quic_spdy_client_stream.h" | 5 #include "net/tools/quic/quic_spdy_client_stream.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 | 35 |
| 36 void QuicSpdyClientStream::OnStreamFrame(const QuicStreamFrame& frame) { | 36 void QuicSpdyClientStream::OnStreamFrame(const QuicStreamFrame& frame) { |
| 37 if (!allow_bidirectional_data() && !write_side_closed()) { | 37 if (!allow_bidirectional_data() && !write_side_closed()) { |
| 38 DVLOG(1) << "Got a response before the request was complete. " | 38 DVLOG(1) << "Got a response before the request was complete. " |
| 39 << "Aborting request."; | 39 << "Aborting request."; |
| 40 CloseWriteSide(); | 40 CloseWriteSide(); |
| 41 } | 41 } |
| 42 QuicSpdyStream::OnStreamFrame(frame); | 42 QuicSpdyStream::OnStreamFrame(frame); |
| 43 } | 43 } |
| 44 | 44 |
| 45 void QuicSpdyClientStream::OnInitialHeadersComplete(bool fin, | |
| 46 size_t frame_len) { | |
| 47 QuicSpdyStream::OnInitialHeadersComplete(fin, frame_len); | |
| 48 | |
| 49 DCHECK(headers_decompressed()); | |
| 50 header_bytes_read_ += frame_len; | |
| 51 if (!SpdyUtils::ParseHeaders(decompressed_headers().data(), | |
| 52 decompressed_headers().length(), | |
| 53 &content_length_, &response_headers_)) { | |
| 54 DLOG(ERROR) << "Failed to parse headers: " << decompressed_headers(); | |
| 55 Reset(QUIC_BAD_APPLICATION_PAYLOAD); | |
| 56 return; | |
| 57 } | |
| 58 | |
| 59 if (!ParseHeaderStatusCode(response_headers_, &response_code_)) { | |
| 60 DLOG(ERROR) << "Received invalid response code: " | |
| 61 << response_headers_[":status"].as_string(); | |
| 62 Reset(QUIC_BAD_APPLICATION_PAYLOAD); | |
| 63 return; | |
| 64 } | |
| 65 | |
| 66 MarkHeadersConsumed(decompressed_headers().length()); | |
| 67 DVLOG(1) << "headers complete for stream " << id(); | |
| 68 | |
| 69 session_->OnInitialHeadersComplete(id(), response_headers_); | |
| 70 } | |
| 71 | |
| 72 void QuicSpdyClientStream::OnInitialHeadersComplete( | 45 void QuicSpdyClientStream::OnInitialHeadersComplete( |
| 73 bool fin, | 46 bool fin, |
| 74 size_t frame_len, | 47 size_t frame_len, |
| 75 const QuicHeaderList& header_list) { | 48 const QuicHeaderList& header_list) { |
| 76 QuicSpdyStream::OnInitialHeadersComplete(fin, frame_len, header_list); | 49 QuicSpdyStream::OnInitialHeadersComplete(fin, frame_len, header_list); |
| 77 | 50 |
| 78 DCHECK(headers_decompressed()); | 51 DCHECK(headers_decompressed()); |
| 79 header_bytes_read_ += frame_len; | 52 header_bytes_read_ += frame_len; |
| 80 if (!SpdyUtils::CopyAndValidateHeaders(header_list, &content_length_, | 53 if (!SpdyUtils::CopyAndValidateHeaders(header_list, &content_length_, |
| 81 &response_headers_)) { | 54 &response_headers_)) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 98 } | 71 } |
| 99 | 72 |
| 100 void QuicSpdyClientStream::OnTrailingHeadersComplete( | 73 void QuicSpdyClientStream::OnTrailingHeadersComplete( |
| 101 bool fin, | 74 bool fin, |
| 102 size_t frame_len, | 75 size_t frame_len, |
| 103 const QuicHeaderList& header_list) { | 76 const QuicHeaderList& header_list) { |
| 104 QuicSpdyStream::OnTrailingHeadersComplete(fin, frame_len, header_list); | 77 QuicSpdyStream::OnTrailingHeadersComplete(fin, frame_len, header_list); |
| 105 MarkTrailersConsumed(); | 78 MarkTrailersConsumed(); |
| 106 } | 79 } |
| 107 | 80 |
| 108 void QuicSpdyClientStream::OnPromiseHeadersComplete(QuicStreamId promised_id, | |
| 109 size_t frame_len) { | |
| 110 header_bytes_read_ += frame_len; | |
| 111 int64_t content_length = -1; | |
| 112 SpdyHeaderBlock promise_headers; | |
| 113 if (!SpdyUtils::ParseHeaders(decompressed_headers().data(), | |
| 114 decompressed_headers().length(), &content_length, | |
| 115 &promise_headers)) { | |
| 116 DLOG(ERROR) << "Failed to parse promise headers: " | |
| 117 << decompressed_headers(); | |
| 118 Reset(QUIC_BAD_APPLICATION_PAYLOAD); | |
| 119 return; | |
| 120 } | |
| 121 MarkHeadersConsumed(decompressed_headers().length()); | |
| 122 | |
| 123 session_->HandlePromised(id(), promised_id, promise_headers); | |
| 124 if (visitor() != nullptr) { | |
| 125 visitor()->OnPromiseHeadersComplete(promised_id, frame_len); | |
| 126 } | |
| 127 } | |
| 128 | |
| 129 void QuicSpdyClientStream::OnPromiseHeaderList( | 81 void QuicSpdyClientStream::OnPromiseHeaderList( |
| 130 QuicStreamId promised_id, | 82 QuicStreamId promised_id, |
| 131 size_t frame_len, | 83 size_t frame_len, |
| 132 const QuicHeaderList& header_list) { | 84 const QuicHeaderList& header_list) { |
| 133 header_bytes_read_ += frame_len; | 85 header_bytes_read_ += frame_len; |
| 134 int64_t content_length = -1; | 86 int64_t content_length = -1; |
| 135 SpdyHeaderBlock promise_headers; | 87 SpdyHeaderBlock promise_headers; |
| 136 if (!SpdyUtils::CopyAndValidateHeaders(header_list, &content_length, | 88 if (!SpdyUtils::CopyAndValidateHeaders(header_list, &content_length, |
| 137 &promise_headers)) { | 89 &promise_headers)) { |
| 138 DLOG(ERROR) << "Failed to parse promise headers: " | 90 DLOG(ERROR) << "Failed to parse promise headers: " |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 bytes_sent += header_bytes_written_; | 141 bytes_sent += header_bytes_written_; |
| 190 | 142 |
| 191 if (!body.empty()) { | 143 if (!body.empty()) { |
| 192 WriteOrBufferData(body, fin, nullptr); | 144 WriteOrBufferData(body, fin, nullptr); |
| 193 } | 145 } |
| 194 | 146 |
| 195 return bytes_sent; | 147 return bytes_sent; |
| 196 } | 148 } |
| 197 | 149 |
| 198 } // namespace net | 150 } // namespace net |
| OLD | NEW |