Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Unified Diff: net/socket/ssl_client_socket_openssl.cc

Issue 8801004: base::Bind: Convert StreamSocket::Connect. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fixes Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/socket/ssl_client_socket_openssl.h ('k') | net/socket/ssl_client_socket_win.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/socket/ssl_client_socket_openssl.cc
diff --git a/net/socket/ssl_client_socket_openssl.cc b/net/socket/ssl_client_socket_openssl.cc
index 14b5790290651ec8dff75c60f96188490d98defa..79c299713573009f4972eb26fcc8fda6ff669fae 100644
--- a/net/socket/ssl_client_socket_openssl.cc
+++ b/net/socket/ssl_client_socket_openssl.cc
@@ -390,7 +390,7 @@ SSLClientSocketOpenSSL::SSLClientSocketOpenSSL(
this, &SSLClientSocketOpenSSL::BufferRecvComplete)),
transport_send_busy_(false),
transport_recv_busy_(false),
- user_connect_callback_(NULL),
+ old_user_connect_callback_(NULL),
user_read_callback_(NULL),
user_write_callback_(NULL),
completed_handshake_(false),
@@ -648,6 +648,29 @@ int SSLClientSocketOpenSSL::Connect(OldCompletionCallback* callback) {
GotoState(STATE_HANDSHAKE);
int rv = DoHandshakeLoop(net::OK);
if (rv == ERR_IO_PENDING) {
+ old_user_connect_callback_ = callback;
+ } else {
+ net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
+ }
+
+ return rv > OK ? OK : rv;
+}
+int SSLClientSocketOpenSSL::Connect(const CompletionCallback& callback) {
+ net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
+
+ // Set up new ssl object.
+ if (!Init()) {
+ int result = ERR_UNEXPECTED;
+ net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, result);
+ return result;
+ }
+
+ // Set SSL to client mode. Handshake happens in the loop below.
+ SSL_set_connect_state(ssl_);
+
+ GotoState(STATE_HANDSHAKE);
+ int rv = DoHandshakeLoop(net::OK);
+ if (rv == ERR_IO_PENDING) {
user_connect_callback_ = callback;
} else {
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
@@ -676,7 +699,8 @@ void SSLClientSocketOpenSSL::Disconnect() {
transport_recv_busy_ = false;
recv_buffer_ = NULL;
- user_connect_callback_ = NULL;
+ old_user_connect_callback_ = NULL;
+ user_connect_callback_.Reset();
user_read_callback_ = NULL;
user_write_callback_ = NULL;
user_read_buf_ = NULL;
@@ -1017,9 +1041,15 @@ void SSLClientSocketOpenSSL::TransportReadComplete(int result) {
}
void SSLClientSocketOpenSSL::DoConnectCallback(int rv) {
- 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 SSLClientSocketOpenSSL::OnHandshakeIOComplete(int result) {
« no previous file with comments | « net/socket/ssl_client_socket_openssl.h ('k') | net/socket/ssl_client_socket_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698