| 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 81fc2e064e7b0c626a5e749aea7d7c8483fab072..239994a024bb38011ef1ede22e2a872abed093c8 100644
|
| --- a/net/quic/quic_spdy_server_stream.cc
|
| +++ b/net/quic/quic_spdy_server_stream.cc
|
| @@ -8,11 +8,11 @@
|
| #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 {
|
|
|
| @@ -29,8 +29,6 @@ QuicSpdyServerStream::~QuicSpdyServerStream() {
|
| }
|
|
|
| uint32 QuicSpdyServerStream::ProcessData(const char* data, uint32 data_len) {
|
| - uint32 total_bytes_processed = 0;
|
| -
|
| // Are we still reading the request headers.
|
| if (!request_headers_received_) {
|
| // Grow the read buffer if necessary.
|
| @@ -40,9 +38,6 @@ 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);
|
| }
|
| return data_len;
|
| }
|
| @@ -55,17 +50,12 @@ 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();
|
| }
|
| }
|
|
|
| int QuicSpdyServerStream::ParseRequestHeaders() {
|
| - size_t read_buf_len = static_cast<size_t>(read_buf_->offset());
|
| SpdyFramer framer(SPDY3);
|
| SpdyHeaderBlock headers;
|
| char* data = read_buf_->StartOfBuffer();
|
| @@ -75,16 +65,12 @@ int QuicSpdyServerStream::ParseRequestHeaders() {
|
| return -1;
|
| }
|
|
|
| - if (!SpdyUtils::FillBalsaRequestHeaders(headers, &headers_)) {
|
| + request_url_ = GetUrlFromHeaderBlock(headers, SPDY3, false);
|
| + if (!request_url_.is_valid()) {
|
| SendErrorResponse();
|
| return -1;
|
| }
|
|
|
| - size_t delta = read_buf_len - len;
|
| - if (delta > 0) {
|
| - body_.append(data + len, delta);
|
| - }
|
| -
|
| request_headers_received_ = true;
|
| return len;
|
| }
|
| @@ -92,7 +78,7 @@ int 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 +101,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");
|
| 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, &header_block, SPDY3);
|
|
|
| WriteHeaders(header_block, body.empty(), NULL);
|
|
|
|
|