| Index: net/socket/ssl_client_socket_win.cc
|
| diff --git a/net/socket/ssl_client_socket_win.cc b/net/socket/ssl_client_socket_win.cc
|
| index 30f599d76d14d93eb881fd19594836c055e46149..e2509f29e432b8e44ed1a6c0e9b39bff3166a786 100644
|
| --- a/net/socket/ssl_client_socket_win.cc
|
| +++ b/net/socket/ssl_client_socket_win.cc
|
| @@ -387,20 +387,10 @@ SSLClientSocketWin::SSLClientSocketWin(ClientSocketHandle* transport_socket,
|
| const HostPortPair& host_and_port,
|
| const SSLConfig& ssl_config,
|
| const SSLClientSocketContext& context)
|
| - : ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - handshake_io_callback_(this,
|
| - &SSLClientSocketWin::OnHandshakeIOComplete)),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - read_callback_(this, &SSLClientSocketWin::OnReadComplete)),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - write_callback_(this, &SSLClientSocketWin::OnWriteComplete)),
|
| - transport_(transport_socket),
|
| + : transport_(transport_socket),
|
| host_and_port_(host_and_port),
|
| ssl_config_(ssl_config),
|
| - old_user_connect_callback_(NULL),
|
| - old_user_read_callback_(NULL),
|
| user_read_buf_len_(0),
|
| - user_write_callback_(NULL),
|
| user_write_buf_len_(0),
|
| next_state_(STATE_NONE),
|
| cert_verifier_(context.cert_verifier),
|
| @@ -562,33 +552,10 @@ SSLClientSocketWin::GetNextProto(std::string* proto,
|
| return kNextProtoUnsupported;
|
| }
|
|
|
| -int SSLClientSocketWin::Connect(OldCompletionCallback* 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);
|
| -
|
| - 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());
|
| + DCHECK(user_connect_callback_.is_null());
|
|
|
| net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
|
|
|
| @@ -784,50 +751,9 @@ base::TimeDelta SSLClientSocketWin::GetConnectTimeMicros() const {
|
| }
|
|
|
| int SSLClientSocketWin::Read(IOBuffer* buf, int buf_len,
|
| - OldCompletionCallback* callback) {
|
| - DCHECK(completed_handshake());
|
| - DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
|
| -
|
| - // If we have surplus decrypted plaintext, satisfy the Read with it without
|
| - // reading more ciphertext from the transport socket.
|
| - if (bytes_decrypted_ != 0) {
|
| - int len = std::min(buf_len, bytes_decrypted_);
|
| - net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_RECEIVED, len,
|
| - decrypted_ptr_);
|
| - memcpy(buf->data(), decrypted_ptr_, len);
|
| - decrypted_ptr_ += len;
|
| - bytes_decrypted_ -= len;
|
| - if (bytes_decrypted_ == 0) {
|
| - decrypted_ptr_ = NULL;
|
| - if (bytes_received_ != 0) {
|
| - memmove(recv_buffer_.get(), received_ptr_, bytes_received_);
|
| - received_ptr_ = recv_buffer_.get();
|
| - }
|
| - }
|
| - return len;
|
| - }
|
| -
|
| - DCHECK(!user_read_buf_);
|
| - // http://crbug.com/16371: We're seeing |buf->data()| return NULL. See if the
|
| - // user is passing in an IOBuffer with a NULL |data_|.
|
| - CHECK(buf);
|
| - CHECK(buf->data());
|
| - user_read_buf_ = buf;
|
| - user_read_buf_len_ = buf_len;
|
| -
|
| - int rv = DoPayloadRead();
|
| - if (rv == ERR_IO_PENDING) {
|
| - old_user_read_callback_ = callback;
|
| - } else {
|
| - user_read_buf_ = NULL;
|
| - user_read_buf_len_ = 0;
|
| - }
|
| - return rv;
|
| -}
|
| -int SSLClientSocketWin::Read(IOBuffer* buf, int buf_len,
|
| const CompletionCallback& callback) {
|
| DCHECK(completed_handshake());
|
| - DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
|
| + DCHECK(user_read_callback_.is_null());
|
|
|
| // If we have surplus decrypted plaintext, satisfy the Read with it without
|
| // reading more ciphertext from the transport socket.
|
| @@ -867,9 +793,9 @@ int SSLClientSocketWin::Read(IOBuffer* buf, int buf_len,
|
| }
|
|
|
| int SSLClientSocketWin::Write(IOBuffer* buf, int buf_len,
|
| - OldCompletionCallback* callback) {
|
| + const CompletionCallback& callback) {
|
| DCHECK(completed_handshake());
|
| - DCHECK(!user_write_callback_);
|
| + DCHECK(user_write_callback_.is_null());
|
|
|
| DCHECK(!user_write_buf_);
|
| user_write_buf_ = buf;
|
| @@ -906,32 +832,18 @@ 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 (!old_user_connect_callback_ && user_connect_callback_.is_null()) {
|
| - 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);
|
| - }
|
| + if (user_connect_callback_.is_null()) {
|
| + CompletionCallback c = user_read_callback_;
|
| + user_read_callback_.Reset();
|
| + user_read_buf_ = NULL;
|
| + user_read_buf_len_ = 0;
|
| + c.Run(rv);
|
| return;
|
| }
|
| net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL);
|
| - 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);
|
| - }
|
| + CompletionCallback c = user_connect_callback_;
|
| + user_connect_callback_.Reset();
|
| + c.Run(rv);
|
| }
|
| }
|
|
|
| @@ -942,20 +854,12 @@ void SSLClientSocketWin::OnReadComplete(int result) {
|
| if (result > 0)
|
| result = DoPayloadDecrypt();
|
| if (result != ERR_IO_PENDING) {
|
| - DCHECK(old_user_read_callback_ || !user_read_callback_.is_null());
|
| - 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(result);
|
| - } else {
|
| - CompletionCallback c = user_read_callback_;
|
| - user_read_callback_.Reset();
|
| - user_read_buf_ = NULL;
|
| - user_read_buf_len_ = 0;
|
| - c.Run(result);
|
| - }
|
| + DCHECK(!user_read_callback_.is_null());
|
| + CompletionCallback c = user_read_callback_;
|
| + user_read_callback_.Reset();
|
| + user_read_buf_ = NULL;
|
| + user_read_buf_len_ = 0;
|
| + c.Run(result);
|
| }
|
| }
|
|
|
| @@ -964,12 +868,12 @@ void SSLClientSocketWin::OnWriteComplete(int result) {
|
|
|
| int rv = DoPayloadWriteComplete(result);
|
| if (rv != ERR_IO_PENDING) {
|
| - DCHECK(user_write_callback_);
|
| - OldCompletionCallback* c = user_write_callback_;
|
| - user_write_callback_ = NULL;
|
| + DCHECK(!user_write_callback_.is_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);
|
| }
|
| }
|
|
|
| @@ -1031,8 +935,10 @@ int SSLClientSocketWin::DoHandshakeRead() {
|
| DCHECK(!transport_read_buf_);
|
| transport_read_buf_ = new IOBuffer(buf_len);
|
|
|
| - return transport_->socket()->Read(transport_read_buf_, buf_len,
|
| - &handshake_io_callback_);
|
| + return transport_->socket()->Read(
|
| + transport_read_buf_, buf_len,
|
| + base::Bind(&SSLClientSocketWin::OnHandshakeIOComplete,
|
| + base::Unretained(this)));
|
| }
|
|
|
| int SSLClientSocketWin::DoHandshakeReadComplete(int result) {
|
| @@ -1209,8 +1115,10 @@ int SSLClientSocketWin::DoHandshakeWrite() {
|
| transport_write_buf_ = new IOBuffer(buf_len);
|
| memcpy(transport_write_buf_->data(), buf, buf_len);
|
|
|
| - return transport_->socket()->Write(transport_write_buf_, buf_len,
|
| - &handshake_io_callback_);
|
| + return transport_->socket()->Write(
|
| + transport_write_buf_, buf_len,
|
| + base::Bind(&SSLClientSocketWin::OnHandshakeIOComplete,
|
| + base::Unretained(this)));
|
| }
|
|
|
| int SSLClientSocketWin::DoHandshakeWriteComplete(int result) {
|
| @@ -1308,8 +1216,10 @@ int SSLClientSocketWin::DoPayloadRead() {
|
| DCHECK(!transport_read_buf_);
|
| transport_read_buf_ = new IOBuffer(buf_len);
|
|
|
| - rv = transport_->socket()->Read(transport_read_buf_, buf_len,
|
| - &read_callback_);
|
| + rv = transport_->socket()->Read(
|
| + transport_read_buf_, buf_len,
|
| + base::Bind(&SSLClientSocketWin::OnReadComplete,
|
| + base::Unretained(this)));
|
| if (rv != ERR_IO_PENDING)
|
| rv = DoPayloadReadComplete(rv);
|
| if (rv <= 0)
|
| @@ -1551,8 +1461,10 @@ int SSLClientSocketWin::DoPayloadWrite() {
|
| transport_write_buf_ = new IOBuffer(buf_len);
|
| memcpy(transport_write_buf_->data(), buf, buf_len);
|
|
|
| - int rv = transport_->socket()->Write(transport_write_buf_, buf_len,
|
| - &write_callback_);
|
| + int rv = transport_->socket()->Write(
|
| + transport_write_buf_, buf_len,
|
| + base::Bind(&SSLClientSocketWin::OnWriteComplete,
|
| + base::Unretained(this)));
|
| if (rv != ERR_IO_PENDING)
|
| rv = DoPayloadWriteComplete(rv);
|
| return rv;
|
| @@ -1635,8 +1547,8 @@ 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(!old_user_connect_callback_ && user_connect_callback_.is_null());
|
| - DCHECK(old_user_read_callback_ || !user_read_callback_.is_null());
|
| + DCHECK(user_connect_callback_.is_null());
|
| + DCHECK(!user_read_callback_.is_null());
|
| renegotiating_ = false;
|
| next_state_ = STATE_COMPLETED_RENEGOTIATION;
|
| }
|
|
|