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

Unified Diff: net/quic/quic_spdy_server_stream.cc

Issue 337093003: QuicServer: Use Chrome's header parsing rather than Balsa (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@quic_server_3
Patch Set: Lowercase SPDY header Created 6 years, 6 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
Index: net/quic/quic_spdy_server_stream.cc
diff --git a/net/quic/quic_spdy_server_stream.cc b/net/quic/quic_spdy_server_stream.cc
index de6917d3c7401a6eff3871807350ef945fe933ce..8dca3c4b30a4948dfbc4f0beb2296fe043cdc25c 100644
--- a/net/quic/quic_spdy_server_stream.cc
+++ b/net/quic/quic_spdy_server_stream.cc
@@ -5,14 +5,15 @@
#include "net/quic/quic_spdy_server_stream.h"
#include "base/memory/singleton.h"
+#include "base/strings/string_number_conversions.h"
#include "net/quic/quic_in_memory_cache.h"
#include "net/quic/quic_session.h"
#include "net/spdy/spdy_framer.h"
-#include "net/tools/quic/spdy_utils.h"
+#include "net/spdy/spdy_header_block.h"
+#include "net/spdy/spdy_http_utils.h"
using base::StringPiece;
using std::string;
-using net::tools::SpdyUtils;
namespace net {
@@ -39,11 +40,10 @@ uint32 QuicSpdyServerStream::ProcessData(const char* data, uint32 data_len) {
}
memcpy(read_buf_->data(), data, data_len);
read_buf_->set_offset(read_buf_->offset() + data_len);
- ParseRequestHeaders();
- } else {
- body_.append(data + total_bytes_processed,
- data_len - total_bytes_processed);
+ total_bytes_processed = ParseRequestHeaders();
wtc 2014/06/25 22:22:24 Check for -1 return value.
dmziegler 2014/06/26 01:23:29 Now it's void.
}
+ body_.append(data + total_bytes_processed,
+ data_len - total_bytes_processed);
wtc 2014/06/25 23:17:32 IMPORTANT: I think this code is wrong if read_buf_
dmziegler 2014/06/26 01:23:29 Done.
return data_len;
}
@@ -55,36 +55,34 @@ void QuicSpdyServerStream::OnFinRead() {
if (!request_headers_received_) {
SendErrorResponse(); // We're not done reading headers.
- } else if ((headers_.content_length_status() ==
- BalsaHeadersEnums::VALID_CONTENT_LENGTH) &&
- body_.size() != headers_.content_length()) {
- SendErrorResponse(); // Invalid content length
} else {
- SendResponse();
+ SpdyHeaderBlock::iterator it = headers_.find("content-length");
wtc 2014/06/25 22:22:24 Use a const_iterator.
dmziegler 2014/06/26 01:23:29 Done.
+ uint64 content_length;
+ if(it != headers_.end() &&
wtc 2014/06/25 22:22:24 Add a space after "if".
dmziegler 2014/06/26 01:23:29 Done.
+ (!base::StringToUint64(it->second, &content_length) ||
wtc 2014/06/25 22:22:24 I wonder if it's better to use base::StringToSizeT
dmziegler 2014/06/26 01:23:29 Done.
+ body_.size() != content_length)) {
+ SendErrorResponse(); // Invalid content length
+ } else {
+ SendResponse();
+ }
}
wtc 2014/06/25 22:22:24 Nit: to avoid nesting the if statements, it may be
dmziegler 2014/06/26 01:23:29 Done.
}
size_t QuicSpdyServerStream::ParseRequestHeaders() {
wtc 2014/06/25 22:22:24 IMPORTANT: since this function may return -1, the
dmziegler 2014/06/26 01:23:29 Now I've made it void since the return value wasn'
size_t read_buf_len = static_cast<size_t>(read_buf_->offset());
SpdyFramer framer(SPDY3);
- SpdyHeaderBlock headers;
char* data = read_buf_->StartOfBuffer();
wtc 2014/06/25 22:22:24 Move line 72 after this line.
dmziegler 2014/06/26 01:23:29 Done.
- size_t len = framer.ParseHeaderBlockInBuffer(data, read_buf_->offset(),
- &headers);
+ size_t len = framer.ParseHeaderBlockInBuffer(data, read_buf_len, &headers_);
if (len == 0) {
return -1;
}
- if (!SpdyUtils::FillBalsaRequestHeaders(headers, &headers_)) {
+ request_url_ = GetUrlFromHeaderBlock(headers_, SPDY3, false);
wtc 2014/06/25 22:22:24 Is it OK to hardcode the version SPDY3?
dmziegler 2014/06/26 01:23:29 All the test code seems to standardize on SPDY3 --
+ if (!request_url_.is_valid()) {
SendErrorResponse();
return -1;
}
- size_t delta = read_buf_len - len;
- if (delta > 0) {
- body_.append(data + len, delta);
- }
wtc 2014/06/25 22:22:24 IMPORTANT: Why is this code deleted?
dmziegler 2014/06/26 01:23:29 No longer deleted.
-
request_headers_received_ = true;
return len;
}
@@ -92,7 +90,7 @@ size_t QuicSpdyServerStream::ParseRequestHeaders() {
void QuicSpdyServerStream::SendResponse() {
// Find response in cache. If not found, send error response.
const QuicInMemoryCache::Response* response =
- QuicInMemoryCache::GetInstance()->GetResponse(headers_);
+ QuicInMemoryCache::GetInstance()->GetResponse(request_url_);
if (response == NULL) {
SendErrorResponse();
return;
@@ -115,23 +113,22 @@ void QuicSpdyServerStream::SendResponse() {
void QuicSpdyServerStream::SendErrorResponse() {
DVLOG(1) << "Sending error response for stream " << id();
- BalsaHeaders headers;
- headers.SetResponseFirstlineFromStringPieces(
- "HTTP/1.1", "500", "Server Error");
- headers.ReplaceOrAppendHeader("content-length", "3");
+ scoped_refptr<HttpResponseHeaders> headers
+ = new HttpResponseHeaders("HTTP/1.1 500 Server Error\n"
+ "content-length: 3\n");
wtc 2014/06/25 22:22:24 IMPORTANT: according to the comments in http_respo
dmziegler 2014/06/26 01:23:29 Done.
SendHeadersAndBody(headers, "bad");
}
void QuicSpdyServerStream::SendHeadersAndBody(
- const BalsaHeaders& response_headers,
+ scoped_refptr<HttpResponseHeaders> response_headers,
StringPiece body) {
// We only support SPDY and HTTP, and neither handles bidirectional streaming.
if (!read_side_closed()) {
CloseReadSide();
}
- SpdyHeaderBlock header_block =
- SpdyUtils::ResponseHeadersToSpdyHeaders(response_headers);
+ SpdyHeaderBlock header_block;
+ CreateSpdyHeadersFromHttpResponse(response_headers, SPDY3, &header_block);
wtc 2014/06/25 22:22:24 IMPORTANT: is it OK to hardcode the version SPDY3?
dmziegler 2014/06/26 01:23:29 Seems to be, since it's used only used for testing
WriteHeaders(header_block, body.empty(), NULL);

Powered by Google App Engine
This is Rietveld 408576698