| Index: jingle/glue/pseudotcp_adapter.cc
|
| diff --git a/jingle/glue/pseudotcp_adapter.cc b/jingle/glue/pseudotcp_adapter.cc
|
| index 7807eedc02e2e73beb0f851328a7b5d0d03c0330..cb6ed91a96ddb5c2e50cae37eddd06b55d6b2014 100644
|
| --- a/jingle/glue/pseudotcp_adapter.cc
|
| +++ b/jingle/glue/pseudotcp_adapter.cc
|
| @@ -30,12 +30,9 @@ class PseudoTcpAdapter::Core : public cricket::IPseudoTcpNotify,
|
|
|
| // Functions used to implement net::StreamSocket.
|
| int Read(net::IOBuffer* buffer, int buffer_size,
|
| - net::OldCompletionCallback* callback);
|
| - int Read(net::IOBuffer* buffer, int buffer_size,
|
| const net::CompletionCallback& callback);
|
| int Write(net::IOBuffer* buffer, int buffer_size,
|
| - net::OldCompletionCallback* callback);
|
| - int Connect(net::OldCompletionCallback* callback);
|
| + const net::CompletionCallback& callback);
|
| int Connect(const net::CompletionCallback& callback);
|
| void Disconnect();
|
| bool IsConnected() const;
|
| @@ -71,11 +68,9 @@ class PseudoTcpAdapter::Core : public cricket::IPseudoTcpNotify,
|
| // This re-sets |timer| without triggering callbacks.
|
| void AdjustClock();
|
|
|
| - net::OldCompletionCallback* old_connect_callback_;
|
| net::CompletionCallback connect_callback_;
|
| - net::OldCompletionCallback* old_read_callback_;
|
| net::CompletionCallback read_callback_;
|
| - net::OldCompletionCallback* write_callback_;
|
| + net::CompletionCallback write_callback_;
|
|
|
| cricket::PseudoTcp pseudo_tcp_;
|
| scoped_ptr<net::Socket> socket_;
|
| @@ -88,9 +83,6 @@ class PseudoTcpAdapter::Core : public cricket::IPseudoTcpNotify,
|
| bool socket_write_pending_;
|
| scoped_refptr<net::IOBuffer> socket_read_buffer_;
|
|
|
| - net::OldCompletionCallbackImpl<Core> socket_read_callback_;
|
| - net::OldCompletionCallbackImpl<Core> socket_write_callback_;
|
| -
|
| base::OneShotTimer<Core> timer_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(Core);
|
| @@ -98,16 +90,9 @@ class PseudoTcpAdapter::Core : public cricket::IPseudoTcpNotify,
|
|
|
|
|
| PseudoTcpAdapter::Core::Core(net::Socket* socket)
|
| - : old_connect_callback_(NULL),
|
| - old_read_callback_(NULL),
|
| - write_callback_(NULL),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(pseudo_tcp_(this, 0)),
|
| + : ALLOW_THIS_IN_INITIALIZER_LIST(pseudo_tcp_(this, 0)),
|
| socket_(socket),
|
| - socket_write_pending_(false),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - socket_read_callback_(this, &PseudoTcpAdapter::Core::OnRead)),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - socket_write_callback_(this, &PseudoTcpAdapter::Core::OnWritten)) {
|
| + socket_write_pending_(false) {
|
| // Doesn't trigger callbacks.
|
| pseudo_tcp_.NotifyMTU(kDefaultMtu);
|
| }
|
| @@ -116,31 +101,8 @@ PseudoTcpAdapter::Core::~Core() {
|
| }
|
|
|
| int PseudoTcpAdapter::Core::Read(net::IOBuffer* buffer, int buffer_size,
|
| - net::OldCompletionCallback* callback) {
|
| - DCHECK(!old_read_callback_ && read_callback_.is_null());
|
| -
|
| - // Reference the Core in case a callback deletes the adapter.
|
| - scoped_refptr<Core> core(this);
|
| -
|
| - int result = pseudo_tcp_.Recv(buffer->data(), buffer_size);
|
| - if (result < 0) {
|
| - result = net::MapSystemError(pseudo_tcp_.GetError());
|
| - DCHECK(result < 0);
|
| - }
|
| -
|
| - if (result == net::ERR_IO_PENDING) {
|
| - read_buffer_ = buffer;
|
| - read_buffer_size_ = buffer_size;
|
| - old_read_callback_ = callback;
|
| - }
|
| -
|
| - AdjustClock();
|
| -
|
| - return result;
|
| -}
|
| -int PseudoTcpAdapter::Core::Read(net::IOBuffer* buffer, int buffer_size,
|
| const net::CompletionCallback& callback) {
|
| - DCHECK(!old_read_callback_ && read_callback_.is_null());
|
| + DCHECK(read_callback_.is_null());
|
|
|
| // Reference the Core in case a callback deletes the adapter.
|
| scoped_refptr<Core> core(this);
|
| @@ -163,8 +125,8 @@ int PseudoTcpAdapter::Core::Read(net::IOBuffer* buffer, int buffer_size,
|
| }
|
|
|
| int PseudoTcpAdapter::Core::Write(net::IOBuffer* buffer, int buffer_size,
|
| - net::OldCompletionCallback* callback) {
|
| - DCHECK(!write_callback_);
|
| + const net::CompletionCallback& callback) {
|
| + DCHECK(write_callback_.is_null());
|
|
|
| // Reference the Core in case a callback deletes the adapter.
|
| scoped_refptr<Core> core(this);
|
| @@ -186,26 +148,6 @@ int PseudoTcpAdapter::Core::Write(net::IOBuffer* buffer, int buffer_size,
|
| return result;
|
| }
|
|
|
| -int PseudoTcpAdapter::Core::Connect(net::OldCompletionCallback* callback) {
|
| - DCHECK_EQ(pseudo_tcp_.State(), cricket::PseudoTcp::TCP_LISTEN);
|
| -
|
| - // Reference the Core in case a callback deletes the adapter.
|
| - scoped_refptr<Core> core(this);
|
| -
|
| - // Start the connection attempt.
|
| - int result = pseudo_tcp_.Connect();
|
| - if (result < 0)
|
| - return net::ERR_FAILED;
|
| -
|
| - AdjustClock();
|
| -
|
| - old_connect_callback_ = callback;
|
| - connect_callback_.Reset();
|
| - DoReadFromSocket();
|
| -
|
| - return net::ERR_IO_PENDING;
|
| -}
|
| -
|
| int PseudoTcpAdapter::Core::Connect(const net::CompletionCallback& callback) {
|
| DCHECK_EQ(pseudo_tcp_.State(), cricket::PseudoTcp::TCP_LISTEN);
|
|
|
| @@ -219,7 +161,6 @@ int PseudoTcpAdapter::Core::Connect(const net::CompletionCallback& callback) {
|
|
|
| AdjustClock();
|
|
|
| - old_connect_callback_ = NULL;
|
| connect_callback_ = callback;
|
| DoReadFromSocket();
|
|
|
| @@ -228,12 +169,10 @@ int PseudoTcpAdapter::Core::Connect(const net::CompletionCallback& callback) {
|
|
|
| void PseudoTcpAdapter::Core::Disconnect() {
|
| // Don't dispatch outstanding callbacks, as mandated by net::StreamSocket.
|
| - old_read_callback_ = NULL;
|
| read_callback_.Reset();
|
| read_buffer_ = NULL;
|
| - write_callback_ = NULL;
|
| + write_callback_.Reset();
|
| write_buffer_ = NULL;
|
| - old_connect_callback_ = NULL;
|
| connect_callback_.Reset();
|
|
|
| // TODO(wez): Connect should succeed if called after Disconnect, which
|
| @@ -253,11 +192,7 @@ bool PseudoTcpAdapter::Core::IsConnected() const {
|
| void PseudoTcpAdapter::Core::OnTcpOpen(PseudoTcp* tcp) {
|
| DCHECK(tcp == &pseudo_tcp_);
|
|
|
| - if (old_connect_callback_) {
|
| - net::OldCompletionCallback* callback = old_connect_callback_;
|
| - old_connect_callback_ = NULL;
|
| - callback->Run(net::OK);
|
| - } else if (!connect_callback_.is_null()) {
|
| + if (!connect_callback_.is_null()) {
|
| net::CompletionCallback callback = connect_callback_;
|
| connect_callback_.Reset();
|
| callback.Run(net::OK);
|
| @@ -269,7 +204,7 @@ void PseudoTcpAdapter::Core::OnTcpOpen(PseudoTcp* tcp) {
|
|
|
| void PseudoTcpAdapter::Core::OnTcpReadable(PseudoTcp* tcp) {
|
| DCHECK_EQ(tcp, &pseudo_tcp_);
|
| - if (!old_read_callback_ && read_callback_.is_null())
|
| + if (read_callback_.is_null())
|
| return;
|
|
|
| int result = pseudo_tcp_.Recv(read_buffer_->data(), read_buffer_size_);
|
| @@ -282,22 +217,15 @@ void PseudoTcpAdapter::Core::OnTcpReadable(PseudoTcp* tcp) {
|
|
|
| AdjustClock();
|
|
|
| - if (old_read_callback_) {
|
| - net::OldCompletionCallback* callback = old_read_callback_;
|
| - old_read_callback_ = NULL;
|
| - read_buffer_ = NULL;
|
| - callback->Run(result);
|
| - } else {
|
| - net::CompletionCallback callback = read_callback_;
|
| - read_callback_.Reset();
|
| - read_buffer_ = NULL;
|
| - callback.Run(result);
|
| - }
|
| + net::CompletionCallback callback = read_callback_;
|
| + read_callback_.Reset();
|
| + read_buffer_ = NULL;
|
| + callback.Run(result);
|
| }
|
|
|
| void PseudoTcpAdapter::Core::OnTcpWriteable(PseudoTcp* tcp) {
|
| DCHECK_EQ(tcp, &pseudo_tcp_);
|
| - if (!write_callback_)
|
| + if (write_callback_.is_null())
|
| return;
|
|
|
| int result = pseudo_tcp_.Send(write_buffer_->data(), write_buffer_size_);
|
| @@ -310,39 +238,31 @@ void PseudoTcpAdapter::Core::OnTcpWriteable(PseudoTcp* tcp) {
|
|
|
| AdjustClock();
|
|
|
| - net::OldCompletionCallback* callback = write_callback_;
|
| - write_callback_ = NULL;
|
| + net::CompletionCallback callback = write_callback_;
|
| + write_callback_.Reset();
|
| write_buffer_ = NULL;
|
| - callback->Run(result);
|
| + callback.Run(result);
|
| }
|
|
|
| void PseudoTcpAdapter::Core::OnTcpClosed(PseudoTcp* tcp, uint32 error) {
|
| DCHECK_EQ(tcp, &pseudo_tcp_);
|
|
|
| - if (old_connect_callback_) {
|
| - net::OldCompletionCallback* callback = old_connect_callback_;
|
| - old_connect_callback_ = NULL;
|
| - callback->Run(net::MapSystemError(error));
|
| - } else if (!connect_callback_.is_null()) {
|
| + if (!connect_callback_.is_null()) {
|
| net::CompletionCallback callback = connect_callback_;
|
| connect_callback_.Reset();
|
| callback.Run(net::MapSystemError(error));
|
| }
|
|
|
| - if (old_read_callback_) {
|
| - net::OldCompletionCallback* callback = old_read_callback_;
|
| - old_read_callback_ = NULL;
|
| - callback->Run(net::MapSystemError(error));
|
| - } else if (!read_callback_.is_null()) {
|
| + if (!read_callback_.is_null()) {
|
| net::CompletionCallback callback = read_callback_;
|
| read_callback_.Reset();
|
| callback.Run(net::MapSystemError(error));
|
| }
|
|
|
| - if (write_callback_) {
|
| - net::OldCompletionCallback* callback = write_callback_;
|
| - write_callback_ = NULL;
|
| - callback->Run(net::MapSystemError(error));
|
| + if (!write_callback_.is_null()) {
|
| + net::CompletionCallback callback = write_callback_;
|
| + write_callback_.Reset();
|
| + callback.Run(net::MapSystemError(error));
|
| }
|
| }
|
|
|
| @@ -379,7 +299,9 @@ cricket::IPseudoTcpNotify::WriteResult PseudoTcpAdapter::Core::TcpWritePacket(
|
|
|
| // Our underlying socket is datagram-oriented, which means it should either
|
| // send exactly as many bytes as we requested, or fail.
|
| - int result = socket_->Write(write_buffer, len, &socket_write_callback_);
|
| + int result = socket_->Write(write_buffer, len,
|
| + base::Bind(&PseudoTcpAdapter::Core::OnWritten,
|
| + base::Unretained(this)));
|
| if (result == net::ERR_IO_PENDING) {
|
| socket_write_pending_ = true;
|
| return IPseudoTcpNotify::WR_SUCCESS;
|
| @@ -398,7 +320,8 @@ void PseudoTcpAdapter::Core::DoReadFromSocket() {
|
|
|
| while (true) {
|
| int result = socket_->Read(socket_read_buffer_, kReadBufferSize,
|
| - &socket_read_callback_);
|
| + base::Bind(&PseudoTcpAdapter::Core::OnRead,
|
| + base::Unretained(this)));
|
| if (result == net::ERR_IO_PENDING)
|
| break;
|
|
|
| @@ -465,18 +388,13 @@ PseudoTcpAdapter::~PseudoTcpAdapter() {
|
| }
|
|
|
| int PseudoTcpAdapter::Read(net::IOBuffer* buffer, int buffer_size,
|
| - net::OldCompletionCallback* callback) {
|
| - DCHECK(CalledOnValidThread());
|
| - return core_->Read(buffer, buffer_size, callback);
|
| -}
|
| -int PseudoTcpAdapter::Read(net::IOBuffer* buffer, int buffer_size,
|
| const net::CompletionCallback& callback) {
|
| DCHECK(CalledOnValidThread());
|
| return core_->Read(buffer, buffer_size, callback);
|
| }
|
|
|
| int PseudoTcpAdapter::Write(net::IOBuffer* buffer, int buffer_size,
|
| - net::OldCompletionCallback* callback) {
|
| + const net::CompletionCallback& callback) {
|
| DCHECK(CalledOnValidThread());
|
| return core_->Write(buffer, buffer_size, callback);
|
| }
|
| @@ -495,16 +413,6 @@ bool PseudoTcpAdapter::SetSendBufferSize(int32 size) {
|
| return false;
|
| }
|
|
|
| -int PseudoTcpAdapter::Connect(net::OldCompletionCallback* callback) {
|
| - DCHECK(CalledOnValidThread());
|
| -
|
| - // net::StreamSocket requires that Connect return OK if already connected.
|
| - if (IsConnected())
|
| - return net::OK;
|
| -
|
| - return core_->Connect(callback);
|
| -}
|
| -
|
| int PseudoTcpAdapter::Connect(const net::CompletionCallback& callback) {
|
| DCHECK(CalledOnValidThread());
|
|
|
|
|