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

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

Issue 8889036: Revert 113699 - base::Bind: Convert Socket::Write. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: 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 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 old_user_connect_callback_(NULL), 448 old_user_connect_callback_(NULL),
449 old_user_read_callback_(NULL), 449 old_user_read_callback_(NULL),
450 old_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),
459 origin_bound_cert_service_(context.origin_bound_cert_service), 459 origin_bound_cert_service_(context.origin_bound_cert_service),
460 ob_cert_request_handle_(NULL), 460 ob_cert_request_handle_(NULL),
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 *proto = next_proto_; 568 *proto = next_proto_;
569 *server_protos = server_protos_; 569 *server_protos = server_protos_;
570 return next_proto_status_; 570 return next_proto_status_;
571 } 571 }
572 572
573 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) { 573 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) {
574 EnterFunction(""); 574 EnterFunction("");
575 DCHECK(transport_.get()); 575 DCHECK(transport_.get());
576 DCHECK(next_handshake_state_ == STATE_NONE); 576 DCHECK(next_handshake_state_ == STATE_NONE);
577 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); 577 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
578 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null()); 578 DCHECK(!user_write_callback_);
579 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 579 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
580 DCHECK(!user_read_buf_); 580 DCHECK(!user_read_buf_);
581 DCHECK(!user_write_buf_); 581 DCHECK(!user_write_buf_);
582 582
583 EnsureThreadIdAssigned(); 583 EnsureThreadIdAssigned();
584 584
585 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 585 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
586 586
587 int rv = Init(); 587 int rv = Init();
588 if (rv != OK) { 588 if (rv != OK) {
(...skipping 27 matching lines...) Expand all
616 } 616 }
617 617
618 LeaveFunction(""); 618 LeaveFunction("");
619 return rv > OK ? OK : rv; 619 return rv > OK ? OK : rv;
620 } 620 }
621 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) { 621 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) {
622 EnterFunction(""); 622 EnterFunction("");
623 DCHECK(transport_.get()); 623 DCHECK(transport_.get());
624 DCHECK(next_handshake_state_ == STATE_NONE); 624 DCHECK(next_handshake_state_ == STATE_NONE);
625 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); 625 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
626 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null()); 626 DCHECK(!user_write_callback_);
627 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 627 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
628 DCHECK(!user_read_buf_); 628 DCHECK(!user_read_buf_);
629 DCHECK(!user_write_buf_); 629 DCHECK(!user_write_buf_);
630 630
631 EnsureThreadIdAssigned(); 631 EnsureThreadIdAssigned();
632 632
633 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 633 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
634 634
635 int rv = Init(); 635 int rv = Init();
636 if (rv != OK) { 636 if (rv != OK) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 nss_fd_ = NULL; 688 nss_fd_ = NULL;
689 } 689 }
690 690
691 // Reset object state 691 // Reset object state
692 transport_send_busy_ = false; 692 transport_send_busy_ = false;
693 transport_recv_busy_ = false; 693 transport_recv_busy_ = false;
694 old_user_connect_callback_ = NULL; 694 old_user_connect_callback_ = NULL;
695 user_connect_callback_.Reset(); 695 user_connect_callback_.Reset();
696 old_user_read_callback_ = NULL; 696 old_user_read_callback_ = NULL;
697 user_read_callback_.Reset(); 697 user_read_callback_.Reset();
698 old_user_write_callback_ = NULL; 698 user_write_callback_ = NULL;
699 user_write_callback_.Reset();
700 user_read_buf_ = NULL; 699 user_read_buf_ = NULL;
701 user_read_buf_len_ = 0; 700 user_read_buf_len_ = 0;
702 user_write_buf_ = NULL; 701 user_write_buf_ = NULL;
703 user_write_buf_len_ = 0; 702 user_write_buf_len_ = 0;
704 server_cert_ = NULL; 703 server_cert_ = NULL;
705 if (server_cert_nss_) { 704 if (server_cert_nss_) {
706 CERT_DestroyCertificate(server_cert_nss_); 705 CERT_DestroyCertificate(server_cert_nss_);
707 server_cert_nss_ = NULL; 706 server_cert_nss_ = NULL;
708 } 707 }
709 local_server_cert_verify_result_.Reset(); 708 local_server_cert_verify_result_.Reset();
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 } 856 }
858 LeaveFunction(rv); 857 LeaveFunction(rv);
859 return rv; 858 return rv;
860 } 859 }
861 860
862 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len, 861 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len,
863 OldCompletionCallback* callback) { 862 OldCompletionCallback* callback) {
864 EnterFunction(buf_len); 863 EnterFunction(buf_len);
865 DCHECK(completed_handshake_); 864 DCHECK(completed_handshake_);
866 DCHECK(next_handshake_state_ == STATE_NONE); 865 DCHECK(next_handshake_state_ == STATE_NONE);
867 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null()); 866 DCHECK(!user_write_callback_);
868 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 867 DCHECK(!old_user_connect_callback_);
869 DCHECK(!user_write_buf_); 868 DCHECK(!user_write_buf_);
870 DCHECK(nss_bufs_); 869 DCHECK(nss_bufs_);
871 870
872 user_write_buf_ = buf; 871 user_write_buf_ = buf;
873 user_write_buf_len_ = buf_len; 872 user_write_buf_len_ = buf_len;
874 873
875 if (corked_) { 874 if (corked_) {
876 corked_ = false; 875 corked_ = false;
877 uncork_timer_.Reset(); 876 uncork_timer_.Reset();
878 } 877 }
879 int rv = DoWriteLoop(OK); 878 int rv = DoWriteLoop(OK);
880 879
881 if (rv == ERR_IO_PENDING) { 880 if (rv == ERR_IO_PENDING) {
882 old_user_write_callback_ = callback;
883 } else {
884 user_write_buf_ = NULL;
885 user_write_buf_len_ = 0;
886 }
887 LeaveFunction(rv);
888 return rv;
889 }
890 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len,
891 const CompletionCallback& callback) {
892 EnterFunction(buf_len);
893 DCHECK(completed_handshake_);
894 DCHECK(next_handshake_state_ == STATE_NONE);
895 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null());
896 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
897 DCHECK(!user_write_buf_);
898 DCHECK(nss_bufs_);
899
900 user_write_buf_ = buf;
901 user_write_buf_len_ = buf_len;
902
903 if (corked_) {
904 corked_ = false;
905 uncork_timer_.Reset();
906 }
907 int rv = DoWriteLoop(OK);
908
909 if (rv == ERR_IO_PENDING) {
910 user_write_callback_ = callback; 881 user_write_callback_ = callback;
911 } else { 882 } else {
912 user_write_buf_ = NULL; 883 user_write_buf_ = NULL;
913 user_write_buf_len_ = 0; 884 user_write_buf_len_ = 0;
914 } 885 }
915 LeaveFunction(rv); 886 LeaveFunction(rv);
916 return rv; 887 return rv;
917 } 888 }
918 889
919 bool SSLClientSocketNSS::SetReceiveBufferSize(int32 size) { 890 bool SSLClientSocketNSS::SetReceiveBufferSize(int32 size) {
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 user_read_buf_ = NULL; 1239 user_read_buf_ = NULL;
1269 user_read_buf_len_ = 0; 1240 user_read_buf_len_ = 0;
1270 c.Run(rv); 1241 c.Run(rv);
1271 } 1242 }
1272 LeaveFunction(""); 1243 LeaveFunction("");
1273 } 1244 }
1274 1245
1275 void SSLClientSocketNSS::DoWriteCallback(int rv) { 1246 void SSLClientSocketNSS::DoWriteCallback(int rv) {
1276 EnterFunction(rv); 1247 EnterFunction(rv);
1277 DCHECK(rv != ERR_IO_PENDING); 1248 DCHECK(rv != ERR_IO_PENDING);
1278 DCHECK(old_user_write_callback_ || !user_write_callback_.is_null()); 1249 DCHECK(user_write_callback_);
1279 1250
1280 // Since Run may result in Write being called, clear |user_write_callback_| 1251 // Since Run may result in Write being called, clear |user_write_callback_|
1281 // up front. 1252 // up front.
1282 if (old_user_write_callback_) { 1253 OldCompletionCallback* c = user_write_callback_;
1283 OldCompletionCallback* c = old_user_write_callback_; 1254 user_write_callback_ = NULL;
1284 old_user_write_callback_ = NULL; 1255 user_write_buf_ = NULL;
1285 user_write_buf_ = NULL; 1256 user_write_buf_len_ = 0;
1286 user_write_buf_len_ = 0; 1257 c->Run(rv);
1287 c->Run(rv);
1288 } else {
1289 CompletionCallback c = user_write_callback_;
1290 user_write_callback_.Reset();
1291 user_write_buf_ = NULL;
1292 user_write_buf_len_ = 0;
1293 c.Run(rv);
1294 }
1295 LeaveFunction(""); 1258 LeaveFunction("");
1296 } 1259 }
1297 1260
1298 // As part of Connect(), the SSLClientSocketNSS object performs an SSL 1261 // As part of Connect(), the SSLClientSocketNSS object performs an SSL
1299 // handshake. This requires network IO, which in turn calls 1262 // handshake. This requires network IO, which in turn calls
1300 // BufferRecvComplete() with a non-zero byte count. This byte count eventually 1263 // BufferRecvComplete() with a non-zero byte count. This byte count eventually
1301 // winds its way through the state machine and ends up being passed to the 1264 // winds its way through the state machine and ends up being passed to the
1302 // callback. For Read() and Write(), that's what we want. But for Connect(), 1265 // callback. For Read() and Write(), that's what we want. But for Connect(),
1303 // the caller expects OK (i.e. 0) for success. 1266 // the caller expects OK (i.e. 0) for success.
1304 // 1267 //
(...skipping 1489 matching lines...) Expand 10 before | Expand all | Expand 10 after
2794 valid_thread_id_ = base::PlatformThread::CurrentId(); 2757 valid_thread_id_ = base::PlatformThread::CurrentId();
2795 } 2758 }
2796 2759
2797 bool SSLClientSocketNSS::CalledOnValidThread() const { 2760 bool SSLClientSocketNSS::CalledOnValidThread() const {
2798 EnsureThreadIdAssigned(); 2761 EnsureThreadIdAssigned();
2799 base::AutoLock auto_lock(lock_); 2762 base::AutoLock auto_lock(lock_);
2800 return valid_thread_id_ == base::PlatformThread::CurrentId(); 2763 return valid_thread_id_ == base::PlatformThread::CurrentId();
2801 } 2764 }
2802 2765
2803 } // namespace net 2766 } // 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