Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Side by Side Diff: net/socket/ssl_client_socket_nss.cc

Issue 8801004: base::Bind: Convert StreamSocket::Connect. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fixes Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/socket/ssl_client_socket_nss.h ('k') | net/socket/ssl_client_socket_openssl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 this, &SSLClientSocketNSS::BufferRecvComplete)), 438 this, &SSLClientSocketNSS::BufferRecvComplete)),
439 transport_send_busy_(false), 439 transport_send_busy_(false),
440 transport_recv_busy_(false), 440 transport_recv_busy_(false),
441 corked_(false), 441 corked_(false),
442 ALLOW_THIS_IN_INITIALIZER_LIST(handshake_io_callback_( 442 ALLOW_THIS_IN_INITIALIZER_LIST(handshake_io_callback_(
443 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete, 443 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete,
444 base::Unretained(this)))), 444 base::Unretained(this)))),
445 transport_(transport_socket), 445 transport_(transport_socket),
446 host_and_port_(host_and_port), 446 host_and_port_(host_and_port),
447 ssl_config_(ssl_config), 447 ssl_config_(ssl_config),
448 user_connect_callback_(NULL), 448 old_user_connect_callback_(NULL),
449 user_read_callback_(NULL), 449 user_read_callback_(NULL),
450 user_write_callback_(NULL), 450 user_write_callback_(NULL),
451 user_read_buf_len_(0), 451 user_read_buf_len_(0),
452 user_write_buf_len_(0), 452 user_write_buf_len_(0),
453 server_cert_nss_(NULL), 453 server_cert_nss_(NULL),
454 server_cert_verify_result_(NULL), 454 server_cert_verify_result_(NULL),
455 ssl_connection_status_(0), 455 ssl_connection_status_(0),
456 client_auth_cert_needed_(false), 456 client_auth_cert_needed_(false),
457 cert_verifier_(context.cert_verifier), 457 cert_verifier_(context.cert_verifier),
458 ob_cert_xtn_negotiated_(false), 458 ob_cert_xtn_negotiated_(false),
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 *proto = next_proto_; 562 *proto = next_proto_;
563 return next_proto_status_; 563 return next_proto_status_;
564 } 564 }
565 565
566 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) { 566 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) {
567 EnterFunction(""); 567 EnterFunction("");
568 DCHECK(transport_.get()); 568 DCHECK(transport_.get());
569 DCHECK(next_handshake_state_ == STATE_NONE); 569 DCHECK(next_handshake_state_ == STATE_NONE);
570 DCHECK(!user_read_callback_); 570 DCHECK(!user_read_callback_);
571 DCHECK(!user_write_callback_); 571 DCHECK(!user_write_callback_);
572 DCHECK(!user_connect_callback_); 572 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
573 DCHECK(!user_read_buf_); 573 DCHECK(!user_read_buf_);
574 DCHECK(!user_write_buf_); 574 DCHECK(!user_write_buf_);
575 575
576 EnsureThreadIdAssigned();
577
578 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
579
580 int rv = Init();
581 if (rv != OK) {
582 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
583 return rv;
584 }
585
586 rv = InitializeSSLOptions();
587 if (rv != OK) {
588 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
589 return rv;
590 }
591
592 rv = InitializeSSLPeerName();
593 if (rv != OK) {
594 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
595 return rv;
596 }
597
598 if (ssl_config_.cached_info_enabled && ssl_host_info_.get()) {
599 GotoState(STATE_LOAD_SSL_HOST_INFO);
600 } else {
601 GotoState(STATE_HANDSHAKE);
602 }
603
604 rv = DoHandshakeLoop(OK);
605 if (rv == ERR_IO_PENDING) {
606 old_user_connect_callback_ = callback;
607 } else {
608 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
609 }
610
611 LeaveFunction("");
612 return rv > OK ? OK : rv;
613 }
614 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) {
615 EnterFunction("");
616 DCHECK(transport_.get());
617 DCHECK(next_handshake_state_ == STATE_NONE);
618 DCHECK(!user_read_callback_);
619 DCHECK(!user_write_callback_);
620 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
621 DCHECK(!user_read_buf_);
622 DCHECK(!user_write_buf_);
623
576 EnsureThreadIdAssigned(); 624 EnsureThreadIdAssigned();
577 625
578 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 626 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
579 627
580 int rv = Init(); 628 int rv = Init();
581 if (rv != OK) { 629 if (rv != OK) {
582 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 630 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
583 return rv; 631 return rv;
584 } 632 }
585 633
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 677
630 // TODO(wtc): Send SSL close_notify alert. 678 // TODO(wtc): Send SSL close_notify alert.
631 if (nss_fd_ != NULL) { 679 if (nss_fd_ != NULL) {
632 PR_Close(nss_fd_); 680 PR_Close(nss_fd_);
633 nss_fd_ = NULL; 681 nss_fd_ = NULL;
634 } 682 }
635 683
636 // Reset object state 684 // Reset object state
637 transport_send_busy_ = false; 685 transport_send_busy_ = false;
638 transport_recv_busy_ = false; 686 transport_recv_busy_ = false;
639 user_connect_callback_ = NULL; 687 old_user_connect_callback_ = NULL;
688 user_connect_callback_.Reset();
640 user_read_callback_ = NULL; 689 user_read_callback_ = NULL;
641 user_write_callback_ = NULL; 690 user_write_callback_ = NULL;
642 user_read_buf_ = NULL; 691 user_read_buf_ = NULL;
643 user_read_buf_len_ = 0; 692 user_read_buf_len_ = 0;
644 user_write_buf_ = NULL; 693 user_write_buf_ = NULL;
645 user_write_buf_len_ = 0; 694 user_write_buf_len_ = 0;
646 server_cert_ = NULL; 695 server_cert_ = NULL;
647 if (server_cert_nss_) { 696 if (server_cert_nss_) {
648 CERT_DestroyCertificate(server_cert_nss_); 697 CERT_DestroyCertificate(server_cert_nss_);
649 server_cert_nss_ = NULL; 698 server_cert_nss_ = NULL;
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 NOTREACHED(); 800 NOTREACHED();
752 return base::TimeDelta::FromMicroseconds(-1); 801 return base::TimeDelta::FromMicroseconds(-1);
753 } 802 }
754 803
755 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len, 804 int SSLClientSocketNSS::Read(IOBuffer* buf, int buf_len,
756 OldCompletionCallback* callback) { 805 OldCompletionCallback* callback) {
757 EnterFunction(buf_len); 806 EnterFunction(buf_len);
758 DCHECK(completed_handshake_); 807 DCHECK(completed_handshake_);
759 DCHECK(next_handshake_state_ == STATE_NONE); 808 DCHECK(next_handshake_state_ == STATE_NONE);
760 DCHECK(!user_read_callback_); 809 DCHECK(!user_read_callback_);
761 DCHECK(!user_connect_callback_); 810 DCHECK(!old_user_connect_callback_);
762 DCHECK(!user_read_buf_); 811 DCHECK(!user_read_buf_);
763 DCHECK(nss_bufs_); 812 DCHECK(nss_bufs_);
764 813
765 user_read_buf_ = buf; 814 user_read_buf_ = buf;
766 user_read_buf_len_ = buf_len; 815 user_read_buf_len_ = buf_len;
767 816
768 int rv = DoReadLoop(OK); 817 int rv = DoReadLoop(OK);
769 818
770 if (rv == ERR_IO_PENDING) { 819 if (rv == ERR_IO_PENDING) {
771 user_read_callback_ = callback; 820 user_read_callback_ = callback;
772 } else { 821 } else {
773 user_read_buf_ = NULL; 822 user_read_buf_ = NULL;
774 user_read_buf_len_ = 0; 823 user_read_buf_len_ = 0;
775 } 824 }
776 LeaveFunction(rv); 825 LeaveFunction(rv);
777 return rv; 826 return rv;
778 } 827 }
779 828
780 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len, 829 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len,
781 OldCompletionCallback* callback) { 830 OldCompletionCallback* callback) {
782 EnterFunction(buf_len); 831 EnterFunction(buf_len);
783 DCHECK(completed_handshake_); 832 DCHECK(completed_handshake_);
784 DCHECK(next_handshake_state_ == STATE_NONE); 833 DCHECK(next_handshake_state_ == STATE_NONE);
785 DCHECK(!user_write_callback_); 834 DCHECK(!user_write_callback_);
786 DCHECK(!user_connect_callback_); 835 DCHECK(!old_user_connect_callback_);
787 DCHECK(!user_write_buf_); 836 DCHECK(!user_write_buf_);
788 DCHECK(nss_bufs_); 837 DCHECK(nss_bufs_);
789 838
790 user_write_buf_ = buf; 839 user_write_buf_ = buf;
791 user_write_buf_len_ = buf_len; 840 user_write_buf_len_ = buf_len;
792 841
793 if (corked_) { 842 if (corked_) {
794 corked_ = false; 843 corked_ = false;
795 uncork_timer_.Reset(); 844 uncork_timer_.Reset();
796 } 845 }
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 // As part of Connect(), the SSLClientSocketNSS object performs an SSL 1221 // As part of Connect(), the SSLClientSocketNSS object performs an SSL
1173 // handshake. This requires network IO, which in turn calls 1222 // handshake. This requires network IO, which in turn calls
1174 // BufferRecvComplete() with a non-zero byte count. This byte count eventually 1223 // BufferRecvComplete() with a non-zero byte count. This byte count eventually
1175 // winds its way through the state machine and ends up being passed to the 1224 // winds its way through the state machine and ends up being passed to the
1176 // callback. For Read() and Write(), that's what we want. But for Connect(), 1225 // callback. For Read() and Write(), that's what we want. But for Connect(),
1177 // the caller expects OK (i.e. 0) for success. 1226 // the caller expects OK (i.e. 0) for success.
1178 // 1227 //
1179 void SSLClientSocketNSS::DoConnectCallback(int rv) { 1228 void SSLClientSocketNSS::DoConnectCallback(int rv) {
1180 EnterFunction(rv); 1229 EnterFunction(rv);
1181 DCHECK_NE(rv, ERR_IO_PENDING); 1230 DCHECK_NE(rv, ERR_IO_PENDING);
1182 DCHECK(user_connect_callback_); 1231 DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null());
1183 1232
1184 OldCompletionCallback* c = user_connect_callback_; 1233 if (old_user_connect_callback_) {
1185 user_connect_callback_ = NULL; 1234 OldCompletionCallback* c = old_user_connect_callback_;
1186 c->Run(rv > OK ? OK : rv); 1235 old_user_connect_callback_ = NULL;
1236 c->Run(rv > OK ? OK : rv);
1237 } else {
1238 CompletionCallback c = user_connect_callback_;
1239 user_connect_callback_.Reset();
1240 c.Run(rv > OK ? OK : rv);
1241 }
1187 LeaveFunction(""); 1242 LeaveFunction("");
1188 } 1243 }
1189 1244
1190 void SSLClientSocketNSS::OnHandshakeIOComplete(int result) { 1245 void SSLClientSocketNSS::OnHandshakeIOComplete(int result) {
1191 EnterFunction(result); 1246 EnterFunction(result);
1192 int rv = DoHandshakeLoop(result); 1247 int rv = DoHandshakeLoop(result);
1193 if (rv != ERR_IO_PENDING) { 1248 if (rv != ERR_IO_PENDING) {
1194 net_log_.EndEventWithNetErrorCode(net::NetLog::TYPE_SSL_CONNECT, rv); 1249 net_log_.EndEventWithNetErrorCode(net::NetLog::TYPE_SSL_CONNECT, rv);
1195 DoConnectCallback(rv); 1250 DoConnectCallback(rv);
1196 } 1251 }
(...skipping 1421 matching lines...) Expand 10 before | Expand all | Expand 10 after
2618 valid_thread_id_ = base::PlatformThread::CurrentId(); 2673 valid_thread_id_ = base::PlatformThread::CurrentId();
2619 } 2674 }
2620 2675
2621 bool SSLClientSocketNSS::CalledOnValidThread() const { 2676 bool SSLClientSocketNSS::CalledOnValidThread() const {
2622 EnsureThreadIdAssigned(); 2677 EnsureThreadIdAssigned();
2623 base::AutoLock auto_lock(lock_); 2678 base::AutoLock auto_lock(lock_);
2624 return valid_thread_id_ == base::PlatformThread::CurrentId(); 2679 return valid_thread_id_ == base::PlatformThread::CurrentId();
2625 } 2680 }
2626 2681
2627 } // namespace net 2682 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_nss.h ('k') | net/socket/ssl_client_socket_openssl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698