Index: remoting/protocol/buffered_socket_writer.cc |
diff --git a/remoting/protocol/buffered_socket_writer.cc b/remoting/protocol/buffered_socket_writer.cc |
deleted file mode 100644 |
index 28845f9cd527296d5d41642a99f291f52e838b6e..0000000000000000000000000000000000000000 |
--- a/remoting/protocol/buffered_socket_writer.cc |
+++ /dev/null |
@@ -1,236 +0,0 @@ |
-// Copyright (c) 2012 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 "remoting/protocol/buffered_socket_writer.h" |
- |
-#include "base/bind.h" |
-#include "base/location.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/stl_util.h" |
-#include "base/thread_task_runner_handle.h" |
-#include "net/base/net_errors.h" |
- |
-namespace remoting { |
-namespace protocol { |
- |
-struct BufferedSocketWriterBase::PendingPacket { |
- PendingPacket(scoped_refptr<net::IOBufferWithSize> data, |
- const base::Closure& done_task) |
- : data(data), |
- done_task(done_task) { |
- } |
- |
- scoped_refptr<net::IOBufferWithSize> data; |
- base::Closure done_task; |
-}; |
- |
-BufferedSocketWriterBase::BufferedSocketWriterBase() |
- : buffer_size_(0), |
- socket_(nullptr), |
- write_pending_(false), |
- closed_(false), |
- destroyed_flag_(nullptr) { |
-} |
- |
-void BufferedSocketWriterBase::Init(net::Socket* socket, |
- const WriteFailedCallback& callback) { |
- DCHECK(CalledOnValidThread()); |
- DCHECK(socket); |
- socket_ = socket; |
- write_failed_callback_ = callback; |
-} |
- |
-bool BufferedSocketWriterBase::Write( |
- scoped_refptr<net::IOBufferWithSize> data, const base::Closure& done_task) { |
- DCHECK(CalledOnValidThread()); |
- DCHECK(socket_); |
- DCHECK(data.get()); |
- |
- // Don't write after Close(). |
- if (closed_) |
- return false; |
- |
- queue_.push_back(new PendingPacket(data, done_task)); |
- buffer_size_ += data->size(); |
- |
- DoWrite(); |
- |
- // DoWrite() may trigger OnWriteError() to be called. |
- return !closed_; |
-} |
- |
-void BufferedSocketWriterBase::DoWrite() { |
- DCHECK(CalledOnValidThread()); |
- DCHECK(socket_); |
- |
- // Don't try to write if there is another write pending. |
- if (write_pending_) |
- return; |
- |
- // Don't write after Close(). |
- if (closed_) |
- return; |
- |
- while (true) { |
- net::IOBuffer* current_packet; |
- int current_packet_size; |
- GetNextPacket(¤t_packet, ¤t_packet_size); |
- |
- // Return if the queue is empty. |
- if (!current_packet) |
- return; |
- |
- int result = socket_->Write( |
- current_packet, current_packet_size, |
- base::Bind(&BufferedSocketWriterBase::OnWritten, |
- base::Unretained(this))); |
- bool write_again = false; |
- HandleWriteResult(result, &write_again); |
- if (!write_again) |
- return; |
- } |
-} |
- |
-void BufferedSocketWriterBase::HandleWriteResult(int result, |
- bool* write_again) { |
- *write_again = false; |
- if (result < 0) { |
- if (result == net::ERR_IO_PENDING) { |
- write_pending_ = true; |
- } else { |
- HandleError(result); |
- if (!write_failed_callback_.is_null()) |
- write_failed_callback_.Run(result); |
- } |
- return; |
- } |
- |
- base::Closure done_task = AdvanceBufferPosition(result); |
- if (!done_task.is_null()) { |
- bool destroyed = false; |
- destroyed_flag_ = &destroyed; |
- done_task.Run(); |
- if (destroyed) { |
- // Stop doing anything if we've been destroyed by the callback. |
- return; |
- } |
- destroyed_flag_ = nullptr; |
- } |
- |
- *write_again = true; |
-} |
- |
-void BufferedSocketWriterBase::OnWritten(int result) { |
- DCHECK(CalledOnValidThread()); |
- DCHECK(write_pending_); |
- write_pending_ = false; |
- |
- bool write_again; |
- HandleWriteResult(result, &write_again); |
- if (write_again) |
- DoWrite(); |
-} |
- |
-void BufferedSocketWriterBase::HandleError(int result) { |
- DCHECK(CalledOnValidThread()); |
- |
- closed_ = true; |
- |
- STLDeleteElements(&queue_); |
- |
- // Notify subclass that an error is received. |
- OnError(result); |
-} |
- |
-int BufferedSocketWriterBase::GetBufferSize() { |
- return buffer_size_; |
-} |
- |
-int BufferedSocketWriterBase::GetBufferChunks() { |
- return queue_.size(); |
-} |
- |
-void BufferedSocketWriterBase::Close() { |
- DCHECK(CalledOnValidThread()); |
- closed_ = true; |
-} |
- |
-BufferedSocketWriterBase::~BufferedSocketWriterBase() { |
- if (destroyed_flag_) |
- *destroyed_flag_ = true; |
- |
- STLDeleteElements(&queue_); |
-} |
- |
-base::Closure BufferedSocketWriterBase::PopQueue() { |
- base::Closure result = queue_.front()->done_task; |
- delete queue_.front(); |
- queue_.pop_front(); |
- return result; |
-} |
- |
-BufferedSocketWriter::BufferedSocketWriter() { |
-} |
- |
-void BufferedSocketWriter::GetNextPacket( |
- net::IOBuffer** buffer, int* size) { |
- if (!current_buf_.get()) { |
- if (queue_.empty()) { |
- *buffer = nullptr; |
- return; // Nothing to write. |
- } |
- current_buf_ = new net::DrainableIOBuffer(queue_.front()->data.get(), |
- queue_.front()->data->size()); |
- } |
- |
- *buffer = current_buf_.get(); |
- *size = current_buf_->BytesRemaining(); |
-} |
- |
-base::Closure BufferedSocketWriter::AdvanceBufferPosition(int written) { |
- buffer_size_ -= written; |
- current_buf_->DidConsume(written); |
- |
- if (current_buf_->BytesRemaining() == 0) { |
- current_buf_ = nullptr; |
- return PopQueue(); |
- } |
- return base::Closure(); |
-} |
- |
-void BufferedSocketWriter::OnError(int result) { |
- current_buf_ = nullptr; |
-} |
- |
-BufferedSocketWriter::~BufferedSocketWriter() { |
-} |
- |
-BufferedDatagramWriter::BufferedDatagramWriter() { |
-} |
- |
-void BufferedDatagramWriter::GetNextPacket( |
- net::IOBuffer** buffer, int* size) { |
- if (queue_.empty()) { |
- *buffer = nullptr; |
- return; // Nothing to write. |
- } |
- *buffer = queue_.front()->data.get(); |
- *size = queue_.front()->data->size(); |
-} |
- |
-base::Closure BufferedDatagramWriter::AdvanceBufferPosition(int written) { |
- DCHECK_EQ(written, queue_.front()->data->size()); |
- buffer_size_ -= queue_.front()->data->size(); |
- return PopQueue(); |
-} |
- |
-void BufferedDatagramWriter::OnError(int result) { |
- // Nothing to do here. |
-} |
- |
-BufferedDatagramWriter::~BufferedDatagramWriter() { |
-} |
- |
-} // namespace protocol |
-} // namespace remoting |