summaryrefslogtreecommitdiffstats
path: root/net/curvecp
diff options
context:
space:
mode:
authorjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-07 02:03:33 +0000
committerjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-07 02:03:33 +0000
commit3f55aa10587b3eaa629d7e95de87998b399fe3e2 (patch)
tree0f407a7e7fc837bed337a9a5af787edbd9473ef6 /net/curvecp
parentb456003a580041d83e7f5a998c15f62ce380560f (diff)
downloadchromium_src-3f55aa10587b3eaa629d7e95de87998b399fe3e2.zip
chromium_src-3f55aa10587b3eaa629d7e95de87998b399fe3e2.tar.gz
chromium_src-3f55aa10587b3eaa629d7e95de87998b399fe3e2.tar.bz2
base::Bind: Convert Socket::Read.
BUG=none TEST=none R=csilv Review URL: http://codereview.chromium.org/8801005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113326 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/curvecp')
-rw-r--r--net/curvecp/curvecp_client_socket.cc5
-rw-r--r--net/curvecp/curvecp_client_socket.h5
-rw-r--r--net/curvecp/curvecp_server_socket.cc5
-rw-r--r--net/curvecp/curvecp_server_socket.h7
-rw-r--r--net/curvecp/messenger.cc38
-rw-r--r--net/curvecp/messenger.h6
6 files changed, 55 insertions, 11 deletions
diff --git a/net/curvecp/curvecp_client_socket.cc b/net/curvecp/curvecp_client_socket.cc
index 8074016..6772e38 100644
--- a/net/curvecp/curvecp_client_socket.cc
+++ b/net/curvecp/curvecp_client_socket.cc
@@ -105,6 +105,11 @@ int CurveCPClientSocket::Read(IOBuffer* buf,
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,
diff --git a/net/curvecp/curvecp_client_socket.h b/net/curvecp/curvecp_client_socket.h
index 85f8817..8062c87 100644
--- a/net/curvecp/curvecp_client_socket.h
+++ b/net/curvecp/curvecp_client_socket.h
@@ -41,10 +41,13 @@ class CurveCPClientSocket : public StreamSocket {
virtual int64 NumBytesRead() const OVERRIDE;
virtual base::TimeDelta GetConnectTimeMicros() const OVERRIDE;
- // Socket methods:
+ // 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;
diff --git a/net/curvecp/curvecp_server_socket.cc b/net/curvecp/curvecp_server_socket.cc
index 15185ff..6e7934c 100644
--- a/net/curvecp/curvecp_server_socket.cc
+++ b/net/curvecp/curvecp_server_socket.cc
@@ -52,6 +52,11 @@ int CurveCPServerSocket::Read(IOBuffer* buf,
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,
diff --git a/net/curvecp/curvecp_server_socket.h b/net/curvecp/curvecp_server_socket.h
index 076eedc..a2ea1d7 100644
--- a/net/curvecp/curvecp_server_socket.h
+++ b/net/curvecp/curvecp_server_socket.h
@@ -33,17 +33,20 @@ class CurveCPServerSocket : public Socket,
int Listen(const IPEndPoint& endpoint, Acceptor* acceptor);
void Close();
- // Socket methods:
+ // 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;
virtual bool SetReceiveBufferSize(int32 size) OVERRIDE;
virtual bool SetSendBufferSize(int32 size) OVERRIDE;
- // ServerMessenger::Acceptor methods:
+ // ServerMessenger::Acceptor implementation.
virtual void OnAccept(ConnectionKey key) OVERRIDE;
private:
diff --git a/net/curvecp/messenger.cc b/net/curvecp/messenger.cc
index 07f7d82..a99abda 100644
--- a/net/curvecp/messenger.cc
+++ b/net/curvecp/messenger.cc
@@ -59,7 +59,7 @@ Messenger::Messenger(Packetizer* packetizer)
: packetizer_(packetizer),
send_buffer_(kSendBufferSize),
send_complete_callback_(NULL),
- receive_complete_callback_(NULL),
+ old_receive_complete_callback_(NULL),
pending_receive_length_(0),
send_message_in_progress_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(
@@ -72,7 +72,25 @@ Messenger::~Messenger() {
int Messenger::Read(IOBuffer* buf, int buf_len, OldCompletionCallback* callback) {
DCHECK(CalledOnValidThread());
- DCHECK(!receive_complete_callback_);
+ 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());
if (!received_list_.bytes_available()) {
receive_complete_callback_ = callback;
@@ -338,12 +356,20 @@ void Messenger::RecvMessage() {
}
// If we have data available, and a read is pending, notify the callback.
- if (received_list_.bytes_available() && receive_complete_callback_) {
+ if (received_list_.bytes_available() &&
+ (old_receive_complete_callback_ ||
+ !receive_complete_callback_.is_null())) {
// Pass the data up to the caller.
int bytes_read = InternalRead(pending_receive_, pending_receive_length_);
- OldCompletionCallback* callback = receive_complete_callback_;
- receive_complete_callback_ = NULL;
- callback->Run(bytes_read);
+ 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);
+ }
}
}
diff --git a/net/curvecp/messenger.h b/net/curvecp/messenger.h
index b6b2d69..bb67946 100644
--- a/net/curvecp/messenger.h
+++ b/net/curvecp/messenger.h
@@ -34,9 +34,10 @@ class Messenger : public base::NonThreadSafe,
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);
- // Packetizer::Listener methods:
+ // Packetizer::Listener implementation.
virtual void OnConnection(ConnectionKey key) OVERRIDE;
virtual void OnClose(Packetizer* packetizer, ConnectionKey key);
virtual void OnMessage(Packetizer* packetizer,
@@ -76,7 +77,8 @@ class Messenger : public base::NonThreadSafe,
// The read_buffer is a list of pending data which has been unpacked from
// messages and is awaiting delivery to the application.
- OldCompletionCallback* receive_complete_callback_;
+ OldCompletionCallback* old_receive_complete_callback_;
+ CompletionCallback receive_complete_callback_;
scoped_refptr<IOBuffer> pending_receive_;
int pending_receive_length_;