| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file includes code SSLClientSocketNSS::DoVerifyCertComplete() derived | 5 // This file includes code SSLClientSocketNSS::DoVerifyCertComplete() derived |
| 6 // from AuthCertificateCallback() in | 6 // from AuthCertificateCallback() in |
| 7 // mozilla/security/manager/ssl/src/nsNSSCallbacks.cpp. | 7 // mozilla/security/manager/ssl/src/nsNSSCallbacks.cpp. |
| 8 | 8 |
| 9 /* ***** BEGIN LICENSE BLOCK ***** | 9 /* ***** BEGIN LICENSE BLOCK ***** |
| 10 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 10 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| 11 * | 11 * |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 user_connect_callback_(NULL), | 246 user_connect_callback_(NULL), |
| 247 user_read_callback_(NULL), | 247 user_read_callback_(NULL), |
| 248 user_write_callback_(NULL), | 248 user_write_callback_(NULL), |
| 249 user_read_buf_len_(0), | 249 user_read_buf_len_(0), |
| 250 user_write_buf_len_(0), | 250 user_write_buf_len_(0), |
| 251 server_cert_nss_(NULL), | 251 server_cert_nss_(NULL), |
| 252 client_auth_cert_needed_(false), | 252 client_auth_cert_needed_(false), |
| 253 completed_handshake_(false), | 253 completed_handshake_(false), |
| 254 next_handshake_state_(STATE_NONE), | 254 next_handshake_state_(STATE_NONE), |
| 255 nss_fd_(NULL), | 255 nss_fd_(NULL), |
| 256 nss_bufs_(NULL) { | 256 nss_bufs_(NULL), |
| 257 net_log_(transport_socket->NetLog()) { |
| 257 EnterFunction(""); | 258 EnterFunction(""); |
| 258 } | 259 } |
| 259 | 260 |
| 260 SSLClientSocketNSS::~SSLClientSocketNSS() { | 261 SSLClientSocketNSS::~SSLClientSocketNSS() { |
| 261 EnterFunction(""); | 262 EnterFunction(""); |
| 262 Disconnect(); | 263 Disconnect(); |
| 263 LeaveFunction(""); | 264 LeaveFunction(""); |
| 264 } | 265 } |
| 265 | 266 |
| 266 int SSLClientSocketNSS::Init() { | 267 int SSLClientSocketNSS::Init() { |
| 267 EnterFunction(""); | 268 EnterFunction(""); |
| 268 // Initialize the NSS SSL library in a threadsafe way. This also | 269 // Initialize the NSS SSL library in a threadsafe way. This also |
| 269 // initializes the NSS base library. | 270 // initializes the NSS base library. |
| 270 EnsureNSSSSLInit(); | 271 EnsureNSSSSLInit(); |
| 271 if (!NSS_IsInitialized()) | 272 if (!NSS_IsInitialized()) |
| 272 return ERR_UNEXPECTED; | 273 return ERR_UNEXPECTED; |
| 273 #if !defined(OS_WIN) | 274 #if !defined(OS_WIN) |
| 274 // We must call EnsureOCSPInit() here, on the IO thread, to get the IO loop | 275 // We must call EnsureOCSPInit() here, on the IO thread, to get the IO loop |
| 275 // by MessageLoopForIO::current(). | 276 // by MessageLoopForIO::current(). |
| 276 // X509Certificate::Verify() runs on a worker thread of CertVerifier. | 277 // X509Certificate::Verify() runs on a worker thread of CertVerifier. |
| 277 EnsureOCSPInit(); | 278 EnsureOCSPInit(); |
| 278 #endif | 279 #endif |
| 279 | 280 |
| 280 LeaveFunction(""); | 281 LeaveFunction(""); |
| 281 return OK; | 282 return OK; |
| 282 } | 283 } |
| 283 | 284 |
| 284 int SSLClientSocketNSS::Connect(CompletionCallback* callback, | 285 int SSLClientSocketNSS::Connect(CompletionCallback* callback) { |
| 285 const BoundNetLog& net_log) { | |
| 286 EnterFunction(""); | 286 EnterFunction(""); |
| 287 DCHECK(transport_.get()); | 287 DCHECK(transport_.get()); |
| 288 DCHECK(next_handshake_state_ == STATE_NONE); | 288 DCHECK(next_handshake_state_ == STATE_NONE); |
| 289 DCHECK(!user_read_callback_); | 289 DCHECK(!user_read_callback_); |
| 290 DCHECK(!user_write_callback_); | 290 DCHECK(!user_write_callback_); |
| 291 DCHECK(!user_connect_callback_); | 291 DCHECK(!user_connect_callback_); |
| 292 DCHECK(!user_read_buf_); | 292 DCHECK(!user_read_buf_); |
| 293 DCHECK(!user_write_buf_); | 293 DCHECK(!user_write_buf_); |
| 294 | 294 |
| 295 net_log.BeginEvent(NetLog::TYPE_SSL_CONNECT); | 295 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT); |
| 296 | 296 |
| 297 int rv = Init(); | 297 int rv = Init(); |
| 298 if (rv != OK) { | 298 if (rv != OK) { |
| 299 net_log.EndEvent(NetLog::TYPE_SSL_CONNECT); | 299 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT); |
| 300 return rv; | 300 return rv; |
| 301 } | 301 } |
| 302 | 302 |
| 303 rv = InitializeSSLOptions(); | 303 rv = InitializeSSLOptions(); |
| 304 if (rv != OK) { | 304 if (rv != OK) { |
| 305 net_log.EndEvent(NetLog::TYPE_SSL_CONNECT); | 305 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT); |
| 306 return rv; | 306 return rv; |
| 307 } | 307 } |
| 308 | 308 |
| 309 GotoState(STATE_HANDSHAKE); | 309 GotoState(STATE_HANDSHAKE); |
| 310 rv = DoHandshakeLoop(OK); | 310 rv = DoHandshakeLoop(OK); |
| 311 if (rv == ERR_IO_PENDING) { | 311 if (rv == ERR_IO_PENDING) { |
| 312 user_connect_callback_ = callback; | 312 user_connect_callback_ = callback; |
| 313 net_log_ = net_log; | |
| 314 } else { | 313 } else { |
| 315 net_log.EndEvent(NetLog::TYPE_SSL_CONNECT); | 314 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT); |
| 316 } | 315 } |
| 317 | 316 |
| 318 LeaveFunction(""); | 317 LeaveFunction(""); |
| 319 return rv > OK ? OK : rv; | 318 return rv > OK ? OK : rv; |
| 320 } | 319 } |
| 321 | 320 |
| 322 int SSLClientSocketNSS::InitializeSSLOptions() { | 321 int SSLClientSocketNSS::InitializeSSLOptions() { |
| 323 // Transport connected, now hook it up to nss | 322 // Transport connected, now hook it up to nss |
| 324 // TODO(port): specify rx and tx buffer sizes separately | 323 // TODO(port): specify rx and tx buffer sizes separately |
| 325 nss_fd_ = memio_CreateIOLayer(kRecvBufferSize); | 324 nss_fd_ = memio_CreateIOLayer(kRecvBufferSize); |
| (...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 user_connect_callback_ = NULL; | 811 user_connect_callback_ = NULL; |
| 813 c->Run(rv > OK ? OK : rv); | 812 c->Run(rv > OK ? OK : rv); |
| 814 LeaveFunction(""); | 813 LeaveFunction(""); |
| 815 } | 814 } |
| 816 | 815 |
| 817 void SSLClientSocketNSS::OnHandshakeIOComplete(int result) { | 816 void SSLClientSocketNSS::OnHandshakeIOComplete(int result) { |
| 818 EnterFunction(result); | 817 EnterFunction(result); |
| 819 int rv = DoHandshakeLoop(result); | 818 int rv = DoHandshakeLoop(result); |
| 820 if (rv != ERR_IO_PENDING) { | 819 if (rv != ERR_IO_PENDING) { |
| 821 net_log_.EndEvent(net::NetLog::TYPE_SSL_CONNECT); | 820 net_log_.EndEvent(net::NetLog::TYPE_SSL_CONNECT); |
| 822 net_log_ = BoundNetLog(); | |
| 823 DoConnectCallback(rv); | 821 DoConnectCallback(rv); |
| 824 } | 822 } |
| 825 LeaveFunction(""); | 823 LeaveFunction(""); |
| 826 } | 824 } |
| 827 | 825 |
| 828 void SSLClientSocketNSS::OnSendComplete(int result) { | 826 void SSLClientSocketNSS::OnSendComplete(int result) { |
| 829 EnterFunction(result); | 827 EnterFunction(result); |
| 830 if (next_handshake_state_ == STATE_HANDSHAKE) { | 828 if (next_handshake_state_ == STATE_HANDSHAKE) { |
| 831 // In handshake phase. | 829 // In handshake phase. |
| 832 OnHandshakeIOComplete(result); | 830 OnHandshakeIOComplete(result); |
| (...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1438 PRErrorCode prerr = PR_GetError(); | 1436 PRErrorCode prerr = PR_GetError(); |
| 1439 if (prerr == PR_WOULD_BLOCK_ERROR) { | 1437 if (prerr == PR_WOULD_BLOCK_ERROR) { |
| 1440 LeaveFunction(""); | 1438 LeaveFunction(""); |
| 1441 return ERR_IO_PENDING; | 1439 return ERR_IO_PENDING; |
| 1442 } | 1440 } |
| 1443 LeaveFunction(""); | 1441 LeaveFunction(""); |
| 1444 return MapNSPRError(prerr); | 1442 return MapNSPRError(prerr); |
| 1445 } | 1443 } |
| 1446 | 1444 |
| 1447 } // namespace net | 1445 } // namespace net |
| OLD | NEW |