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

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

Issue 8831001: 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
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 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 transport_recv_busy_(false), 441 transport_recv_busy_(false),
442 corked_(false), 442 corked_(false),
443 ALLOW_THIS_IN_INITIALIZER_LIST(handshake_io_callback_( 443 ALLOW_THIS_IN_INITIALIZER_LIST(handshake_io_callback_(
444 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete, 444 base::Bind(&SSLClientSocketNSS::OnHandshakeIOComplete,
445 base::Unretained(this)))), 445 base::Unretained(this)))),
446 transport_(transport_socket), 446 transport_(transport_socket),
447 host_and_port_(host_and_port), 447 host_and_port_(host_and_port),
448 ssl_config_(ssl_config), 448 ssl_config_(ssl_config),
449 old_user_connect_callback_(NULL), 449 old_user_connect_callback_(NULL),
450 old_user_read_callback_(NULL), 450 old_user_read_callback_(NULL),
451 user_write_callback_(NULL), 451 old_user_write_callback_(NULL),
452 user_read_buf_len_(0), 452 user_read_buf_len_(0),
453 user_write_buf_len_(0), 453 user_write_buf_len_(0),
454 server_cert_nss_(NULL), 454 server_cert_nss_(NULL),
455 server_cert_verify_result_(NULL), 455 server_cert_verify_result_(NULL),
456 ssl_connection_status_(0), 456 ssl_connection_status_(0),
457 client_auth_cert_needed_(false), 457 client_auth_cert_needed_(false),
458 cert_verifier_(context.cert_verifier), 458 cert_verifier_(context.cert_verifier),
459 ob_cert_xtn_negotiated_(false), 459 ob_cert_xtn_negotiated_(false),
460 origin_bound_cert_service_(context.origin_bound_cert_service), 460 origin_bound_cert_service_(context.origin_bound_cert_service),
461 ob_cert_request_handle_(NULL), 461 ob_cert_request_handle_(NULL),
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 *proto = next_proto_; 570 *proto = next_proto_;
571 *server_protos = server_protos_; 571 *server_protos = server_protos_;
572 return next_proto_status_; 572 return next_proto_status_;
573 } 573 }
574 574
575 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) { 575 int SSLClientSocketNSS::Connect(OldCompletionCallback* callback) {
576 EnterFunction(""); 576 EnterFunction("");
577 DCHECK(transport_.get()); 577 DCHECK(transport_.get());
578 DCHECK(next_handshake_state_ == STATE_NONE); 578 DCHECK(next_handshake_state_ == STATE_NONE);
579 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); 579 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
580 DCHECK(!user_write_callback_); 580 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null());
581 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 581 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
582 DCHECK(!user_read_buf_); 582 DCHECK(!user_read_buf_);
583 DCHECK(!user_write_buf_); 583 DCHECK(!user_write_buf_);
584 584
585 EnsureThreadIdAssigned(); 585 EnsureThreadIdAssigned();
586 586
587 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 587 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
588 588
589 int rv = Init(); 589 int rv = Init();
590 if (rv != OK) { 590 if (rv != OK) {
(...skipping 27 matching lines...) Expand all
618 } 618 }
619 619
620 LeaveFunction(""); 620 LeaveFunction("");
621 return rv > OK ? OK : rv; 621 return rv > OK ? OK : rv;
622 } 622 }
623 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) { 623 int SSLClientSocketNSS::Connect(const CompletionCallback& callback) {
624 EnterFunction(""); 624 EnterFunction("");
625 DCHECK(transport_.get()); 625 DCHECK(transport_.get());
626 DCHECK(next_handshake_state_ == STATE_NONE); 626 DCHECK(next_handshake_state_ == STATE_NONE);
627 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); 627 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
628 DCHECK(!user_write_callback_); 628 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null());
629 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 629 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
630 DCHECK(!user_read_buf_); 630 DCHECK(!user_read_buf_);
631 DCHECK(!user_write_buf_); 631 DCHECK(!user_write_buf_);
632 632
633 EnsureThreadIdAssigned(); 633 EnsureThreadIdAssigned();
634 634
635 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 635 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
636 636
637 int rv = Init(); 637 int rv = Init();
638 if (rv != OK) { 638 if (rv != OK) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 nss_fd_ = NULL; 690 nss_fd_ = NULL;
691 } 691 }
692 692
693 // Reset object state 693 // Reset object state
694 transport_send_busy_ = false; 694 transport_send_busy_ = false;
695 transport_recv_busy_ = false; 695 transport_recv_busy_ = false;
696 old_user_connect_callback_ = NULL; 696 old_user_connect_callback_ = NULL;
697 user_connect_callback_.Reset(); 697 user_connect_callback_.Reset();
698 old_user_read_callback_ = NULL; 698 old_user_read_callback_ = NULL;
699 user_read_callback_.Reset(); 699 user_read_callback_.Reset();
700 user_write_callback_ = NULL; 700 old_user_write_callback_ = NULL;
701 user_write_callback_.Reset();
701 user_read_buf_ = NULL; 702 user_read_buf_ = NULL;
702 user_read_buf_len_ = 0; 703 user_read_buf_len_ = 0;
703 user_write_buf_ = NULL; 704 user_write_buf_ = NULL;
704 user_write_buf_len_ = 0; 705 user_write_buf_len_ = 0;
705 server_cert_ = NULL; 706 server_cert_ = NULL;
706 if (server_cert_nss_) { 707 if (server_cert_nss_) {
707 CERT_DestroyCertificate(server_cert_nss_); 708 CERT_DestroyCertificate(server_cert_nss_);
708 server_cert_nss_ = NULL; 709 server_cert_nss_ = NULL;
709 } 710 }
710 local_server_cert_verify_result_.Reset(); 711 local_server_cert_verify_result_.Reset();
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 } 859 }
859 LeaveFunction(rv); 860 LeaveFunction(rv);
860 return rv; 861 return rv;
861 } 862 }
862 863
863 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len, 864 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len,
864 OldCompletionCallback* callback) { 865 OldCompletionCallback* callback) {
865 EnterFunction(buf_len); 866 EnterFunction(buf_len);
866 DCHECK(completed_handshake_); 867 DCHECK(completed_handshake_);
867 DCHECK(next_handshake_state_ == STATE_NONE); 868 DCHECK(next_handshake_state_ == STATE_NONE);
868 DCHECK(!user_write_callback_); 869 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null());
869 DCHECK(!old_user_connect_callback_); 870 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
870 DCHECK(!user_write_buf_); 871 DCHECK(!user_write_buf_);
871 DCHECK(nss_bufs_); 872 DCHECK(nss_bufs_);
872 873
874 user_write_buf_ = buf;
875 user_write_buf_len_ = buf_len;
876
877 if (corked_) {
878 corked_ = false;
879 uncork_timer_.Reset();
880 }
881 int rv = DoWriteLoop(OK);
882
883 if (rv == ERR_IO_PENDING) {
884 old_user_write_callback_ = callback;
885 } else {
886 user_write_buf_ = NULL;
887 user_write_buf_len_ = 0;
888 }
889 LeaveFunction(rv);
890 return rv;
891 }
892 int SSLClientSocketNSS::Write(IOBuffer* buf, int buf_len,
893 const CompletionCallback& callback) {
894 EnterFunction(buf_len);
895 DCHECK(completed_handshake_);
896 DCHECK(next_handshake_state_ == STATE_NONE);
897 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null());
898 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
899 DCHECK(!user_write_buf_);
900 DCHECK(nss_bufs_);
901
873 user_write_buf_ = buf; 902 user_write_buf_ = buf;
874 user_write_buf_len_ = buf_len; 903 user_write_buf_len_ = buf_len;
875 904
876 if (corked_) { 905 if (corked_) {
877 corked_ = false; 906 corked_ = false;
878 uncork_timer_.Reset(); 907 uncork_timer_.Reset();
879 } 908 }
880 int rv = DoWriteLoop(OK); 909 int rv = DoWriteLoop(OK);
881 910
882 if (rv == ERR_IO_PENDING) { 911 if (rv == ERR_IO_PENDING) {
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
1241 user_read_buf_ = NULL; 1270 user_read_buf_ = NULL;
1242 user_read_buf_len_ = 0; 1271 user_read_buf_len_ = 0;
1243 c.Run(rv); 1272 c.Run(rv);
1244 } 1273 }
1245 LeaveFunction(""); 1274 LeaveFunction("");
1246 } 1275 }
1247 1276
1248 void SSLClientSocketNSS::DoWriteCallback(int rv) { 1277 void SSLClientSocketNSS::DoWriteCallback(int rv) {
1249 EnterFunction(rv); 1278 EnterFunction(rv);
1250 DCHECK(rv != ERR_IO_PENDING); 1279 DCHECK(rv != ERR_IO_PENDING);
1251 DCHECK(user_write_callback_); 1280 DCHECK(old_user_write_callback_ || !user_write_callback_.is_null());
1252 1281
1253 // Since Run may result in Write being called, clear |user_write_callback_| 1282 // Since Run may result in Write being called, clear |user_write_callback_|
1254 // up front. 1283 // up front.
1255 OldCompletionCallback* c = user_write_callback_; 1284 if (old_user_write_callback_) {
1256 user_write_callback_ = NULL; 1285 OldCompletionCallback* c = old_user_write_callback_;
1257 user_write_buf_ = NULL; 1286 old_user_write_callback_ = NULL;
1258 user_write_buf_len_ = 0; 1287 user_write_buf_ = NULL;
1259 c->Run(rv); 1288 user_write_buf_len_ = 0;
1289 c->Run(rv);
1290 } else {
1291 CompletionCallback c = user_write_callback_;
1292 user_write_callback_.Reset();
1293 user_write_buf_ = NULL;
1294 user_write_buf_len_ = 0;
1295 c.Run(rv);
1296 }
1260 LeaveFunction(""); 1297 LeaveFunction("");
1261 } 1298 }
1262 1299
1263 // As part of Connect(), the SSLClientSocketNSS object performs an SSL 1300 // As part of Connect(), the SSLClientSocketNSS object performs an SSL
1264 // handshake. This requires network IO, which in turn calls 1301 // handshake. This requires network IO, which in turn calls
1265 // BufferRecvComplete() with a non-zero byte count. This byte count eventually 1302 // BufferRecvComplete() with a non-zero byte count. This byte count eventually
1266 // winds its way through the state machine and ends up being passed to the 1303 // winds its way through the state machine and ends up being passed to the
1267 // callback. For Read() and Write(), that's what we want. But for Connect(), 1304 // callback. For Read() and Write(), that's what we want. But for Connect(),
1268 // the caller expects OK (i.e. 0) for success. 1305 // the caller expects OK (i.e. 0) for success.
1269 // 1306 //
(...skipping 1485 matching lines...) Expand 10 before | Expand all | Expand 10 after
2755 valid_thread_id_ = base::PlatformThread::CurrentId(); 2792 valid_thread_id_ = base::PlatformThread::CurrentId();
2756 } 2793 }
2757 2794
2758 bool SSLClientSocketNSS::CalledOnValidThread() const { 2795 bool SSLClientSocketNSS::CalledOnValidThread() const {
2759 EnsureThreadIdAssigned(); 2796 EnsureThreadIdAssigned();
2760 base::AutoLock auto_lock(lock_); 2797 base::AutoLock auto_lock(lock_);
2761 return valid_thread_id_ == base::PlatformThread::CurrentId(); 2798 return valid_thread_id_ == base::PlatformThread::CurrentId();
2762 } 2799 }
2763 2800
2764 } // namespace net 2801 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698