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

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