diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-06 23:33:24 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-06 23:33:24 +0000 |
commit | dbf036fcb743cfdcd5be421364c8b89b10ee3f55 (patch) | |
tree | 034c3028c8b523d2bb6c2703416b26a81bc31663 /net/socket/ssl_client_socket_win.cc | |
parent | ad24b1827fe58c4a22c0cddb5791a95f2ab1b21b (diff) | |
download | chromium_src-dbf036fcb743cfdcd5be421364c8b89b10ee3f55.zip chromium_src-dbf036fcb743cfdcd5be421364c8b89b10ee3f55.tar.gz chromium_src-dbf036fcb743cfdcd5be421364c8b89b10ee3f55.tar.bz2 |
base::Bind: Convert StreamSocket::Connect.
BUG=none
TEST=none
R=csilv
Review URL: http://codereview.chromium.org/8801004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113283 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket/ssl_client_socket_win.cc')
-rw-r--r-- | net/socket/ssl_client_socket_win.cc | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/net/socket/ssl_client_socket_win.cc b/net/socket/ssl_client_socket_win.cc index 1e42414..d1ed130 100644 --- a/net/socket/ssl_client_socket_win.cc +++ b/net/socket/ssl_client_socket_win.cc @@ -397,7 +397,7 @@ SSLClientSocketWin::SSLClientSocketWin(ClientSocketHandle* transport_socket, transport_(transport_socket), host_and_port_(host_and_port), ssl_config_(ssl_config), - user_connect_callback_(NULL), + old_user_connect_callback_(NULL), user_read_callback_(NULL), user_read_buf_len_(0), user_write_callback_(NULL), @@ -565,7 +565,30 @@ SSLClientSocketWin::GetNextProto(std::string* proto, int SSLClientSocketWin::Connect(OldCompletionCallback* callback) { DCHECK(transport_.get()); DCHECK(next_state_ == STATE_NONE); - DCHECK(!user_connect_callback_); + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); + + net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); + + int rv = InitializeSSLContext(); + if (rv != OK) { + net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL); + return rv; + } + + writing_first_token_ = true; + next_state_ = STATE_HANDSHAKE_WRITE; + rv = DoLoop(OK); + if (rv == ERR_IO_PENDING) { + old_user_connect_callback_ = callback; + } else { + net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL); + } + return rv; +} +int SSLClientSocketWin::Connect(const CompletionCallback& callback) { + DCHECK(transport_.get()); + DCHECK(next_state_ == STATE_NONE); + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); @@ -842,7 +865,7 @@ void SSLClientSocketWin::OnHandshakeIOComplete(int result) { // If there is no connect callback available to call, we are renegotiating // (which occurs because we are in the middle of a Read when the // renegotiation process starts). So we complete the Read here. - if (!user_connect_callback_) { + if (!old_user_connect_callback_ && user_connect_callback_.is_null()) { OldCompletionCallback* c = user_read_callback_; user_read_callback_ = NULL; user_read_buf_ = NULL; @@ -851,9 +874,15 @@ void SSLClientSocketWin::OnHandshakeIOComplete(int result) { return; } net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL); - OldCompletionCallback* c = user_connect_callback_; - user_connect_callback_ = NULL; - c->Run(rv); + if (old_user_connect_callback_) { + OldCompletionCallback* c = old_user_connect_callback_; + old_user_connect_callback_ = NULL; + c->Run(rv); + } else { + CompletionCallback c = user_connect_callback_; + user_connect_callback_.Reset(); + c.Run(rv); + } } } @@ -1549,7 +1578,7 @@ int SSLClientSocketWin::DidCompleteHandshake() { // Called when a renegotiation is completed. |result| is the verification // result of the server certificate received during renegotiation. void SSLClientSocketWin::DidCompleteRenegotiation() { - DCHECK(!user_connect_callback_); + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); DCHECK(user_read_callback_); renegotiating_ = false; next_state_ = STATE_COMPLETED_RENEGOTIATION; |