| OLD | NEW |
| 1 // Copyright (c) 2010 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 |
| (...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 predicted_cert_chain_correct_(false), | 472 predicted_cert_chain_correct_(false), |
| 473 peername_initialized_(false), | 473 peername_initialized_(false), |
| 474 dnssec_provider_(NULL), | 474 dnssec_provider_(NULL), |
| 475 next_handshake_state_(STATE_NONE), | 475 next_handshake_state_(STATE_NONE), |
| 476 nss_fd_(NULL), | 476 nss_fd_(NULL), |
| 477 nss_bufs_(NULL), | 477 nss_bufs_(NULL), |
| 478 net_log_(transport_socket->socket()->NetLog()), | 478 net_log_(transport_socket->socket()->NetLog()), |
| 479 predicted_npn_status_(kNextProtoUnsupported), | 479 predicted_npn_status_(kNextProtoUnsupported), |
| 480 predicted_npn_proto_used_(false), | 480 predicted_npn_proto_used_(false), |
| 481 ssl_host_info_(ssl_host_info), | 481 ssl_host_info_(ssl_host_info), |
| 482 dns_cert_checker_(dns_ctx) { | 482 dns_cert_checker_(dns_ctx), |
| 483 valid_thread_id_(base::kInvalidThreadId) { |
| 483 EnterFunction(""); | 484 EnterFunction(""); |
| 484 } | 485 } |
| 485 | 486 |
| 486 SSLClientSocketNSS::~SSLClientSocketNSS() { | 487 SSLClientSocketNSS::~SSLClientSocketNSS() { |
| 487 EnterFunction(""); | 488 EnterFunction(""); |
| 488 Disconnect(); | 489 Disconnect(); |
| 489 LeaveFunction(""); | 490 LeaveFunction(""); |
| 490 } | 491 } |
| 491 | 492 |
| 492 // static | 493 // static |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 EnterFunction(""); | 584 EnterFunction(""); |
| 584 DCHECK(transport_.get()); | 585 DCHECK(transport_.get()); |
| 585 DCHECK(next_handshake_state_ == STATE_NONE); | 586 DCHECK(next_handshake_state_ == STATE_NONE); |
| 586 DCHECK(!user_read_callback_); | 587 DCHECK(!user_read_callback_); |
| 587 DCHECK(!user_write_callback_); | 588 DCHECK(!user_write_callback_); |
| 588 DCHECK(!user_connect_callback_); | 589 DCHECK(!user_connect_callback_); |
| 589 DCHECK(!user_read_buf_); | 590 DCHECK(!user_read_buf_); |
| 590 DCHECK(!user_write_buf_); | 591 DCHECK(!user_write_buf_); |
| 591 DCHECK(!pseudo_connected_); | 592 DCHECK(!pseudo_connected_); |
| 592 | 593 |
| 594 EnsureThreadIdAssigned(); |
| 595 |
| 593 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); | 596 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); |
| 594 | 597 |
| 595 int rv = Init(); | 598 int rv = Init(); |
| 596 if (rv != OK) { | 599 if (rv != OK) { |
| 597 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL); | 600 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL); |
| 598 return rv; | 601 return rv; |
| 599 } | 602 } |
| 600 | 603 |
| 601 rv = InitializeSSLOptions(); | 604 rv = InitializeSSLOptions(); |
| 602 if (rv != OK) { | 605 if (rv != OK) { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 632 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL); | 635 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL); |
| 633 } | 636 } |
| 634 | 637 |
| 635 LeaveFunction(""); | 638 LeaveFunction(""); |
| 636 return rv > OK ? OK : rv; | 639 return rv > OK ? OK : rv; |
| 637 } | 640 } |
| 638 | 641 |
| 639 void SSLClientSocketNSS::Disconnect() { | 642 void SSLClientSocketNSS::Disconnect() { |
| 640 EnterFunction(""); | 643 EnterFunction(""); |
| 641 | 644 |
| 645 // Shut down anything that may call us back (through buffer_send_callback_, |
| 646 // buffer_recv_callback, or handshake_io_callback_). |
| 647 verifier_.reset(); |
| 648 transport_->socket()->Disconnect(); |
| 649 |
| 650 CHECK(CalledOnValidThread()); |
| 651 |
| 642 // TODO(wtc): Send SSL close_notify alert. | 652 // TODO(wtc): Send SSL close_notify alert. |
| 643 if (nss_fd_ != NULL) { | 653 if (nss_fd_ != NULL) { |
| 644 PR_Close(nss_fd_); | 654 PR_Close(nss_fd_); |
| 645 nss_fd_ = NULL; | 655 nss_fd_ = NULL; |
| 646 } | 656 } |
| 647 | 657 |
| 648 // Shut down anything that may call us back (through buffer_send_callback_, | |
| 649 // buffer_recv_callback, or handshake_io_callback_). | |
| 650 verifier_.reset(); | |
| 651 transport_->socket()->Disconnect(); | |
| 652 | |
| 653 // Reset object state | 658 // Reset object state |
| 654 transport_send_busy_ = false; | 659 transport_send_busy_ = false; |
| 655 transport_recv_busy_ = false; | 660 transport_recv_busy_ = false; |
| 656 user_connect_callback_ = NULL; | 661 user_connect_callback_ = NULL; |
| 657 user_read_callback_ = NULL; | 662 user_read_callback_ = NULL; |
| 658 user_write_callback_ = NULL; | 663 user_write_callback_ = NULL; |
| 659 user_read_buf_ = NULL; | 664 user_read_buf_ = NULL; |
| 660 user_read_buf_len_ = 0; | 665 user_read_buf_len_ = 0; |
| 661 user_write_buf_ = NULL; | 666 user_write_buf_ = NULL; |
| 662 user_write_buf_len_ = 0; | 667 user_write_buf_len_ = 0; |
| (...skipping 1828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2491 void SSLClientSocketNSS::HandshakeCallback(PRFileDesc* socket, | 2496 void SSLClientSocketNSS::HandshakeCallback(PRFileDesc* socket, |
| 2492 void* arg) { | 2497 void* arg) { |
| 2493 SSLClientSocketNSS* that = reinterpret_cast<SSLClientSocketNSS*>(arg); | 2498 SSLClientSocketNSS* that = reinterpret_cast<SSLClientSocketNSS*>(arg); |
| 2494 | 2499 |
| 2495 that->handshake_callback_called_ = true; | 2500 that->handshake_callback_called_ = true; |
| 2496 | 2501 |
| 2497 that->UpdateServerCert(); | 2502 that->UpdateServerCert(); |
| 2498 that->UpdateConnectionStatus(); | 2503 that->UpdateConnectionStatus(); |
| 2499 } | 2504 } |
| 2500 | 2505 |
| 2506 void SSLClientSocketNSS::EnsureThreadIdAssigned() const { |
| 2507 base::AutoLock auto_lock(lock_); |
| 2508 if (valid_thread_id_ != base::kInvalidThreadId) |
| 2509 return; |
| 2510 valid_thread_id_ = base::PlatformThread::CurrentId(); |
| 2511 } |
| 2512 |
| 2513 bool SSLClientSocketNSS::CalledOnValidThread() const { |
| 2514 EnsureThreadIdAssigned(); |
| 2515 base::AutoLock auto_lock(lock_); |
| 2516 return valid_thread_id_ == base::PlatformThread::CurrentId(); |
| 2517 } |
| 2518 |
| 2519 void SSLClientSocketNSS::DetachFromThread() { |
| 2520 base::AutoLock auto_lock(lock_); |
| 2521 valid_thread_id_ = base::kInvalidThreadId; |
| 2522 } |
| 2523 |
| 2501 } // namespace net | 2524 } // namespace net |
| OLD | NEW |