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

Side by Side Diff: net/tools/quic/quic_simple_server_stream.cc

Issue 2429653002: Test refactors to allow for delaying response trailers. (Closed)
Patch Set: Created 4 years, 2 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 unified diff | Download patch
« no previous file with comments | « net/tools/quic/quic_simple_server_stream.h ('k') | net/tools/quic/test_tools/server_thread.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_simple_server_stream.h" 5 #include "net/tools/quic/quic_simple_server_stream.h"
6 6
7 #include <list> 7 #include <list>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 10 matching lines...) Expand all
21 #include "net/tools/quic/quic_simple_server_session.h" 21 #include "net/tools/quic/quic_simple_server_session.h"
22 22
23 using base::StringPiece; 23 using base::StringPiece;
24 using base::StringToInt; 24 using base::StringToInt;
25 using std::string; 25 using std::string;
26 26
27 namespace net { 27 namespace net {
28 28
29 QuicSimpleServerStream::QuicSimpleServerStream(QuicStreamId id, 29 QuicSimpleServerStream::QuicSimpleServerStream(QuicStreamId id,
30 QuicSpdySession* session) 30 QuicSpdySession* session)
31 : QuicSpdyStream(id, session), 31 : QuicSpdyStream(id, session), content_length_(-1) {}
32 content_length_(-1),
33 response_started_(false) {}
34 32
35 QuicSimpleServerStream::~QuicSimpleServerStream() {} 33 QuicSimpleServerStream::~QuicSimpleServerStream() {}
36 34
37 void QuicSimpleServerStream::OnInitialHeadersComplete(bool fin, 35 void QuicSimpleServerStream::OnInitialHeadersComplete(bool fin,
38 size_t frame_len) { 36 size_t frame_len) {
39 QuicSpdyStream::OnInitialHeadersComplete(fin, frame_len); 37 QuicSpdyStream::OnInitialHeadersComplete(fin, frame_len);
40 if (!SpdyUtils::ParseHeaders(decompressed_headers().data(), 38 if (!SpdyUtils::ParseHeaders(decompressed_headers().data(),
41 decompressed_headers().length(), 39 decompressed_headers().length(),
42 &content_length_, &request_headers_)) { 40 &content_length_, &request_headers_)) {
43 DVLOG(1) << "Invalid headers"; 41 DVLOG(1) << "Invalid headers";
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 } 96 }
99 97
100 // If the sequencer is closed, then all the body, including the fin, has been 98 // If the sequencer is closed, then all the body, including the fin, has been
101 // consumed. 99 // consumed.
102 OnFinRead(); 100 OnFinRead();
103 101
104 if (write_side_closed() || fin_buffered()) { 102 if (write_side_closed() || fin_buffered()) {
105 return; 103 return;
106 } 104 }
107 105
108 // Subclass could have manually invoked SendResponse earlier. 106 SendResponse();
109 if (!response_started_) {
110 SendResponse();
111 }
112 } 107 }
113 108
114 void QuicSimpleServerStream::PushResponse( 109 void QuicSimpleServerStream::PushResponse(
115 SpdyHeaderBlock push_request_headers) { 110 SpdyHeaderBlock push_request_headers) {
116 if (id() % 2 != 0) { 111 if (id() % 2 != 0) {
117 QUIC_BUG << "Client initiated stream shouldn't be used as promised stream."; 112 QUIC_BUG << "Client initiated stream shouldn't be used as promised stream.";
118 return; 113 return;
119 } 114 }
120 // Change the stream state to emulate a client request. 115 // Change the stream state to emulate a client request.
121 request_headers_ = std::move(push_request_headers); 116 request_headers_ = std::move(push_request_headers);
122 content_length_ = 0; 117 content_length_ = 0;
123 DVLOG(1) << "Stream " << id() << ": Ready to receive server push response."; 118 DVLOG(1) << "Stream " << id() << ": Ready to receive server push response.";
124 119
125 // Set as if stream decompresed the headers and received fin. 120 // Set as if stream decompresed the headers and received fin.
126 QuicSpdyStream::OnInitialHeadersComplete(/*fin=*/true, 0); 121 QuicSpdyStream::OnInitialHeadersComplete(/*fin=*/true, 0);
127 } 122 }
128 123
129 void QuicSimpleServerStream::SendResponse() { 124 void QuicSimpleServerStream::SendResponse() {
130 DCHECK(!response_started_);
131 response_started_ = true;
132
133 if (request_headers_.empty()) { 125 if (request_headers_.empty()) {
134 DVLOG(1) << "Request headers empty."; 126 DVLOG(1) << "Request headers empty.";
135 SendErrorResponse(); 127 SendErrorResponse();
136 return; 128 return;
137 } 129 }
138 130
139 if (content_length_ > 0 && 131 if (content_length_ > 0 &&
140 static_cast<uint64_t>(content_length_) != body_.size()) { 132 static_cast<uint64_t>(content_length_) != body_.size()) {
141 DVLOG(1) << "Content length (" << content_length_ << ") != body size (" 133 DVLOG(1) << "Content length (" << content_length_ << ") != body size ("
142 << body_.size() << ")."; 134 << body_.size() << ").";
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 DVLOG(1) << "Writing trailers (fin = true): " 264 DVLOG(1) << "Writing trailers (fin = true): "
273 << response_trailers.DebugString(); 265 << response_trailers.DebugString();
274 WriteTrailers(std::move(response_trailers), nullptr); 266 WriteTrailers(std::move(response_trailers), nullptr);
275 } 267 }
276 268
277 const char* const QuicSimpleServerStream::kErrorResponseBody = "bad"; 269 const char* const QuicSimpleServerStream::kErrorResponseBody = "bad";
278 const char* const QuicSimpleServerStream::kNotFoundResponseBody = 270 const char* const QuicSimpleServerStream::kNotFoundResponseBody =
279 "file not found"; 271 "file not found";
280 272
281 } // namespace net 273 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_simple_server_stream.h ('k') | net/tools/quic/test_tools/server_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698