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 12373488f909af5960292cfc2973a70e07a2679d..f933031539b007fb3dd02cd4616538b8f065d050 100644 |
--- a/net/socket/ssl_client_socket_openssl.cc |
+++ b/net/socket/ssl_client_socket_openssl.cc |
@@ -384,15 +384,8 @@ SSLClientSocketOpenSSL::SSLClientSocketOpenSSL( |
const HostPortPair& host_and_port, |
const SSLConfig& ssl_config, |
const SSLClientSocketContext& context) |
- : ALLOW_THIS_IN_INITIALIZER_LIST(buffer_send_callback_( |
- this, &SSLClientSocketOpenSSL::BufferSendComplete)), |
- ALLOW_THIS_IN_INITIALIZER_LIST(buffer_recv_callback_( |
- this, &SSLClientSocketOpenSSL::BufferRecvComplete)), |
- transport_send_busy_(false), |
+ : transport_send_busy_(false), |
transport_recv_busy_(false), |
- old_user_connect_callback_(NULL), |
- old_user_read_callback_(NULL), |
- user_write_callback_(NULL), |
completed_handshake_(false), |
client_auth_cert_needed_(false), |
cert_verifier_(context.cert_verifier), |
@@ -614,56 +607,24 @@ SSLClientSocket::NextProtoStatus SSLClientSocketOpenSSL::GetNextProto( |
void SSLClientSocketOpenSSL::DoReadCallback(int rv) { |
// Since Run may result in Read being called, clear |user_read_callback_| |
// up front. |
- 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); |
- } |
+ CompletionCallback c = user_read_callback_; |
+ user_read_callback_.Reset(); |
+ user_read_buf_ = NULL; |
+ user_read_buf_len_ = 0; |
+ c.Run(rv); |
} |
void SSLClientSocketOpenSSL::DoWriteCallback(int rv) { |
// Since Run may result in Write being called, clear |user_write_callback_| |
// up front. |
- OldCompletionCallback* c = user_write_callback_; |
- user_write_callback_ = NULL; |
+ CompletionCallback c = user_write_callback_; |
+ user_write_callback_.Reset(); |
user_write_buf_ = NULL; |
user_write_buf_len_ = 0; |
- c->Run(rv); |
+ c.Run(rv); |
} |
-// StreamSocket methods |
- |
-int SSLClientSocketOpenSSL::Connect(OldCompletionCallback* 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) { |
- old_user_connect_callback_ = callback; |
- } else { |
- net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); |
- } |
- |
- return rv > OK ? OK : rv; |
-} |
+// StreamSocket implementation. |
int SSLClientSocketOpenSSL::Connect(const CompletionCallback& callback) { |
net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); |
@@ -708,11 +669,9 @@ void SSLClientSocketOpenSSL::Disconnect() { |
transport_recv_busy_ = false; |
recv_buffer_ = NULL; |
- old_user_connect_callback_ = NULL; |
user_connect_callback_.Reset(); |
- old_user_read_callback_ = NULL; |
user_read_callback_.Reset(); |
- user_write_callback_ = NULL; |
+ user_write_callback_.Reset(); |
user_read_buf_ = NULL; |
user_read_buf_len_ = 0; |
user_write_buf_ = NULL; |
@@ -971,9 +930,11 @@ int SSLClientSocketOpenSSL::BufferSend(void) { |
int rv = 0; |
while (send_buffer_) { |
- rv = transport_->socket()->Write(send_buffer_, |
- send_buffer_->BytesRemaining(), |
- &buffer_send_callback_); |
+ rv = transport_->socket()->Write( |
+ send_buffer_, |
+ send_buffer_->BytesRemaining(), |
+ base::Bind(&SSLClientSocketOpenSSL::BufferSendComplete, |
+ base::Unretained(this))); |
if (rv == ERR_IO_PENDING) { |
transport_send_busy_ = true; |
return rv; |
@@ -1017,8 +978,10 @@ int SSLClientSocketOpenSSL::BufferRecv(void) { |
return ERR_IO_PENDING; |
recv_buffer_ = new IOBuffer(max_write); |
- int rv = transport_->socket()->Read(recv_buffer_, max_write, |
- &buffer_recv_callback_); |
+ int rv = transport_->socket()->Read( |
+ recv_buffer_, max_write, |
+ base::Bind(&SSLClientSocketOpenSSL::BufferRecvComplete, |
+ base::Unretained(this))); |
if (rv == ERR_IO_PENDING) { |
transport_recv_busy_ = true; |
} else { |
@@ -1052,11 +1015,7 @@ void SSLClientSocketOpenSSL::TransportReadComplete(int result) { |
} |
void SSLClientSocketOpenSSL::DoConnectCallback(int rv) { |
- if (old_user_connect_callback_) { |
- OldCompletionCallback* c = old_user_connect_callback_; |
- old_user_connect_callback_ = NULL; |
- c->Run(rv > OK ? OK : rv); |
- } else { |
+ if (!user_connect_callback_.is_null()) { |
CompletionCallback c = user_connect_callback_; |
user_connect_callback_.Reset(); |
c.Run(rv > OK ? OK : rv); |
@@ -1190,23 +1149,6 @@ base::TimeDelta SSLClientSocketOpenSSL::GetConnectTimeMicros() const { |
int SSLClientSocketOpenSSL::Read(IOBuffer* buf, |
int buf_len, |
- OldCompletionCallback* callback) { |
- 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; |
- } |
- |
- return rv; |
-} |
-int SSLClientSocketOpenSSL::Read(IOBuffer* buf, |
- int buf_len, |
const CompletionCallback& callback) { |
user_read_buf_ = buf; |
user_read_buf_len_ = buf_len; |
@@ -1239,7 +1181,7 @@ int SSLClientSocketOpenSSL::DoReadLoop(int result) { |
int SSLClientSocketOpenSSL::Write(IOBuffer* buf, |
int buf_len, |
- OldCompletionCallback* callback) { |
+ const CompletionCallback& callback) { |
user_write_buf_ = buf; |
user_write_buf_len_ = buf_len; |