diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-07 02:03:33 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-07 02:03:33 +0000 |
commit | 3f55aa10587b3eaa629d7e95de87998b399fe3e2 (patch) | |
tree | 0f407a7e7fc837bed337a9a5af787edbd9473ef6 /net/socket/ssl_client_socket_nss.cc | |
parent | b456003a580041d83e7f5a998c15f62ce380560f (diff) | |
download | chromium_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/socket/ssl_client_socket_nss.cc')
-rw-r--r-- | net/socket/ssl_client_socket_nss.cc | 61 |
1 files changed, 47 insertions, 14 deletions
diff --git a/net/socket/ssl_client_socket_nss.cc b/net/socket/ssl_client_socket_nss.cc index e1ac396..6e62edb 100644 --- a/net/socket/ssl_client_socket_nss.cc +++ b/net/socket/ssl_client_socket_nss.cc @@ -447,7 +447,7 @@ SSLClientSocketNSS::SSLClientSocketNSS(ClientSocketHandle* transport_socket, host_and_port_(host_and_port), ssl_config_(ssl_config), old_user_connect_callback_(NULL), - user_read_callback_(NULL), + old_user_read_callback_(NULL), user_write_callback_(NULL), user_read_buf_len_(0), user_write_buf_len_(0), @@ -576,7 +576,7 @@ int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) { EnterFunction(""); DCHECK(transport_.get()); DCHECK(next_handshake_state_ == STATE_NONE); - DCHECK(!user_read_callback_); + DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); DCHECK(!user_write_callback_); DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); DCHECK(!user_read_buf_); @@ -624,7 +624,7 @@ int SSLClientSocketNSS::Connect(const CompletionCallback& callback) { EnterFunction(""); DCHECK(transport_.get()); DCHECK(next_handshake_state_ == STATE_NONE); - DCHECK(!user_read_callback_); + DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); DCHECK(!user_write_callback_); DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); DCHECK(!user_read_buf_); @@ -695,7 +695,8 @@ void SSLClientSocketNSS::Disconnect() { transport_recv_busy_ = false; old_user_connect_callback_ = NULL; user_connect_callback_.Reset(); - user_read_callback_ = NULL; + old_user_read_callback_ = NULL; + user_read_callback_.Reset(); user_write_callback_ = NULL; user_read_buf_ = NULL; user_read_buf_len_ = 0; @@ -815,8 +816,32 @@ int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len, EnterFunction(buf_len); DCHECK(completed_handshake_); DCHECK(next_handshake_state_ == STATE_NONE); - DCHECK(!user_read_callback_); - DCHECK(!old_user_connect_callback_); + DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); + DCHECK(!user_read_buf_); + DCHECK(nss_bufs_); + + user_read_buf_ = buf; + user_read_buf_len_ = buf_len; + + int rv = DoReadLoop(OK); + + if (rv == ERR_IO_PENDING) { + old_user_read_callback_ = callback; + } else { + user_read_buf_ = NULL; + user_read_buf_len_ = 0; + } + LeaveFunction(rv); + return rv; +} +int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len, + const CompletionCallback& callback) { + EnterFunction(buf_len); + DCHECK(completed_handshake_); + DCHECK(next_handshake_state_ == STATE_NONE); + DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); DCHECK(!user_read_buf_); DCHECK(nss_bufs_); @@ -1200,15 +1225,23 @@ void SSLClientSocketNSS::UpdateConnectionStatus() { void SSLClientSocketNSS::DoReadCallback(int rv) { EnterFunction(rv); DCHECK(rv != ERR_IO_PENDING); - DCHECK(user_read_callback_); + DCHECK(old_user_read_callback_ || user_read_callback_.is_null()); - // Since Run may result in Read being called, clear |user_read_callback_| + // Since Run may result in Read being called, clear |old_user_read_callback_| // up front. - OldCompletionCallback* c = user_read_callback_; - user_read_callback_ = NULL; - user_read_buf_ = NULL; - user_read_buf_len_ = 0; - c->Run(rv); + if (old_user_read_callback_) { + OldCompletionCallback* c = old_user_read_callback_; + old_user_read_callback_ = NULL; + user_read_buf_ = NULL; + user_read_buf_len_ = 0; + c->Run(rv); + } else { + CompletionCallback c = user_read_callback_; + user_read_callback_.Reset(); + user_read_buf_ = NULL; + user_read_buf_len_ = 0; + c.Run(rv); + } LeaveFunction(""); } @@ -1864,7 +1897,7 @@ int SSLClientSocketNSS::DoVerifyCertComplete(int result) { completed_handshake_ = true; - if (user_read_callback_) { + if (old_user_read_callback_ || !user_read_callback_.is_null()) { int rv = DoReadLoop(OK); if (rv != ERR_IO_PENDING) DoReadCallback(rv); |