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

Side by Side Diff: net/socket/ssl_client_socket_mac.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_mac.h ('k') | net/socket/ssl_client_socket_nss.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 #include "net/socket/ssl_client_socket_mac.h" 5 #include "net/socket/ssl_client_socket_mac.h"
6 6
7 #include <CoreServices/CoreServices.h> 7 #include <CoreServices/CoreServices.h>
8 #include <netdb.h> 8 #include <netdb.h>
9 #include <sys/socket.h> 9 #include <sys/socket.h>
10 #include <sys/types.h> 10 #include <sys/types.h>
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 const HostPortPair& host_and_port, 524 const HostPortPair& host_and_port,
525 const SSLConfig& ssl_config, 525 const SSLConfig& ssl_config,
526 const SSLClientSocketContext& context) 526 const SSLClientSocketContext& context)
527 : transport_read_callback_(this, 527 : transport_read_callback_(this,
528 &SSLClientSocketMac::OnTransportReadComplete), 528 &SSLClientSocketMac::OnTransportReadComplete),
529 transport_write_callback_(this, 529 transport_write_callback_(this,
530 &SSLClientSocketMac::OnTransportWriteComplete), 530 &SSLClientSocketMac::OnTransportWriteComplete),
531 transport_(transport_socket), 531 transport_(transport_socket),
532 host_and_port_(host_and_port), 532 host_and_port_(host_and_port),
533 ssl_config_(ssl_config), 533 ssl_config_(ssl_config),
534 user_connect_callback_(NULL), 534 old_user_connect_callback_(NULL),
535 user_read_callback_(NULL), 535 user_read_callback_(NULL),
536 user_write_callback_(NULL), 536 user_write_callback_(NULL),
537 user_read_buf_len_(0), 537 user_read_buf_len_(0),
538 user_write_buf_len_(0), 538 user_write_buf_len_(0),
539 next_handshake_state_(STATE_NONE), 539 next_handshake_state_(STATE_NONE),
540 cert_verifier_(context.cert_verifier), 540 cert_verifier_(context.cert_verifier),
541 renegotiating_(false), 541 renegotiating_(false),
542 client_cert_requested_(false), 542 client_cert_requested_(false),
543 ssl_context_(NULL), 543 ssl_context_(NULL),
544 bytes_read_after_renegotiation_(0), 544 bytes_read_after_renegotiation_(0),
545 pending_send_error_(OK), 545 pending_send_error_(OK),
546 net_log_(transport_socket->socket()->NetLog()) { 546 net_log_(transport_socket->socket()->NetLog()) {
547 // Sort the list of ciphers to disable, since disabling ciphers on Mac 547 // Sort the list of ciphers to disable, since disabling ciphers on Mac
548 // requires subtracting from a list of enabled ciphers while maintaining 548 // requires subtracting from a list of enabled ciphers while maintaining
549 // ordering, as opposed to merely needing to iterate them as with NSS. 549 // ordering, as opposed to merely needing to iterate them as with NSS.
550 sort(ssl_config_.disabled_cipher_suites.begin(), 550 sort(ssl_config_.disabled_cipher_suites.begin(),
551 ssl_config_.disabled_cipher_suites.end()); 551 ssl_config_.disabled_cipher_suites.end());
552 } 552 }
553 553
554 SSLClientSocketMac::~SSLClientSocketMac() { 554 SSLClientSocketMac::~SSLClientSocketMac() {
555 Disconnect(); 555 Disconnect();
556 } 556 }
557 557
558 int SSLClientSocketMac::Connect(OldCompletionCallback* callback) { 558 int SSLClientSocketMac::Connect(OldCompletionCallback* callback) {
559 DCHECK(transport_.get()); 559 DCHECK(transport_.get());
560 DCHECK(next_handshake_state_ == STATE_NONE); 560 DCHECK(next_handshake_state_ == STATE_NONE);
561 DCHECK(!user_connect_callback_); 561 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
562 562
563 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 563 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
564 564
565 int rv = InitializeSSLContext();
566 if (rv != OK) {
567 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
568 return rv;
569 }
570
571 next_handshake_state_ = STATE_HANDSHAKE;
572 rv = DoHandshakeLoop(OK);
573 if (rv == ERR_IO_PENDING) {
574 old_user_connect_callback_ = callback;
575 } else {
576 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
577 }
578 return rv;
579 }
580 int SSLClientSocketMac::Connect(const CompletionCallback& callback) {
581 DCHECK(transport_.get());
582 DCHECK(next_handshake_state_ == STATE_NONE);
583 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
584
585 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
586
565 int rv = InitializeSSLContext(); 587 int rv = InitializeSSLContext();
566 if (rv != OK) { 588 if (rv != OK) {
567 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 589 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
568 return rv; 590 return rv;
569 } 591 }
570 592
571 next_handshake_state_ = STATE_HANDSHAKE; 593 next_handshake_state_ = STATE_HANDSHAKE;
572 rv = DoHandshakeLoop(OK); 594 rv = DoHandshakeLoop(OK);
573 if (rv == ERR_IO_PENDING) { 595 if (rv == ERR_IO_PENDING) {
574 user_connect_callback_ = callback; 596 user_connect_callback_ = callback;
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 // own copy. 909 // own copy.
888 status = SSLSetPeerID(ssl_context_, peer_id.data(), peer_id.length()); 910 status = SSLSetPeerID(ssl_context_, peer_id.data(), peer_id.length());
889 if (status) 911 if (status)
890 return NetErrorFromOSStatus(status); 912 return NetErrorFromOSStatus(status);
891 913
892 return OK; 914 return OK;
893 } 915 }
894 916
895 void SSLClientSocketMac::DoConnectCallback(int rv) { 917 void SSLClientSocketMac::DoConnectCallback(int rv) {
896 DCHECK(rv != ERR_IO_PENDING); 918 DCHECK(rv != ERR_IO_PENDING);
897 DCHECK(user_connect_callback_); 919 DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null());
898 920
899 OldCompletionCallback* c = user_connect_callback_; 921 if (old_user_connect_callback_) {
900 user_connect_callback_ = NULL; 922 OldCompletionCallback* c = old_user_connect_callback_;
901 c->Run(rv > OK ? OK : rv); 923 old_user_connect_callback_ = NULL;
924 c->Run(rv > OK ? OK : rv);
925 } else {
926 CompletionCallback c = user_connect_callback_;
927 user_connect_callback_.Reset();
928 c.Run(rv > OK ? OK : rv);
929 }
902 } 930 }
903 931
904 void SSLClientSocketMac::DoReadCallback(int rv) { 932 void SSLClientSocketMac::DoReadCallback(int rv) {
905 DCHECK(rv != ERR_IO_PENDING); 933 DCHECK(rv != ERR_IO_PENDING);
906 DCHECK(user_read_callback_); 934 DCHECK(user_read_callback_);
907 935
908 // Since Run may result in Read being called, clear user_read_callback_ up 936 // Since Run may result in Read being called, clear user_read_callback_ up
909 // front. 937 // front.
910 OldCompletionCallback* c = user_read_callback_; 938 OldCompletionCallback* c = user_read_callback_;
911 user_read_callback_ = NULL; 939 user_read_callback_ = NULL;
(...skipping 15 matching lines...) Expand all
927 c->Run(rv); 955 c->Run(rv);
928 } 956 }
929 957
930 void SSLClientSocketMac::OnHandshakeIOComplete(int result) { 958 void SSLClientSocketMac::OnHandshakeIOComplete(int result) {
931 int rv = DoHandshakeLoop(result); 959 int rv = DoHandshakeLoop(result);
932 if (rv != ERR_IO_PENDING) { 960 if (rv != ERR_IO_PENDING) {
933 // If there is no connect callback available to call, we are 961 // If there is no connect callback available to call, we are
934 // renegotiating (which occurs because we are in the middle of a Read 962 // renegotiating (which occurs because we are in the middle of a Read
935 // when the renegotiation process starts). So we complete the Read 963 // when the renegotiation process starts). So we complete the Read
936 // here. 964 // here.
937 if (!user_connect_callback_) { 965 if (!old_user_connect_callback_ && user_connect_callback_.is_null()) {
938 DoReadCallback(rv); 966 DoReadCallback(rv);
939 return; 967 return;
940 } 968 }
941 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 969 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
942 DoConnectCallback(rv); 970 DoConnectCallback(rv);
943 } 971 }
944 } 972 }
945 973
946 void SSLClientSocketMac::OnTransportReadComplete(int result) { 974 void SSLClientSocketMac::OnTransportReadComplete(int result) {
947 if (result > 0) { 975 if (result > 0) {
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 // The user had a read in progress, which was interrupted by the 1293 // The user had a read in progress, which was interrupted by the
1266 // renegotiation. Return the application data that was processed after the 1294 // renegotiation. Return the application data that was processed after the
1267 // handshake completed. 1295 // handshake completed.
1268 next_handshake_state_ = STATE_COMPLETED_HANDSHAKE; 1296 next_handshake_state_ = STATE_COMPLETED_HANDSHAKE;
1269 if (result != OK) 1297 if (result != OK)
1270 return result; 1298 return result;
1271 return bytes_read_after_renegotiation_; 1299 return bytes_read_after_renegotiation_;
1272 } 1300 }
1273 1301
1274 void SSLClientSocketMac::DidCompleteRenegotiation() { 1302 void SSLClientSocketMac::DidCompleteRenegotiation() {
1275 DCHECK(!user_connect_callback_); 1303 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
1276 renegotiating_ = false; 1304 renegotiating_ = false;
1277 next_handshake_state_ = STATE_COMPLETED_RENEGOTIATION; 1305 next_handshake_state_ = STATE_COMPLETED_RENEGOTIATION;
1278 } 1306 }
1279 1307
1280 int SSLClientSocketMac::DidCompleteHandshake() { 1308 int SSLClientSocketMac::DidCompleteHandshake() {
1281 DCHECK(!server_cert_ || renegotiating_); 1309 DCHECK(!server_cert_ || renegotiating_);
1282 VLOG(1) << "Handshake completed, next verify cert"; 1310 VLOG(1) << "Handshake completed, next verify cert";
1283 1311
1284 scoped_refptr<X509Certificate> new_server_cert( 1312 scoped_refptr<X509Certificate> new_server_cert(
1285 GetServerCert(ssl_context_)); 1313 GetServerCert(ssl_context_));
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 if (rv < 0 && rv != ERR_IO_PENDING) { 1455 if (rv < 0 && rv != ERR_IO_PENDING) {
1428 us->write_io_buf_ = NULL; 1456 us->write_io_buf_ = NULL;
1429 return OSStatusFromNetError(rv); 1457 return OSStatusFromNetError(rv);
1430 } 1458 }
1431 1459
1432 // always lie to our caller 1460 // always lie to our caller
1433 return noErr; 1461 return noErr;
1434 } 1462 }
1435 1463
1436 } // namespace net 1464 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_mac.h ('k') | net/socket/ssl_client_socket_nss.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698