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

Unified Diff: net/quic/quic_spdy_server_stream.cc

Issue 992733002: Remove //net (except for Android test stuff) and sdch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 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
« no previous file with comments | « net/quic/quic_spdy_server_stream.h ('k') | net/quic/quic_stream_factory.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
deleted file mode 100644
index b0f8abb2ce939a2760edcf9b8c8cffe27982e514..0000000000000000000000000000000000000000
--- a/net/quic/quic_spdy_server_stream.cc
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#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/quic/spdy_utils.h"
-#include "net/spdy/spdy_framer.h"
-#include "net/spdy/spdy_header_block.h"
-#include "net/spdy/spdy_http_utils.h"
-
-using base::StringPiece;
-using std::string;
-
-namespace net {
-
-static const size_t kHeaderBufInitialSize = 4096;
-
-QuicSpdyServerStream::QuicSpdyServerStream(QuicStreamId id,
- QuicSession* session)
- : QuicDataStream(id, session),
- read_buf_(new GrowableIOBuffer()),
- request_headers_received_(false) {
- read_buf_->SetCapacity(kHeaderBufInitialSize);
-}
-
-QuicSpdyServerStream::~QuicSpdyServerStream() {
-}
-
-uint32 QuicSpdyServerStream::ProcessData(const char* data, uint32 data_len) {
- if (data_len > INT_MAX) {
- LOG(DFATAL) << "Data length too long: " << data_len;
- return 0;
- }
- // Are we still reading the request headers.
- if (!request_headers_received_) {
- // Grow the read buffer if necessary.
- while (read_buf_->RemainingCapacity() < static_cast<int>(data_len)) {
- read_buf_->SetCapacity(read_buf_->capacity() * 2);
- }
- memcpy(read_buf_->data(), data, data_len);
- read_buf_->set_offset(read_buf_->offset() + data_len);
- // Try parsing the request headers. This will set request_headers_received_
- // if successful; if not, it will be tried again with more data.
- ParseRequestHeaders();
- } else {
- body_.append(data, data_len);
- }
- return data_len;
-}
-
-void QuicSpdyServerStream::OnFinRead() {
- ReliableQuicStream::OnFinRead();
- if (write_side_closed() || fin_buffered()) {
- return;
- }
-
- if (!request_headers_received_) {
- SendErrorResponse(); // We're not done reading headers.
- return;
- }
-
- SpdyHeaderBlock::const_iterator it = headers_.find("content-length");
- size_t content_length;
- if (it != headers_.end() &&
- (!base::StringToSizeT(it->second, &content_length) ||
- body_.size() != content_length)) {
- SendErrorResponse(); // Invalid content length
- return;
- }
-
- SendResponse();
-}
-
-// Try parsing the request headers. If successful, sets
-// request_headers_received_. If not successful, it can just be tried again once
-// there's more data.
-void QuicSpdyServerStream::ParseRequestHeaders() {
- SpdyFramer framer((kDefaultSpdyMajorVersion));
- const char* data = read_buf_->StartOfBuffer();
- size_t read_buf_len = static_cast<size_t>(read_buf_->offset());
- size_t len = framer.ParseHeaderBlockInBuffer(data, read_buf_len, &headers_);
- if (len == 0) {
- // Not enough data yet, presumably. (If we still don't succeed by the end of
- // the stream, then we'll error in OnFinRead().)
- return;
- }
-
- // Headers received and parsed: extract the request URL.
- request_url_ = GetUrlFromHeaderBlock(headers_,
- kDefaultSpdyMajorVersion,
- false);
- if (!request_url_.is_valid()) {
- SendErrorResponse();
- return;
- }
-
- // Add any data past the headers to the request body.
- size_t delta = read_buf_len - len;
- if (delta > 0) {
- body_.append(data + len, delta);
- }
-
- request_headers_received_ = true;
-}
-
-void QuicSpdyServerStream::SendResponse() {
- // Find response in cache. If not found, send error response.
- const QuicInMemoryCache::Response* response =
- QuicInMemoryCache::GetInstance()->GetResponse(request_url_);
- if (response == nullptr) {
- SendErrorResponse();
- return;
- }
-
- if (response->response_type() == QuicInMemoryCache::CLOSE_CONNECTION) {
- DVLOG(1) << "Special response: closing connection.";
- CloseConnection(QUIC_NO_ERROR);
- return;
- }
-
- if (response->response_type() == QuicInMemoryCache::IGNORE_REQUEST) {
- DVLOG(1) << "Special response: ignoring request.";
- return;
- }
-
- DVLOG(1) << "Sending response for stream " << id();
- SendHeadersAndBody(response->headers(), response->body());
-}
-
-void QuicSpdyServerStream::SendErrorResponse() {
- DVLOG(1) << "Sending error response for stream " << id();
- scoped_refptr<HttpResponseHeaders> headers
- = new HttpResponseHeaders(string("HTTP/1.1 500 Server Error") + '\0' +
- "content-length: 3" + '\0' + '\0');
- SendHeadersAndBody(*headers.get(), "bad");
-}
-
-void QuicSpdyServerStream::SendHeadersAndBody(
- const HttpResponseHeaders& response_headers,
- StringPiece body) {
- // We only support SPDY and HTTP, and neither handles bidirectional streaming.
- if (!read_side_closed()) {
- CloseReadSide();
- }
-
- SpdyHeaderBlock header_block;
- CreateSpdyHeadersFromHttpResponse(response_headers,
- kDefaultSpdyMajorVersion,
- &header_block);
-
- WriteHeaders(header_block, body.empty(), nullptr);
-
- if (!body.empty()) {
- WriteOrBufferData(body, true, nullptr);
- }
-}
-
-} // namespace net
« no previous file with comments | « net/quic/quic_spdy_server_stream.h ('k') | net/quic/quic_stream_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698