| Index: net/socket/ssl_client_socket_nss.cc
|
| diff --git a/net/socket/ssl_client_socket_nss.cc b/net/socket/ssl_client_socket_nss.cc
|
| index 72c1bc3e825b1d9735e22ede53a8ff9ddae1a67b..ca523d526f7c10e634d8b1f0dbffd7d578324529 100644
|
| --- a/net/socket/ssl_client_socket_nss.cc
|
| +++ b/net/socket/ssl_client_socket_nss.cc
|
| @@ -69,6 +69,7 @@
|
| #include "base/string_util.h"
|
| #include "net/base/cert_verifier.h"
|
| #include "net/base/io_buffer.h"
|
| +#include "net/base/load_log.h"
|
| #include "net/base/net_errors.h"
|
| #include "net/base/ssl_cert_request_info.h"
|
| #include "net/base/ssl_info.h"
|
| @@ -236,7 +237,8 @@ int SSLClientSocketNSS::Init() {
|
| return OK;
|
| }
|
|
|
| -int SSLClientSocketNSS::Connect(CompletionCallback* callback) {
|
| +int SSLClientSocketNSS::Connect(CompletionCallback* callback,
|
| + LoadLog* load_log) {
|
| EnterFunction("");
|
| DCHECK(transport_.get());
|
| DCHECK(next_handshake_state_ == STATE_NONE);
|
| @@ -246,10 +248,32 @@ int SSLClientSocketNSS::Connect(CompletionCallback* callback) {
|
| DCHECK(!user_read_buf_);
|
| DCHECK(!user_write_buf_);
|
|
|
| + LoadLog::BeginEvent(load_log, LoadLog::TYPE_SSL_CONNECT);
|
| +
|
| if (Init() != OK) {
|
| NOTREACHED() << "Couldn't initialize nss";
|
| }
|
|
|
| + int rv = InitializeSSLOptions();
|
| + if (rv != OK) {
|
| + LoadLog::EndEvent(load_log, LoadLog::TYPE_SSL_CONNECT);
|
| + return rv;
|
| + }
|
| +
|
| + GotoState(STATE_HANDSHAKE);
|
| + rv = DoHandshakeLoop(OK);
|
| + if (rv == ERR_IO_PENDING) {
|
| + user_connect_callback_ = callback;
|
| + load_log_ = load_log;
|
| + } else {
|
| + LoadLog::EndEvent(load_log, LoadLog::TYPE_SSL_CONNECT);
|
| + }
|
| +
|
| + LeaveFunction("");
|
| + return rv > OK ? OK : rv;
|
| +}
|
| +
|
| +int SSLClientSocketNSS::InitializeSSLOptions() {
|
| // Transport connected, now hook it up to nss
|
| // TODO(port): specify rx and tx buffer sizes separately
|
| nss_fd_ = memio_CreateIOLayer(kRecvBufferSize);
|
| @@ -337,13 +361,7 @@ int SSLClientSocketNSS::Connect(CompletionCallback* callback) {
|
| // Tell SSL we're a client; needed if not letting NSPR do socket I/O
|
| SSL_ResetHandshake(nss_fd_, 0);
|
|
|
| - GotoState(STATE_HANDSHAKE);
|
| - rv = DoHandshakeLoop(OK);
|
| - if (rv == ERR_IO_PENDING)
|
| - user_connect_callback_ = callback;
|
| -
|
| - LeaveFunction("");
|
| - return rv > OK ? OK : rv;
|
| + return OK;
|
| }
|
|
|
| void SSLClientSocketNSS::InvalidateSessionIfBadCertificate() {
|
| @@ -576,8 +594,11 @@ void SSLClientSocketNSS::DoConnectCallback(int rv) {
|
| void SSLClientSocketNSS::OnHandshakeIOComplete(int result) {
|
| EnterFunction(result);
|
| int rv = DoHandshakeLoop(result);
|
| - if (rv != ERR_IO_PENDING)
|
| + if (rv != ERR_IO_PENDING) {
|
| + LoadLog::EndEvent(load_log_, net::LoadLog::TYPE_SSL_CONNECT);
|
| + load_log_ = NULL;
|
| DoConnectCallback(rv);
|
| + }
|
| LeaveFunction("");
|
| }
|
|
|
|
|