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

Unified Diff: remoting/protocol/buffered_socket_writer.cc

Issue 954973004: Move BufferedSocketWriter from remoting/protocol to remoting/base (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 | « remoting/protocol/buffered_socket_writer.h ('k') | remoting/protocol/buffered_socket_writer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(&current_packet, &current_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
« no previous file with comments | « remoting/protocol/buffered_socket_writer.h ('k') | remoting/protocol/buffered_socket_writer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698