summaryrefslogtreecommitdiffstats
path: root/net/curvecp
diff options
context:
space:
mode:
Diffstat (limited to 'net/curvecp')
-rw-r--r--net/curvecp/client_packetizer.cc50
-rw-r--r--net/curvecp/client_packetizer.h8
-rw-r--r--net/curvecp/curvecp_client_socket.cc13
-rw-r--r--net/curvecp/curvecp_client_socket.h12
-rw-r--r--net/curvecp/curvecp_server_socket.cc7
-rw-r--r--net/curvecp/curvecp_server_socket.h5
-rw-r--r--net/curvecp/curvecp_transfer_unittest.cc4
-rw-r--r--net/curvecp/messenger.cc69
-rw-r--r--net/curvecp/messenger.h9
-rw-r--r--net/curvecp/packetizer.h2
-rw-r--r--net/curvecp/server_packetizer.cc14
-rw-r--r--net/curvecp/server_packetizer.h5
-rw-r--r--net/curvecp/test_client.cc31
-rw-r--r--net/curvecp/test_client.h7
-rw-r--r--net/curvecp/test_server.cc17
-rw-r--r--net/curvecp/test_server.h2
16 files changed, 81 insertions, 174 deletions
diff --git a/net/curvecp/client_packetizer.cc b/net/curvecp/client_packetizer.cc
index 77ddfda..9cafda2 100644
--- a/net/curvecp/client_packetizer.cc
+++ b/net/curvecp/client_packetizer.cc
@@ -33,12 +33,12 @@ ClientPacketizer::ClientPacketizer()
: Packetizer(),
next_state_(NONE),
listener_(NULL),
- old_user_callback_(NULL),
current_address_(NULL),
hello_attempts_(0),
initiate_sent_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(
- io_callback_(this, &ClientPacketizer::OnIOComplete)),
+ io_callback_(base::Bind(&ClientPacketizer::OnIOComplete,
+ base::Unretained(this)))),
ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
// TODO(mbelshe): Initialize our keys and such properly.
// for now we use random values to keep them unique.
@@ -51,23 +51,7 @@ ClientPacketizer::~ClientPacketizer() {
int ClientPacketizer::Connect(const AddressList& server,
Packetizer::Listener* listener,
- OldCompletionCallback* callback) {
- DCHECK(!old_user_callback_);
- DCHECK(!socket_.get());
- DCHECK(!listener_);
-
- listener_ = listener;
-
- addresses_ = server;
-
- old_user_callback_ = callback;
- next_state_ = LOOKUP_COOKIE;
-
- return DoLoop(OK);
-}
-int ClientPacketizer::Connect(const AddressList& server,
- Packetizer::Listener* listener,
- const net::CompletionCallback& callback) {
+ const CompletionCallback& callback) {
DCHECK(user_callback_.is_null());
DCHECK(!socket_.get());
DCHECK(!listener_);
@@ -85,7 +69,7 @@ int ClientPacketizer::Connect(const AddressList& server,
int ClientPacketizer::SendMessage(ConnectionKey key,
const char* data,
size_t length,
- OldCompletionCallback* callback) {
+ const CompletionCallback& callback) {
// We can't send messages smaller than 16 bytes.
if (length < 16)
return ERR_UNEXPECTED;
@@ -114,7 +98,7 @@ int ClientPacketizer::SendMessage(ConnectionKey key,
// TODO(mbelshe) - this is just broken to make it work with cleartext
memcpy(&buffer->data()[sizeof(InitiatePacket)], data, length);
int packet_length = sizeof(InitiatePacket) + length;
- int rv = socket_->Write(buffer, packet_length, &io_callback_);
+ int rv = socket_->Write(buffer, packet_length, io_callback_);
if (rv <= 0)
return rv;
CHECK_EQ(packet_length, rv); // We must send all data.
@@ -138,7 +122,7 @@ int ClientPacketizer::SendMessage(ConnectionKey key,
// TODO(mbelshe): Fill in rest of message
memcpy(&buffer->data()[sizeof(ClientMessagePacket)], data, length);
int packet_length = sizeof(ClientMessagePacket) + length;
- int rv = socket_->Write(buffer, packet_length, &io_callback_);
+ int rv = socket_->Write(buffer, packet_length, io_callback_);
if (rv <= 0)
return rv;
CHECK_EQ(packet_length, rv); // We must send all data.
@@ -231,7 +215,7 @@ int ClientPacketizer::DoSendingHello() {
sizeof(shortterm_public_key_));
// TODO(mbelshe): populate all other fields of the HelloPacket.
- return socket_->Write(buffer, sizeof(struct HelloPacket), &io_callback_);
+ return socket_->Write(buffer, sizeof(struct HelloPacket), io_callback_);
}
int ClientPacketizer::DoSendingHelloComplete(int rv) {
@@ -254,7 +238,7 @@ int ClientPacketizer::DoWaitingCookie() {
StartHelloTimer(kHelloTimeoutMs[hello_attempts_++]);
read_buffer_ = new IOBuffer(kMaxPacketLength);
- return socket_->Read(read_buffer_, kMaxPacketLength, &io_callback_);
+ return socket_->Read(read_buffer_, kMaxPacketLength, io_callback_);
}
int ClientPacketizer::DoWaitingCookieComplete(int rv) {
@@ -295,17 +279,11 @@ int ClientPacketizer::DoConnected(int rv) {
void ClientPacketizer::DoCallback(int result) {
DCHECK_NE(result, ERR_IO_PENDING);
- DCHECK(old_user_callback_ || !user_callback_.is_null());
-
- if (old_user_callback_) {
- OldCompletionCallback* callback = old_user_callback_;
- old_user_callback_ = NULL;
- callback->Run(result);
- } else {
- CompletionCallback callback = user_callback_;
- user_callback_.Reset();
- callback.Run(result);
- }
+ DCHECK(!user_callback_.is_null());
+
+ CompletionCallback callback = user_callback_;
+ user_callback_.Reset();
+ callback.Run(result);
}
int ClientPacketizer::ConnectNextAddress() {
@@ -391,7 +369,7 @@ int ClientPacketizer::ReadPackets() {
while (true) {
rv = socket_->Read(read_buffer_,
kMaxPacketLength,
- &io_callback_);
+ io_callback_);
if (rv <= 0) {
if (rv != ERR_IO_PENDING)
LOG(ERROR) << "Error reading socket:" << rv;
diff --git a/net/curvecp/client_packetizer.h b/net/curvecp/client_packetizer.h
index f8edeaf..ac27c19 100644
--- a/net/curvecp/client_packetizer.h
+++ b/net/curvecp/client_packetizer.h
@@ -29,16 +29,13 @@ class ClientPacketizer : public Packetizer {
int Connect(const AddressList& server,
Packetizer::Listener* listener,
- OldCompletionCallback* callback);
- int Connect(const AddressList& server,
- Packetizer::Listener* listener,
const CompletionCallback& callback);
// Packetizer implementation.
virtual int SendMessage(ConnectionKey key,
const char* data,
size_t length,
- OldCompletionCallback* callback) OVERRIDE;
+ const CompletionCallback& callback) OVERRIDE;
virtual void Close(ConnectionKey key) OVERRIDE;
virtual int GetPeerAddress(IPEndPoint* endpoint) const OVERRIDE;
virtual int max_message_payload() const OVERRIDE;
@@ -86,7 +83,6 @@ class ClientPacketizer : public Packetizer {
StateType next_state_;
scoped_ptr<UDPClientSocket> socket_;
Packetizer::Listener* listener_;
- OldCompletionCallback* old_user_callback_;
CompletionCallback user_callback_;
AddressList addresses_;
const struct addrinfo* current_address_;
@@ -97,7 +93,7 @@ class ClientPacketizer : public Packetizer {
uchar shortterm_public_key_[32];
- OldCompletionCallbackImpl<ClientPacketizer> io_callback_;
+ CompletionCallback io_callback_;
base::WeakPtrFactory<ClientPacketizer> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(ClientPacketizer);
diff --git a/net/curvecp/curvecp_client_socket.cc b/net/curvecp/curvecp_client_socket.cc
index 6772e38..5271174 100644
--- a/net/curvecp/curvecp_client_socket.cc
+++ b/net/curvecp/curvecp_client_socket.cc
@@ -21,11 +21,7 @@ CurveCPClientSocket::CurveCPClientSocket(const AddressList& addresses,
CurveCPClientSocket::~CurveCPClientSocket() {
}
-int CurveCPClientSocket::Connect(OldCompletionCallback* callback) {
- return packetizer_.Connect(addresses_, &messenger_, callback);
-}
-
-int CurveCPClientSocket::Connect(const net::CompletionCallback& callback) {
+int CurveCPClientSocket::Connect(const CompletionCallback& callback) {
return packetizer_.Connect(addresses_, &messenger_, callback);
}
@@ -102,18 +98,13 @@ base::TimeDelta CurveCPClientSocket::GetConnectTimeMicros() const {
int CurveCPClientSocket::Read(IOBuffer* buf,
int buf_len,
- OldCompletionCallback* callback) {
- return messenger_.Read(buf, buf_len, callback);
-}
-int CurveCPClientSocket::Read(IOBuffer* buf,
- int buf_len,
const CompletionCallback& callback) {
return messenger_.Read(buf, buf_len, callback);
}
int CurveCPClientSocket::Write(IOBuffer* buf,
int buf_len,
- OldCompletionCallback* callback) {
+ const CompletionCallback& callback) {
return messenger_.Write(buf, buf_len, callback);
}
diff --git a/net/curvecp/curvecp_client_socket.h b/net/curvecp/curvecp_client_socket.h
index 8062c87..7d7a361 100644
--- a/net/curvecp/curvecp_client_socket.h
+++ b/net/curvecp/curvecp_client_socket.h
@@ -25,9 +25,8 @@ class CurveCPClientSocket : public StreamSocket {
const net::NetLog::Source& source);
virtual ~CurveCPClientSocket();
- // ClientSocket implementation.
- virtual int Connect(OldCompletionCallback* callback) OVERRIDE;
- virtual int Connect(const net::CompletionCallback& callback) OVERRIDE;
+ // ClientSocket methods:
+ virtual int Connect(const CompletionCallback& callback) OVERRIDE;
virtual void Disconnect() OVERRIDE;
virtual bool IsConnected() const OVERRIDE;
virtual bool IsConnectedAndIdle() const OVERRIDE;
@@ -41,16 +40,13 @@ class CurveCPClientSocket : public StreamSocket {
virtual int64 NumBytesRead() const OVERRIDE;
virtual base::TimeDelta GetConnectTimeMicros() const OVERRIDE;
- // Socket implementation.
- virtual int Read(IOBuffer* buf,
- int buf_len,
- OldCompletionCallback* callback) OVERRIDE;
+ // Socket methods:
virtual int Read(IOBuffer* buf,
int buf_len,
const CompletionCallback& callback) OVERRIDE;
virtual int Write(IOBuffer* buf,
int buf_len,
- OldCompletionCallback* callback) OVERRIDE;
+ const CompletionCallback& callback) OVERRIDE;
virtual bool SetReceiveBufferSize(int32 size) OVERRIDE;
virtual bool SetSendBufferSize(int32 size) OVERRIDE;
diff --git a/net/curvecp/curvecp_server_socket.cc b/net/curvecp/curvecp_server_socket.cc
index 6e7934c..d5d5b68 100644
--- a/net/curvecp/curvecp_server_socket.cc
+++ b/net/curvecp/curvecp_server_socket.cc
@@ -49,18 +49,13 @@ void CurveCPServerSocket::Close() {
int CurveCPServerSocket::Read(IOBuffer* buf,
int buf_len,
- OldCompletionCallback* callback) {
- return messenger_.Read(buf, buf_len, callback);
-}
-int CurveCPServerSocket::Read(IOBuffer* buf,
- int buf_len,
const CompletionCallback& callback) {
return messenger_.Read(buf, buf_len, callback);
}
int CurveCPServerSocket::Write(IOBuffer* buf,
int buf_len,
- OldCompletionCallback* callback) {
+ const CompletionCallback& callback) {
return messenger_.Write(buf, buf_len, callback);
}
diff --git a/net/curvecp/curvecp_server_socket.h b/net/curvecp/curvecp_server_socket.h
index a2ea1d7..e4df3ef 100644
--- a/net/curvecp/curvecp_server_socket.h
+++ b/net/curvecp/curvecp_server_socket.h
@@ -36,13 +36,10 @@ class CurveCPServerSocket : public Socket,
// Socket implementation.
virtual int Read(IOBuffer* buf,
int buf_len,
- OldCompletionCallback* callback) OVERRIDE;
- virtual int Read(IOBuffer* buf,
- int buf_len,
const CompletionCallback& callback) OVERRIDE;
virtual int Write(IOBuffer* buf,
int buf_len,
- OldCompletionCallback* callback) OVERRIDE;
+ const CompletionCallback& callback) OVERRIDE;
virtual bool SetReceiveBufferSize(int32 size) OVERRIDE;
virtual bool SetSendBufferSize(int32 size) OVERRIDE;
diff --git a/net/curvecp/curvecp_transfer_unittest.cc b/net/curvecp/curvecp_transfer_unittest.cc
index 1c092f3..11c5d3f 100644
--- a/net/curvecp/curvecp_transfer_unittest.cc
+++ b/net/curvecp/curvecp_transfer_unittest.cc
@@ -30,8 +30,8 @@ void RunEchoTest(int bytes) {
EXPECT_TRUE(server.Start(1234));
HostPortPair server_address("localhost", 1234);
- TestOldCompletionCallback cb;
- EXPECT_TRUE(client.Start(server_address, bytes, &cb));
+ TestCompletionCallback cb;
+ EXPECT_TRUE(client.Start(server_address, bytes, cb.callback()));
int rv = cb.WaitForResult();
EXPECT_EQ(0, rv);
diff --git a/net/curvecp/messenger.cc b/net/curvecp/messenger.cc
index a99abda..355873b 100644
--- a/net/curvecp/messenger.cc
+++ b/net/curvecp/messenger.cc
@@ -4,6 +4,7 @@
#include "net/curvecp/messenger.h"
+#include "base/bind.h"
#include "base/logging.h"
#include "base/message_loop.h"
#include "net/base/io_buffer.h"
@@ -58,39 +59,17 @@ static const size_t kReceiveBufferSize = (128 * 1024);
Messenger::Messenger(Packetizer* packetizer)
: packetizer_(packetizer),
send_buffer_(kSendBufferSize),
- send_complete_callback_(NULL),
- old_receive_complete_callback_(NULL),
pending_receive_length_(0),
- send_message_in_progress_(false),
- ALLOW_THIS_IN_INITIALIZER_LIST(
- send_message_callback_(this, &Messenger::OnSendMessageComplete)),
- ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {
+ send_message_in_progress_(false) {
}
Messenger::~Messenger() {
}
-int Messenger::Read(IOBuffer* buf, int buf_len, OldCompletionCallback* callback) {
- DCHECK(CalledOnValidThread());
- DCHECK(!old_receive_complete_callback_ &&
- receive_complete_callback_.is_null());
-
- if (!received_list_.bytes_available()) {
- old_receive_complete_callback_ = callback;
- pending_receive_ = buf;
- pending_receive_length_ = buf_len;
- return ERR_IO_PENDING;
- }
-
- int bytes_read = InternalRead(buf, buf_len);
- DCHECK_LT(0, bytes_read);
- return bytes_read;
-}
int Messenger::Read(IOBuffer* buf, int buf_len,
const CompletionCallback& callback) {
DCHECK(CalledOnValidThread());
- DCHECK(!old_receive_complete_callback_ &&
- receive_complete_callback_.is_null());
+ DCHECK(receive_complete_callback_.is_null());
if (!received_list_.bytes_available()) {
receive_complete_callback_ = callback;
@@ -104,10 +83,11 @@ int Messenger::Read(IOBuffer* buf, int buf_len,
return bytes_read;
}
-int Messenger::Write(IOBuffer* buf, int buf_len, OldCompletionCallback* callback) {
+int Messenger::Write(IOBuffer* buf, int buf_len,
+ const CompletionCallback& callback) {
DCHECK(CalledOnValidThread());
DCHECK(!pending_send_.get()); // Already a write pending!
- DCHECK(!send_complete_callback_);
+ DCHECK(send_complete_callback_.is_null());
DCHECK_LT(0, buf_len);
int len = send_buffer_.write(buf->data(), buf_len);
@@ -168,15 +148,15 @@ IOBufferWithSize* Messenger::CreateBufferFromSendQueue() {
DCHECK_EQ(bytes, length);
// We consumed data, check to see if someone is waiting to write more data.
- if (send_complete_callback_) {
+ if (!send_complete_callback_.is_null()) {
DCHECK(pending_send_.get());
int len = send_buffer_.write(pending_send_->data(), pending_send_length_);
if (len) {
pending_send_ = NULL;
- OldCompletionCallback* callback = send_complete_callback_;
- send_complete_callback_ = NULL;
- callback->Run(len);
+ CompletionCallback callback = send_complete_callback_;
+ send_complete_callback_.Reset();
+ callback.Run(len);
}
}
@@ -274,10 +254,9 @@ void Messenger::SendMessage(int64 position) {
sent_list_.MarkBlockSent(position, id);
- int rv = packetizer_->SendMessage(key_,
- message->data(),
- padded_size,
- &send_message_callback_);
+ int rv = packetizer_->SendMessage(
+ key_, message->data(), padded_size,
+ base::Bind(&Messenger::OnSendMessageComplete, base::Unretained(this)));
if (rv == ERR_IO_PENDING) {
send_message_in_progress_ = true;
return;
@@ -357,19 +336,12 @@ void Messenger::RecvMessage() {
// If we have data available, and a read is pending, notify the callback.
if (received_list_.bytes_available() &&
- (old_receive_complete_callback_ ||
- !receive_complete_callback_.is_null())) {
+ !receive_complete_callback_.is_null()) {
// Pass the data up to the caller.
int bytes_read = InternalRead(pending_receive_, pending_receive_length_);
- if (old_receive_complete_callback_) {
- OldCompletionCallback* callback = old_receive_complete_callback_;
- old_receive_complete_callback_ = NULL;
- callback->Run(bytes_read);
- } else {
- CompletionCallback callback = receive_complete_callback_;
- receive_complete_callback_.Reset();
- callback.Run(bytes_read);
- }
+ CompletionCallback callback = receive_complete_callback_;
+ receive_complete_callback_.Reset();
+ callback.Run(bytes_read);
}
}
@@ -386,10 +358,9 @@ void Messenger::SendAck(uint32 last_message_received) {
// in progress here...
DCHECK(!send_message_in_progress_);
- int rv = packetizer_->SendMessage(key_,
- buffer->data(),
- sizeof(Message),
- &send_message_callback_);
+ int rv = packetizer_->SendMessage(
+ key_, buffer->data(), sizeof(Message),
+ base::Bind(&Messenger::OnSendMessageComplete, base::Unretained(this)));
// TODO(mbelshe): Fix me! Deal with the error cases
DCHECK(rv == sizeof(Message));
}
diff --git a/net/curvecp/messenger.h b/net/curvecp/messenger.h
index bb67946..6aedd709 100644
--- a/net/curvecp/messenger.h
+++ b/net/curvecp/messenger.h
@@ -33,9 +33,8 @@ class Messenger : public base::NonThreadSafe,
explicit Messenger(Packetizer* packetizer);
virtual ~Messenger();
- int Read(IOBuffer* buf, int buf_len, OldCompletionCallback* callback);
int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback);
- int Write(IOBuffer* buf, int buf_len, OldCompletionCallback* callback);
+ int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback);
// Packetizer::Listener implementation.
virtual void OnConnection(ConnectionKey key) OVERRIDE;
@@ -71,13 +70,12 @@ class Messenger : public base::NonThreadSafe,
// The send_buffer is a list of pending data to pack into messages and send
// to the remote.
CircularBuffer send_buffer_;
- OldCompletionCallback* send_complete_callback_;
+ CompletionCallback send_complete_callback_;
scoped_refptr<IOBuffer> pending_send_;
int pending_send_length_;
// The read_buffer is a list of pending data which has been unpacked from
// messages and is awaiting delivery to the application.
- OldCompletionCallback* old_receive_complete_callback_;
CompletionCallback receive_complete_callback_;
scoped_refptr<IOBuffer> pending_receive_;
int pending_receive_length_;
@@ -94,9 +92,6 @@ class Messenger : public base::NonThreadSafe,
// A timer to fire when we can send data.
base::OneShotTimer<Messenger> send_timer_;
- OldCompletionCallbackImpl<Messenger> send_message_callback_;
-
- ScopedRunnableMethodFactory<Messenger> factory_;
DISALLOW_COPY_AND_ASSIGN(Messenger);
};
diff --git a/net/curvecp/packetizer.h b/net/curvecp/packetizer.h
index 14b526a..c366095 100644
--- a/net/curvecp/packetizer.h
+++ b/net/curvecp/packetizer.h
@@ -34,7 +34,7 @@ class Packetizer {
virtual int SendMessage(ConnectionKey key,
const char* data,
size_t length,
- OldCompletionCallback* callback) = 0;
+ const CompletionCallback& callback) = 0;
// Close an existing connection.
virtual void Close(ConnectionKey key) = 0;
diff --git a/net/curvecp/server_packetizer.cc b/net/curvecp/server_packetizer.cc
index d5d9d67..d387933 100644
--- a/net/curvecp/server_packetizer.cc
+++ b/net/curvecp/server_packetizer.cc
@@ -15,11 +15,7 @@ ServerPacketizer::ServerPacketizer()
: Packetizer(),
state_(NONE),
listener_(NULL),
- read_buffer_(new IOBuffer(kMaxPacketLength)),
- ALLOW_THIS_IN_INITIALIZER_LIST(
- read_callback_(this, &ServerPacketizer::OnReadComplete)),
- ALLOW_THIS_IN_INITIALIZER_LIST(
- write_callback_(this, &ServerPacketizer::OnWriteComplete)) {
+ read_buffer_(new IOBuffer(kMaxPacketLength)) {
}
ServerPacketizer::~ServerPacketizer() {
@@ -46,7 +42,7 @@ bool ServerPacketizer::Open(ConnectionKey key, Packetizer::Listener* listener) {
int ServerPacketizer::SendMessage(ConnectionKey key,
const char* data,
size_t length,
- OldCompletionCallback* callback) {
+ const CompletionCallback& callback) {
DCHECK(socket_.get());
DCHECK_LT(0u, length);
DCHECK_GT(kMaxPacketLength - sizeof(ServerMessagePacket), length);
@@ -137,7 +133,8 @@ void ServerPacketizer::HandleHelloPacket(Packet* packet, int length) {
// XXXMB - Can't have two pending writes at the same time...
int rv = socket_->SendTo(buffer, sizeof(struct CookiePacket), recv_address_,
- &write_callback_);
+ base::Bind(&ServerPacketizer::OnWriteComplete,
+ base::Unretained(this)));
DCHECK(rv == ERR_IO_PENDING || rv == sizeof(struct CookiePacket));
}
@@ -220,7 +217,8 @@ int ServerPacketizer::ReadPackets() {
rv = socket_->RecvFrom(read_buffer_,
kMaxPacketLength,
&recv_address_,
- &read_callback_);
+ base::Bind(&ServerPacketizer::OnReadComplete,
+ base::Unretained(this)));
if (rv <= 0) {
if (rv != ERR_IO_PENDING)
LOG(ERROR) << "Error reading listen socket: " << rv;
diff --git a/net/curvecp/server_packetizer.h b/net/curvecp/server_packetizer.h
index c149424..ba42586 100644
--- a/net/curvecp/server_packetizer.h
+++ b/net/curvecp/server_packetizer.h
@@ -38,7 +38,7 @@ class ServerPacketizer : public base::RefCounted<ServerPacketizer>,
virtual int SendMessage(ConnectionKey key,
const char* data,
size_t length,
- OldCompletionCallback* callback) OVERRIDE;
+ const CompletionCallback& callback) OVERRIDE;
virtual void Close(ConnectionKey key) OVERRIDE;
virtual int GetPeerAddress(IPEndPoint* endpoint) const OVERRIDE;
virtual int max_message_payload() const OVERRIDE;
@@ -87,9 +87,6 @@ class ServerPacketizer : public base::RefCounted<ServerPacketizer>,
// The listener map tracks active message listeners known to the packetizer.
ListenerMap listener_map_;
- OldCompletionCallbackImpl<ServerPacketizer> read_callback_;
- OldCompletionCallbackImpl<ServerPacketizer> write_callback_;
-
DISALLOW_COPY_AND_ASSIGN(ServerPacketizer);
};
diff --git a/net/curvecp/test_client.cc b/net/curvecp/test_client.cc
index d57a13f..f5ad5ca 100644
--- a/net/curvecp/test_client.cc
+++ b/net/curvecp/test_client.cc
@@ -23,14 +23,7 @@ namespace net {
TestClient::TestClient()
: socket_(NULL),
errors_(0),
- bytes_to_send_(0),
- ALLOW_THIS_IN_INITIALIZER_LIST(
- connect_callback_(this, &TestClient::OnConnectComplete)),
- ALLOW_THIS_IN_INITIALIZER_LIST(
- read_callback_(this, &TestClient::OnReadComplete)),
- ALLOW_THIS_IN_INITIALIZER_LIST(
- write_callback_(this, &TestClient::OnWriteComplete)),
- finished_callback_(NULL) {
+ bytes_to_send_(0) {
}
TestClient::~TestClient() {
@@ -45,9 +38,9 @@ TestClient::~TestClient() {
bool TestClient::Start(const HostPortPair& server_host_port_pair,
int bytes_to_send,
- OldCompletionCallback* callback) {
+ const CompletionCallback& callback) {
DCHECK(!socket_);
- DCHECK(!finished_callback_);
+ DCHECK(finished_callback_.is_null());
finished_callback_ = callback;
bytes_to_read_ = bytes_to_send_ = bytes_to_send;
@@ -65,7 +58,8 @@ bool TestClient::Start(const HostPortPair& server_host_port_pair,
}
socket_ = new CurveCPClientSocket(addresses, NULL, NetLog::Source());
- rv = socket_->Connect(&connect_callback_);
+ rv = socket_->Connect(
+ base::Bind(&TestClient::OnConnectComplete, base::Unretained(this)));
if (rv == ERR_IO_PENDING)
return true;
OnConnectComplete(rv);
@@ -136,7 +130,9 @@ void TestClient::ReadData() {
int rv;
do {
- rv = socket_->Read(read_buffer_, kMaxMessage, &read_callback_);
+ rv = socket_->Read(read_buffer_, kMaxMessage,
+ base::Bind(&TestClient::OnReadComplete,
+ base::Unretained(this)));
if (rv == ERR_IO_PENDING)
return;
OnReadComplete(rv); // Complete the read manually
@@ -157,7 +153,8 @@ void TestClient::SendData() {
int rv = socket_->Write(write_buffer_,
write_buffer_->BytesRemaining(),
- &write_callback_);
+ base::Bind(&TestClient::OnWriteComplete,
+ base::Unretained(this)));
if (rv == ERR_IO_PENDING)
return;
@@ -169,12 +166,12 @@ void TestClient::SendData() {
}
void TestClient::Finish(int result) {
- DCHECK(finished_callback_);
+ DCHECK(!finished_callback_.is_null());
LOG(ERROR) << "TestClient Done!";
- OldCompletionCallback* callback = finished_callback_;
- finished_callback_ = NULL;
- callback->Run(result);
+ CompletionCallback callback = finished_callback_;
+ finished_callback_.Reset();
+ callback.Run(result);
}
} // namespace net
diff --git a/net/curvecp/test_client.h b/net/curvecp/test_client.h
index 59a3d59..07ae3a6 100644
--- a/net/curvecp/test_client.h
+++ b/net/curvecp/test_client.h
@@ -35,7 +35,7 @@ class TestClient {
// Returns true if successful in starting the client.
bool Start(const HostPortPair& server,
int bytes_to_send,
- OldCompletionCallback* callback);
+ const CompletionCallback& callback);
// Returns the number of errors this server encountered.
int error_count() { return errors_; }
@@ -59,10 +59,7 @@ class TestClient {
int bytes_to_send_;
TestDataStream sent_stream_;
TestDataStream received_stream_;
- OldCompletionCallbackImpl<TestClient> connect_callback_;
- OldCompletionCallbackImpl<TestClient> read_callback_;
- OldCompletionCallbackImpl<TestClient> write_callback_;
- OldCompletionCallback* finished_callback_;
+ CompletionCallback finished_callback_;
};
} // namespace net
diff --git a/net/curvecp/test_server.cc b/net/curvecp/test_server.cc
index a1ad4b2..d8badb9 100644
--- a/net/curvecp/test_server.cc
+++ b/net/curvecp/test_server.cc
@@ -63,11 +63,7 @@ void TestServer::OnAccept(CurveCPServerSocket* new_socket) {
EchoServer::EchoServer()
: socket_(NULL),
- bytes_received_(0),
- ALLOW_THIS_IN_INITIALIZER_LIST(
- read_callback_(this, &EchoServer::OnReadComplete)),
- ALLOW_THIS_IN_INITIALIZER_LIST(
- write_callback_(this, &EchoServer::OnWriteComplete)) {
+ bytes_received_(0) {
}
EchoServer::~EchoServer() {
@@ -100,7 +96,9 @@ void EchoServer::OnReadComplete(int result) {
// Echo the read data back here.
DCHECK(!write_buffer_.get());
write_buffer_ = new DrainableIOBuffer(read_buffer_, result);
- int rv = socket_->Write(write_buffer_, result, &write_callback_);
+ int rv = socket_->Write(write_buffer_, result,
+ base::Bind(&EchoServer::OnWriteComplete,
+ base::Unretained(this)));
if (rv == ERR_IO_PENDING)
return;
OnWriteComplete(rv);
@@ -116,7 +114,8 @@ void EchoServer::OnWriteComplete(int result) {
while (write_buffer_->BytesRemaining()) {
int rv = socket_->Write(write_buffer_,
write_buffer_->BytesRemaining(),
- &write_callback_);
+ base::Bind(&EchoServer::OnWriteComplete,
+ base::Unretained(this)));
if (rv == ERR_IO_PENDING)
return;
OnWriteComplete(rv);
@@ -134,7 +133,9 @@ void EchoServer::ReadData() {
int rv;
do {
- rv = socket_->Read(read_buffer_, kMaxMessage, &read_callback_);
+ rv = socket_->Read(read_buffer_, kMaxMessage,
+ base::Bind(&EchoServer::OnReadComplete,
+ base::Unretained(this)));
if (rv == ERR_IO_PENDING)
return;
OnReadComplete(rv); // Complete the read manually
diff --git a/net/curvecp/test_server.h b/net/curvecp/test_server.h
index 68f1377..e4426ea 100644
--- a/net/curvecp/test_server.h
+++ b/net/curvecp/test_server.h
@@ -66,8 +66,6 @@ class EchoServer {
scoped_refptr<DrainableIOBuffer> write_buffer_;
TestDataStream received_stream_;
int bytes_received_;
- OldCompletionCallbackImpl<EchoServer> read_callback_;
- OldCompletionCallbackImpl<EchoServer> write_callback_;
};
} // namespace net