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

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

Issue 2702383002: More improvements to logs. (Closed)
Patch Set: Created 3 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 unified diff | Download patch
« no previous file with comments | « net/quic/core/quic_stream.cc ('k') | no next file » | 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 "net/quic/core/quic_flags.h" 10 #include "net/quic/core/quic_flags.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 SendErrorResponse(); 54 SendErrorResponse();
55 } 55 }
56 56
57 void QuicSimpleServerStream::OnDataAvailable() { 57 void QuicSimpleServerStream::OnDataAvailable() {
58 while (HasBytesToRead()) { 58 while (HasBytesToRead()) {
59 struct iovec iov; 59 struct iovec iov;
60 if (GetReadableRegions(&iov, 1) == 0) { 60 if (GetReadableRegions(&iov, 1) == 0) {
61 // No more data to read. 61 // No more data to read.
62 break; 62 break;
63 } 63 }
64 QUIC_DVLOG(1) << "Processed " << iov.iov_len << " bytes for stream " 64 QUIC_DVLOG(1) << "Stream " << id() << " processed " << iov.iov_len
65 << id(); 65 << " bytes.";
66 body_.append(static_cast<char*>(iov.iov_base), iov.iov_len); 66 body_.append(static_cast<char*>(iov.iov_base), iov.iov_len);
67 67
68 if (content_length_ >= 0 && 68 if (content_length_ >= 0 &&
69 body_.size() > static_cast<uint64_t>(content_length_)) { 69 body_.size() > static_cast<uint64_t>(content_length_)) {
70 QUIC_DVLOG(1) << "Body size (" << body_.size() << ") > content length (" 70 QUIC_DVLOG(1) << "Body size (" << body_.size() << ") > content length ("
71 << content_length_ << ")."; 71 << content_length_ << ").";
72 SendErrorResponse(); 72 SendErrorResponse();
73 return; 73 return;
74 } 74 }
75 MarkConsumed(iov.iov_len); 75 MarkConsumed(iov.iov_len);
(...skipping 17 matching lines...) Expand all
93 void QuicSimpleServerStream::PushResponse( 93 void QuicSimpleServerStream::PushResponse(
94 SpdyHeaderBlock push_request_headers) { 94 SpdyHeaderBlock push_request_headers) {
95 if (id() % 2 != 0) { 95 if (id() % 2 != 0) {
96 QUIC_BUG << "Client initiated stream shouldn't be used as promised stream."; 96 QUIC_BUG << "Client initiated stream shouldn't be used as promised stream.";
97 return; 97 return;
98 } 98 }
99 // Change the stream state to emulate a client request. 99 // Change the stream state to emulate a client request.
100 request_headers_ = std::move(push_request_headers); 100 request_headers_ = std::move(push_request_headers);
101 content_length_ = 0; 101 content_length_ = 0;
102 QUIC_DVLOG(1) << "Stream " << id() 102 QUIC_DVLOG(1) << "Stream " << id()
103 << ": Ready to receive server push response."; 103 << " ready to receive server push response.";
104 104
105 // Set as if stream decompresed the headers and received fin. 105 // Set as if stream decompresed the headers and received fin.
106 QuicSpdyStream::OnInitialHeadersComplete(/*fin=*/true, 0, QuicHeaderList()); 106 QuicSpdyStream::OnInitialHeadersComplete(/*fin=*/true, 0, QuicHeaderList());
107 } 107 }
108 108
109 void QuicSimpleServerStream::SendResponse() { 109 void QuicSimpleServerStream::SendResponse() {
110 if (request_headers_.empty()) { 110 if (request_headers_.empty()) {
111 QUIC_DVLOG(1) << "Request headers empty."; 111 QUIC_DVLOG(1) << "Request headers empty.";
112 SendErrorResponse(); 112 SendErrorResponse();
113 return; 113 return;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 bool is_redirection = response_code / 100 == 3; 181 bool is_redirection = response_code / 100 == 3;
182 if (response_code != 200 && !is_redirection) { 182 if (response_code != 200 && !is_redirection) {
183 QUIC_LOG(WARNING) << "Response to server push request " << request_url 183 QUIC_LOG(WARNING) << "Response to server push request " << request_url
184 << " result in response code " << response_code; 184 << " result in response code " << response_code;
185 Reset(QUIC_STREAM_CANCELLED); 185 Reset(QUIC_STREAM_CANCELLED);
186 return; 186 return;
187 } 187 }
188 } 188 }
189 std::list<QuicHttpResponseCache::ServerPushInfo> resources = 189 std::list<QuicHttpResponseCache::ServerPushInfo> resources =
190 response_cache_->GetServerPushResources(request_url); 190 response_cache_->GetServerPushResources(request_url);
191 QUIC_DVLOG(1) << "Found " << resources.size() << " push resources for stream " 191 QUIC_DVLOG(1) << "Stream " << id() << " found " << resources.size()
192 << id(); 192 << " push resources.";
193 193
194 if (!resources.empty()) { 194 if (!resources.empty()) {
195 QuicSimpleServerSession* session = 195 QuicSimpleServerSession* session =
196 static_cast<QuicSimpleServerSession*>(spdy_session()); 196 static_cast<QuicSimpleServerSession*>(spdy_session());
197 session->PromisePushResources(request_url, resources, id(), 197 session->PromisePushResources(request_url, resources, id(),
198 request_headers_); 198 request_headers_);
199 } 199 }
200 200
201 QUIC_DVLOG(1) << "Sending response for stream " << id(); 201 QUIC_DVLOG(1) << "Stream " << id() << " sending response.";
202 SendHeadersAndBodyAndTrailers(response->headers().Clone(), response->body(), 202 SendHeadersAndBodyAndTrailers(response->headers().Clone(), response->body(),
203 response->trailers().Clone()); 203 response->trailers().Clone());
204 } 204 }
205 205
206 void QuicSimpleServerStream::SendNotFoundResponse() { 206 void QuicSimpleServerStream::SendNotFoundResponse() {
207 QUIC_DVLOG(1) << "Sending not found response for stream " << id(); 207 QUIC_DVLOG(1) << "Stream " << id() << " sending not found response.";
208 SpdyHeaderBlock headers; 208 SpdyHeaderBlock headers;
209 headers[":status"] = "404"; 209 headers[":status"] = "404";
210 headers["content-length"] = 210 headers["content-length"] =
211 QuicTextUtils::Uint64ToString(strlen(kNotFoundResponseBody)); 211 QuicTextUtils::Uint64ToString(strlen(kNotFoundResponseBody));
212 SendHeadersAndBody(std::move(headers), kNotFoundResponseBody); 212 SendHeadersAndBody(std::move(headers), kNotFoundResponseBody);
213 } 213 }
214 214
215 void QuicSimpleServerStream::SendErrorResponse() { 215 void QuicSimpleServerStream::SendErrorResponse() {
216 QUIC_DVLOG(1) << "Sending error response for stream " << id(); 216 QUIC_DVLOG(1) << "Stream " << id() << " sending error response.";
217 SpdyHeaderBlock headers; 217 SpdyHeaderBlock headers;
218 headers[":status"] = "500"; 218 headers[":status"] = "500";
219 headers["content-length"] = 219 headers["content-length"] =
220 QuicTextUtils::Uint64ToString(strlen(kErrorResponseBody)); 220 QuicTextUtils::Uint64ToString(strlen(kErrorResponseBody));
221 SendHeadersAndBody(std::move(headers), kErrorResponseBody); 221 SendHeadersAndBody(std::move(headers), kErrorResponseBody);
222 } 222 }
223 223
224 void QuicSimpleServerStream::SendHeadersAndBody( 224 void QuicSimpleServerStream::SendHeadersAndBody(
225 SpdyHeaderBlock response_headers, 225 SpdyHeaderBlock response_headers,
226 StringPiece body) { 226 StringPiece body) {
227 SendHeadersAndBodyAndTrailers(std::move(response_headers), body, 227 SendHeadersAndBodyAndTrailers(std::move(response_headers), body,
228 SpdyHeaderBlock()); 228 SpdyHeaderBlock());
229 } 229 }
230 230
231 void QuicSimpleServerStream::SendHeadersAndBodyAndTrailers( 231 void QuicSimpleServerStream::SendHeadersAndBodyAndTrailers(
232 SpdyHeaderBlock response_headers, 232 SpdyHeaderBlock response_headers,
233 StringPiece body, 233 StringPiece body,
234 SpdyHeaderBlock response_trailers) { 234 SpdyHeaderBlock response_trailers) {
235 if (!allow_bidirectional_data() && !reading_stopped()) { 235 if (!allow_bidirectional_data() && !reading_stopped()) {
236 StopReading(); 236 StopReading();
237 } 237 }
238 238
239 // Send the headers, with a FIN if there's nothing else to send. 239 // Send the headers, with a FIN if there's nothing else to send.
240 bool send_fin = (body.empty() && response_trailers.empty()); 240 bool send_fin = (body.empty() && response_trailers.empty());
241 QUIC_DLOG(INFO) << "Writing headers (fin = " << send_fin 241 QUIC_DLOG(INFO) << "Stream " << id() << " writing headers (fin = " << send_fin
242 << ") : " << response_headers.DebugString(); 242 << ") : " << response_headers.DebugString();
243 WriteHeaders(std::move(response_headers), send_fin, nullptr); 243 WriteHeaders(std::move(response_headers), send_fin, nullptr);
244 if (send_fin) { 244 if (send_fin) {
245 // Nothing else to send. 245 // Nothing else to send.
246 return; 246 return;
247 } 247 }
248 248
249 // Send the body, with a FIN if there's no trailers to send. 249 // Send the body, with a FIN if there's no trailers to send.
250 send_fin = response_trailers.empty(); 250 send_fin = response_trailers.empty();
251 QUIC_DLOG(INFO) << "Writing body (fin = " << send_fin 251 QUIC_DLOG(INFO) << "Stream " << id() << " writing body (fin = " << send_fin
252 << ") with size: " << body.size(); 252 << ") with size: " << body.size();
253 if (!body.empty() || send_fin) { 253 if (!body.empty() || send_fin) {
254 WriteOrBufferData(body, send_fin, nullptr); 254 WriteOrBufferData(body, send_fin, nullptr);
255 } 255 }
256 if (send_fin) { 256 if (send_fin) {
257 // Nothing else to send. 257 // Nothing else to send.
258 return; 258 return;
259 } 259 }
260 260
261 // Send the trailers. A FIN is always sent with trailers. 261 // Send the trailers. A FIN is always sent with trailers.
262 QUIC_DLOG(INFO) << "Writing trailers (fin = true): " 262 QUIC_DLOG(INFO) << "Stream " << id() << " writing trailers (fin = true): "
263 << response_trailers.DebugString(); 263 << response_trailers.DebugString();
264 WriteTrailers(std::move(response_trailers), nullptr); 264 WriteTrailers(std::move(response_trailers), nullptr);
265 } 265 }
266 266
267 const char* const QuicSimpleServerStream::kErrorResponseBody = "bad"; 267 const char* const QuicSimpleServerStream::kErrorResponseBody = "bad";
268 const char* const QuicSimpleServerStream::kNotFoundResponseBody = 268 const char* const QuicSimpleServerStream::kNotFoundResponseBody =
269 "file not found"; 269 "file not found";
270 270
271 } // namespace net 271 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_stream.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698