diff options
Diffstat (limited to 'net/socket/ssl_client_socket_mac.cc')
-rw-r--r-- | net/socket/ssl_client_socket_mac.cc | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/net/socket/ssl_client_socket_mac.cc b/net/socket/ssl_client_socket_mac.cc index c719946..817b3be 100644 --- a/net/socket/ssl_client_socket_mac.cc +++ b/net/socket/ssl_client_socket_mac.cc @@ -531,7 +531,7 @@ SSLClientSocketMac::SSLClientSocketMac(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_write_callback_(NULL), user_read_buf_len_(0), @@ -558,7 +558,29 @@ SSLClientSocketMac::~SSLClientSocketMac() { int SSLClientSocketMac::Connect(OldCompletionCallback* callback) { DCHECK(transport_.get()); DCHECK(next_handshake_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_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); + return rv; + } + + next_handshake_state_ = STATE_HANDSHAKE; + rv = DoHandshakeLoop(OK); + if (rv == ERR_IO_PENDING) { + old_user_connect_callback_ = callback; + } else { + net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); + } + return rv; +} +int SSLClientSocketMac::Connect(const CompletionCallback& callback) { + DCHECK(transport_.get()); + DCHECK(next_handshake_state_ == STATE_NONE); + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); @@ -896,11 +918,17 @@ int SSLClientSocketMac::InitializeSSLContext() { void SSLClientSocketMac::DoConnectCallback(int rv) { DCHECK(rv != ERR_IO_PENDING); - DCHECK(user_connect_callback_); + DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null()); - OldCompletionCallback* c = user_connect_callback_; - user_connect_callback_ = NULL; - c->Run(rv > OK ? OK : rv); + if (old_user_connect_callback_) { + OldCompletionCallback* c = old_user_connect_callback_; + old_user_connect_callback_ = NULL; + c->Run(rv > OK ? OK : rv); + } else { + CompletionCallback c = user_connect_callback_; + user_connect_callback_.Reset(); + c.Run(rv > OK ? OK : rv); + } } void SSLClientSocketMac::DoReadCallback(int rv) { @@ -936,7 +964,7 @@ void SSLClientSocketMac::OnHandshakeIOComplete(int result) { // 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()) { DoReadCallback(rv); return; } @@ -1274,7 +1302,7 @@ int SSLClientSocketMac::DoCompletedRenegotiation(int result) { } void SSLClientSocketMac::DidCompleteRenegotiation() { - DCHECK(!user_connect_callback_); + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); renegotiating_ = false; next_handshake_state_ = STATE_COMPLETED_RENEGOTIATION; } |