diff options
Diffstat (limited to 'net/curvecp')
-rw-r--r-- | net/curvecp/client_packetizer.cc | 50 | ||||
-rw-r--r-- | net/curvecp/client_packetizer.h | 8 | ||||
-rw-r--r-- | net/curvecp/curvecp_client_socket.cc | 13 | ||||
-rw-r--r-- | net/curvecp/curvecp_client_socket.h | 12 | ||||
-rw-r--r-- | net/curvecp/curvecp_server_socket.cc | 7 | ||||
-rw-r--r-- | net/curvecp/curvecp_server_socket.h | 5 | ||||
-rw-r--r-- | net/curvecp/curvecp_transfer_unittest.cc | 4 | ||||
-rw-r--r-- | net/curvecp/messenger.cc | 69 | ||||
-rw-r--r-- | net/curvecp/messenger.h | 9 | ||||
-rw-r--r-- | net/curvecp/packetizer.h | 2 | ||||
-rw-r--r-- | net/curvecp/server_packetizer.cc | 14 | ||||
-rw-r--r-- | net/curvecp/server_packetizer.h | 5 | ||||
-rw-r--r-- | net/curvecp/test_client.cc | 31 | ||||
-rw-r--r-- | net/curvecp/test_client.h | 7 | ||||
-rw-r--r-- | net/curvecp/test_server.cc | 17 | ||||
-rw-r--r-- | net/curvecp/test_server.h | 2 |
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 |