| Index: net/quic/quic_data_stream.cc
|
| diff --git a/net/quic/quic_data_stream.cc b/net/quic/quic_data_stream.cc
|
| deleted file mode 100644
|
| index aa24d0c4b98295461d1298a35cfb1e23d1c15e4a..0000000000000000000000000000000000000000
|
| --- a/net/quic/quic_data_stream.cc
|
| +++ /dev/null
|
| @@ -1,187 +0,0 @@
|
| -// Copyright 2013 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_data_stream.h"
|
| -
|
| -#include "base/logging.h"
|
| -#include "net/quic/quic_session.h"
|
| -#include "net/quic/quic_utils.h"
|
| -#include "net/quic/quic_write_blocked_list.h"
|
| -
|
| -using base::StringPiece;
|
| -using std::min;
|
| -
|
| -namespace net {
|
| -
|
| -#define ENDPOINT (session()->is_server() ? "Server: " : " Client: ")
|
| -
|
| -namespace {
|
| -
|
| -// This is somewhat arbitrary. It's possible, but unlikely, we will either fail
|
| -// to set a priority client-side, or cancel a stream before stripping the
|
| -// priority from the wire server-side. In either case, start out with a
|
| -// priority in the middle.
|
| -QuicPriority kDefaultPriority = 3;
|
| -
|
| -} // namespace
|
| -
|
| -QuicDataStream::QuicDataStream(QuicStreamId id,
|
| - QuicSession* session)
|
| - : ReliableQuicStream(id, session),
|
| - visitor_(nullptr),
|
| - headers_decompressed_(false),
|
| - priority_(kDefaultPriority),
|
| - decompression_failed_(false),
|
| - priority_parsed_(false) {
|
| - DCHECK_NE(kCryptoStreamId, id);
|
| - // Don't receive any callbacks from the sequencer until headers
|
| - // are complete.
|
| - sequencer()->SetBlockedUntilFlush();
|
| -}
|
| -
|
| -QuicDataStream::~QuicDataStream() {
|
| -}
|
| -
|
| -size_t QuicDataStream::WriteHeaders(
|
| - const SpdyHeaderBlock& header_block,
|
| - bool fin,
|
| - QuicAckNotifier::DelegateInterface* ack_notifier_delegate) {
|
| - size_t bytes_written = session()->WriteHeaders(
|
| - id(), header_block, fin, priority_, ack_notifier_delegate);
|
| - if (fin) {
|
| - // TODO(rch): Add test to ensure fin_sent_ is set whenever a fin is sent.
|
| - set_fin_sent(true);
|
| - CloseWriteSide();
|
| - }
|
| - return bytes_written;
|
| -}
|
| -
|
| -size_t QuicDataStream::Readv(const struct iovec* iov, size_t iov_len) {
|
| - if (FinishedReadingHeaders()) {
|
| - // If the headers have been read, simply delegate to the sequencer's
|
| - // Readv method.
|
| - return sequencer()->Readv(iov, iov_len);
|
| - }
|
| - // Otherwise, copy decompressed header data into |iov|.
|
| - size_t bytes_consumed = 0;
|
| - size_t iov_index = 0;
|
| - while (iov_index < iov_len &&
|
| - decompressed_headers_.length() > bytes_consumed) {
|
| - size_t bytes_to_read = min(iov[iov_index].iov_len,
|
| - decompressed_headers_.length() - bytes_consumed);
|
| - char* iov_ptr = static_cast<char*>(iov[iov_index].iov_base);
|
| - memcpy(iov_ptr,
|
| - decompressed_headers_.data() + bytes_consumed, bytes_to_read);
|
| - bytes_consumed += bytes_to_read;
|
| - ++iov_index;
|
| - }
|
| - decompressed_headers_.erase(0, bytes_consumed);
|
| - if (FinishedReadingHeaders()) {
|
| - sequencer()->FlushBufferedFrames();
|
| - }
|
| - return bytes_consumed;
|
| -}
|
| -
|
| -int QuicDataStream::GetReadableRegions(iovec* iov, size_t iov_len) {
|
| - if (FinishedReadingHeaders()) {
|
| - return sequencer()->GetReadableRegions(iov, iov_len);
|
| - }
|
| - if (iov_len == 0) {
|
| - return 0;
|
| - }
|
| - iov[0].iov_base = static_cast<void*>(
|
| - const_cast<char*>(decompressed_headers_.data()));
|
| - iov[0].iov_len = decompressed_headers_.length();
|
| - return 1;
|
| -}
|
| -
|
| -bool QuicDataStream::IsDoneReading() const {
|
| - if (!headers_decompressed_ || !decompressed_headers_.empty()) {
|
| - return false;
|
| - }
|
| - return sequencer()->IsClosed();
|
| -}
|
| -
|
| -bool QuicDataStream::HasBytesToRead() const {
|
| - return !decompressed_headers_.empty() || sequencer()->HasBytesToRead();
|
| -}
|
| -
|
| -void QuicDataStream::set_priority(QuicPriority priority) {
|
| - DCHECK_EQ(0u, stream_bytes_written());
|
| - priority_ = priority;
|
| -}
|
| -
|
| -QuicPriority QuicDataStream::EffectivePriority() const {
|
| - return priority();
|
| -}
|
| -
|
| -uint32 QuicDataStream::ProcessRawData(const char* data, uint32 data_len) {
|
| - if (!FinishedReadingHeaders()) {
|
| - LOG(DFATAL) << "ProcessRawData called before headers have been finished";
|
| - return 0;
|
| - }
|
| - return ProcessData(data, data_len);
|
| -}
|
| -
|
| -const IPEndPoint& QuicDataStream::GetPeerAddress() {
|
| - return session()->peer_address();
|
| -}
|
| -
|
| -bool QuicDataStream::GetSSLInfo(SSLInfo* ssl_info) {
|
| - return session()->GetSSLInfo(ssl_info);
|
| -}
|
| -
|
| -uint32 QuicDataStream::ProcessHeaderData() {
|
| - if (decompressed_headers_.empty()) {
|
| - return 0;
|
| - }
|
| -
|
| - size_t bytes_processed = ProcessData(decompressed_headers_.data(),
|
| - decompressed_headers_.length());
|
| - if (bytes_processed == decompressed_headers_.length()) {
|
| - decompressed_headers_.clear();
|
| - } else {
|
| - decompressed_headers_ = decompressed_headers_.erase(0, bytes_processed);
|
| - }
|
| - return bytes_processed;
|
| -}
|
| -
|
| -void QuicDataStream::OnStreamHeaders(StringPiece headers_data) {
|
| - headers_data.AppendToString(&decompressed_headers_);
|
| - ProcessHeaderData();
|
| -}
|
| -
|
| -void QuicDataStream::OnStreamHeadersPriority(QuicPriority priority) {
|
| - DCHECK(session()->connection()->is_server());
|
| - set_priority(priority);
|
| -}
|
| -
|
| -void QuicDataStream::OnStreamHeadersComplete(bool fin, size_t frame_len) {
|
| - headers_decompressed_ = true;
|
| - if (fin) {
|
| - sequencer()->OnStreamFrame(QuicStreamFrame(id(), fin, 0, IOVector()));
|
| - }
|
| - ProcessHeaderData();
|
| - if (FinishedReadingHeaders()) {
|
| - sequencer()->FlushBufferedFrames();
|
| - }
|
| -}
|
| -
|
| -void QuicDataStream::OnClose() {
|
| - ReliableQuicStream::OnClose();
|
| -
|
| - if (visitor_) {
|
| - Visitor* visitor = visitor_;
|
| - // Calling Visitor::OnClose() may result the destruction of the visitor,
|
| - // so we need to ensure we don't call it again.
|
| - visitor_ = nullptr;
|
| - visitor->OnClose(this);
|
| - }
|
| -}
|
| -
|
| -bool QuicDataStream::FinishedReadingHeaders() {
|
| - return headers_decompressed_ && decompressed_headers_.empty();
|
| -}
|
| -
|
| -} // namespace net
|
|
|