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

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

Issue 8824006: Migrate net/socket/socket.h, net/socket/stream_socket.h to base::Bind(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased 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_win.h ('k') | net/socket/ssl_server_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_win.h" 5 #include "net/socket/ssl_client_socket_win.h"
6 6
7 #include <schnlsp.h> 7 #include <schnlsp.h>
8 #include <map> 8 #include <map>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 // breakdown of the size: 380 // breakdown of the size:
381 // 5: SSL record header 381 // 5: SSL record header
382 // 16K: SSL record maximum size 382 // 16K: SSL record maximum size
383 // 64: >= SSL record trailer (16 or 20 have been observed) 383 // 64: >= SSL record trailer (16 or 20 have been observed)
384 static const int kRecvBufferSize = (5 + 16*1024 + 64); 384 static const int kRecvBufferSize = (5 + 16*1024 + 64);
385 385
386 SSLClientSocketWin::SSLClientSocketWin(ClientSocketHandle* transport_socket, 386 SSLClientSocketWin::SSLClientSocketWin(ClientSocketHandle* transport_socket,
387 const HostPortPair& host_and_port, 387 const HostPortPair& host_and_port,
388 const SSLConfig& ssl_config, 388 const SSLConfig& ssl_config,
389 const SSLClientSocketContext& context) 389 const SSLClientSocketContext& context)
390 : ALLOW_THIS_IN_INITIALIZER_LIST( 390 : transport_(transport_socket),
391 handshake_io_callback_(this,
392 &SSLClientSocketWin::OnHandshakeIOComplete)),
393 ALLOW_THIS_IN_INITIALIZER_LIST(
394 read_callback_(this, &SSLClientSocketWin::OnReadComplete)),
395 ALLOW_THIS_IN_INITIALIZER_LIST(
396 write_callback_(this, &SSLClientSocketWin::OnWriteComplete)),
397 transport_(transport_socket),
398 host_and_port_(host_and_port), 391 host_and_port_(host_and_port),
399 ssl_config_(ssl_config), 392 ssl_config_(ssl_config),
400 old_user_connect_callback_(NULL),
401 old_user_read_callback_(NULL),
402 user_read_buf_len_(0), 393 user_read_buf_len_(0),
403 user_write_callback_(NULL),
404 user_write_buf_len_(0), 394 user_write_buf_len_(0),
405 next_state_(STATE_NONE), 395 next_state_(STATE_NONE),
406 cert_verifier_(context.cert_verifier), 396 cert_verifier_(context.cert_verifier),
407 creds_(NULL), 397 creds_(NULL),
408 isc_status_(SEC_E_OK), 398 isc_status_(SEC_E_OK),
409 payload_send_buffer_len_(0), 399 payload_send_buffer_len_(0),
410 bytes_sent_(0), 400 bytes_sent_(0),
411 decrypted_ptr_(NULL), 401 decrypted_ptr_(NULL),
412 bytes_decrypted_(0), 402 bytes_decrypted_(0),
413 received_ptr_(NULL), 403 received_ptr_(NULL),
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 } 545 }
556 546
557 SSLClientSocket::NextProtoStatus 547 SSLClientSocket::NextProtoStatus
558 SSLClientSocketWin::GetNextProto(std::string* proto, 548 SSLClientSocketWin::GetNextProto(std::string* proto,
559 std::string* server_protos) { 549 std::string* server_protos) {
560 proto->clear(); 550 proto->clear();
561 server_protos->clear(); 551 server_protos->clear();
562 return kNextProtoUnsupported; 552 return kNextProtoUnsupported;
563 } 553 }
564 554
565 int SSLClientSocketWin::Connect(OldCompletionCallback* callback) { 555 int SSLClientSocketWin::Connect(const CompletionCallback& callback) {
566 DCHECK(transport_.get()); 556 DCHECK(transport_.get());
567 DCHECK(next_state_ == STATE_NONE); 557 DCHECK(next_state_ == STATE_NONE);
568 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 558 DCHECK(user_connect_callback_.is_null());
569 559
570 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL); 560 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
571 561
572 int rv = InitializeSSLContext();
573 if (rv != OK) {
574 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL);
575 return rv;
576 }
577
578 writing_first_token_ = true;
579 next_state_ = STATE_HANDSHAKE_WRITE;
580 rv = DoLoop(OK);
581 if (rv == ERR_IO_PENDING) {
582 old_user_connect_callback_ = callback;
583 } else {
584 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL);
585 }
586 return rv;
587 }
588 int SSLClientSocketWin::Connect(const CompletionCallback& callback) {
589 DCHECK(transport_.get());
590 DCHECK(next_state_ == STATE_NONE);
591 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
592
593 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
594
595 int rv = InitializeSSLContext(); 562 int rv = InitializeSSLContext();
596 if (rv != OK) { 563 if (rv != OK) {
597 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL); 564 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL);
598 return rv; 565 return rv;
599 } 566 }
600 567
601 writing_first_token_ = true; 568 writing_first_token_ = true;
602 next_state_ = STATE_HANDSHAKE_WRITE; 569 next_state_ = STATE_HANDSHAKE_WRITE;
603 rv = DoLoop(OK); 570 rv = DoLoop(OK);
604 if (rv == ERR_IO_PENDING) { 571 if (rv == ERR_IO_PENDING) {
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 744
778 base::TimeDelta SSLClientSocketWin::GetConnectTimeMicros() const { 745 base::TimeDelta SSLClientSocketWin::GetConnectTimeMicros() const {
779 if (transport_.get() && transport_->socket()) { 746 if (transport_.get() && transport_->socket()) {
780 return transport_->socket()->GetConnectTimeMicros(); 747 return transport_->socket()->GetConnectTimeMicros();
781 } 748 }
782 NOTREACHED(); 749 NOTREACHED();
783 return base::TimeDelta::FromMicroseconds(-1); 750 return base::TimeDelta::FromMicroseconds(-1);
784 } 751 }
785 752
786 int SSLClientSocketWin::Read(IOBuffer* buf, int buf_len, 753 int SSLClientSocketWin::Read(IOBuffer* buf, int buf_len,
787 OldCompletionCallback* callback) { 754 const CompletionCallback& callback) {
788 DCHECK(completed_handshake()); 755 DCHECK(completed_handshake());
789 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); 756 DCHECK(user_read_callback_.is_null());
790 757
791 // If we have surplus decrypted plaintext, satisfy the Read with it without 758 // If we have surplus decrypted plaintext, satisfy the Read with it without
792 // reading more ciphertext from the transport socket. 759 // reading more ciphertext from the transport socket.
793 if (bytes_decrypted_ != 0) {
794 int len = std::min(buf_len, bytes_decrypted_);
795 net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_RECEIVED, len,
796 decrypted_ptr_);
797 memcpy(buf->data(), decrypted_ptr_, len);
798 decrypted_ptr_ += len;
799 bytes_decrypted_ -= len;
800 if (bytes_decrypted_ == 0) {
801 decrypted_ptr_ = NULL;
802 if (bytes_received_ != 0) {
803 memmove(recv_buffer_.get(), received_ptr_, bytes_received_);
804 received_ptr_ = recv_buffer_.get();
805 }
806 }
807 return len;
808 }
809
810 DCHECK(!user_read_buf_);
811 // http://crbug.com/16371: We're seeing |buf->data()| return NULL. See if the
812 // user is passing in an IOBuffer with a NULL |data_|.
813 CHECK(buf);
814 CHECK(buf->data());
815 user_read_buf_ = buf;
816 user_read_buf_len_ = buf_len;
817
818 int rv = DoPayloadRead();
819 if (rv == ERR_IO_PENDING) {
820 old_user_read_callback_ = callback;
821 } else {
822 user_read_buf_ = NULL;
823 user_read_buf_len_ = 0;
824 }
825 return rv;
826 }
827 int SSLClientSocketWin::Read(IOBuffer* buf, int buf_len,
828 const CompletionCallback& callback) {
829 DCHECK(completed_handshake());
830 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null());
831
832 // If we have surplus decrypted plaintext, satisfy the Read with it without
833 // reading more ciphertext from the transport socket.
834 if (bytes_decrypted_ != 0) { 760 if (bytes_decrypted_ != 0) {
835 int len = std::min(buf_len, bytes_decrypted_); 761 int len = std::min(buf_len, bytes_decrypted_);
836 net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_RECEIVED, len, 762 net_log_.AddByteTransferEvent(NetLog::TYPE_SSL_SOCKET_BYTES_RECEIVED, len,
837 decrypted_ptr_); 763 decrypted_ptr_);
838 memcpy(buf->data(), decrypted_ptr_, len); 764 memcpy(buf->data(), decrypted_ptr_, len);
839 decrypted_ptr_ += len; 765 decrypted_ptr_ += len;
840 bytes_decrypted_ -= len; 766 bytes_decrypted_ -= len;
841 if (bytes_decrypted_ == 0) { 767 if (bytes_decrypted_ == 0) {
842 decrypted_ptr_ = NULL; 768 decrypted_ptr_ = NULL;
843 if (bytes_received_ != 0) { 769 if (bytes_received_ != 0) {
(...skipping 16 matching lines...) Expand all
860 if (rv == ERR_IO_PENDING) { 786 if (rv == ERR_IO_PENDING) {
861 user_read_callback_ = callback; 787 user_read_callback_ = callback;
862 } else { 788 } else {
863 user_read_buf_ = NULL; 789 user_read_buf_ = NULL;
864 user_read_buf_len_ = 0; 790 user_read_buf_len_ = 0;
865 } 791 }
866 return rv; 792 return rv;
867 } 793 }
868 794
869 int SSLClientSocketWin::Write(IOBuffer* buf, int buf_len, 795 int SSLClientSocketWin::Write(IOBuffer* buf, int buf_len,
870 OldCompletionCallback* callback) { 796 const CompletionCallback& callback) {
871 DCHECK(completed_handshake()); 797 DCHECK(completed_handshake());
872 DCHECK(!user_write_callback_); 798 DCHECK(user_write_callback_.is_null());
873 799
874 DCHECK(!user_write_buf_); 800 DCHECK(!user_write_buf_);
875 user_write_buf_ = buf; 801 user_write_buf_ = buf;
876 user_write_buf_len_ = buf_len; 802 user_write_buf_len_ = buf_len;
877 803
878 int rv = DoPayloadEncrypt(); 804 int rv = DoPayloadEncrypt();
879 if (rv != OK) 805 if (rv != OK)
880 return rv; 806 return rv;
881 807
882 rv = DoPayloadWrite(); 808 rv = DoPayloadWrite();
(...skipping 16 matching lines...) Expand all
899 825
900 void SSLClientSocketWin::OnHandshakeIOComplete(int result) { 826 void SSLClientSocketWin::OnHandshakeIOComplete(int result) {
901 int rv = DoLoop(result); 827 int rv = DoLoop(result);
902 828
903 // The SSL handshake has some round trips. We need to notify the caller of 829 // The SSL handshake has some round trips. We need to notify the caller of
904 // success or any error, other than waiting for IO. 830 // success or any error, other than waiting for IO.
905 if (rv != ERR_IO_PENDING) { 831 if (rv != ERR_IO_PENDING) {
906 // If there is no connect callback available to call, we are renegotiating 832 // If there is no connect callback available to call, we are renegotiating
907 // (which occurs because we are in the middle of a Read when the 833 // (which occurs because we are in the middle of a Read when the
908 // renegotiation process starts). So we complete the Read here. 834 // renegotiation process starts). So we complete the Read here.
909 if (!old_user_connect_callback_ && user_connect_callback_.is_null()) { 835 if (user_connect_callback_.is_null()) {
910 if (old_user_read_callback_) { 836 CompletionCallback c = user_read_callback_;
911 OldCompletionCallback* c = old_user_read_callback_; 837 user_read_callback_.Reset();
912 old_user_read_callback_ = NULL; 838 user_read_buf_ = NULL;
913 user_read_buf_ = NULL; 839 user_read_buf_len_ = 0;
914 user_read_buf_len_ = 0; 840 c.Run(rv);
915 c->Run(rv);
916 } else {
917 CompletionCallback c = user_read_callback_;
918 user_read_callback_.Reset();
919 user_read_buf_ = NULL;
920 user_read_buf_len_ = 0;
921 c.Run(rv);
922 }
923 return; 841 return;
924 } 842 }
925 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL); 843 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, NULL);
926 if (old_user_connect_callback_) { 844 CompletionCallback c = user_connect_callback_;
927 OldCompletionCallback* c = old_user_connect_callback_; 845 user_connect_callback_.Reset();
928 old_user_connect_callback_ = NULL; 846 c.Run(rv);
929 c->Run(rv);
930 } else {
931 CompletionCallback c = user_connect_callback_;
932 user_connect_callback_.Reset();
933 c.Run(rv);
934 }
935 } 847 }
936 } 848 }
937 849
938 void SSLClientSocketWin::OnReadComplete(int result) { 850 void SSLClientSocketWin::OnReadComplete(int result) {
939 DCHECK(completed_handshake()); 851 DCHECK(completed_handshake());
940 852
941 result = DoPayloadReadComplete(result); 853 result = DoPayloadReadComplete(result);
942 if (result > 0) 854 if (result > 0)
943 result = DoPayloadDecrypt(); 855 result = DoPayloadDecrypt();
944 if (result != ERR_IO_PENDING) { 856 if (result != ERR_IO_PENDING) {
945 DCHECK(old_user_read_callback_ || !user_read_callback_.is_null()); 857 DCHECK(!user_read_callback_.is_null());
946 if (old_user_read_callback_) { 858 CompletionCallback c = user_read_callback_;
947 OldCompletionCallback* c = old_user_read_callback_; 859 user_read_callback_.Reset();
948 old_user_read_callback_ = NULL; 860 user_read_buf_ = NULL;
949 user_read_buf_ = NULL; 861 user_read_buf_len_ = 0;
950 user_read_buf_len_ = 0; 862 c.Run(result);
951 c->Run(result);
952 } else {
953 CompletionCallback c = user_read_callback_;
954 user_read_callback_.Reset();
955 user_read_buf_ = NULL;
956 user_read_buf_len_ = 0;
957 c.Run(result);
958 }
959 } 863 }
960 } 864 }
961 865
962 void SSLClientSocketWin::OnWriteComplete(int result) { 866 void SSLClientSocketWin::OnWriteComplete(int result) {
963 DCHECK(completed_handshake()); 867 DCHECK(completed_handshake());
964 868
965 int rv = DoPayloadWriteComplete(result); 869 int rv = DoPayloadWriteComplete(result);
966 if (rv != ERR_IO_PENDING) { 870 if (rv != ERR_IO_PENDING) {
967 DCHECK(user_write_callback_); 871 DCHECK(!user_write_callback_.is_null());
968 OldCompletionCallback* c = user_write_callback_; 872 CompletionCallback c = user_write_callback_;
969 user_write_callback_ = NULL; 873 user_write_callback_.Reset();
970 user_write_buf_ = NULL; 874 user_write_buf_ = NULL;
971 user_write_buf_len_ = 0; 875 user_write_buf_len_ = 0;
972 c->Run(rv); 876 c.Run(rv);
973 } 877 }
974 } 878 }
975 879
976 880
977 int SSLClientSocketWin::DoLoop(int last_io_result) { 881 int SSLClientSocketWin::DoLoop(int last_io_result) {
978 DCHECK(next_state_ != STATE_NONE); 882 DCHECK(next_state_ != STATE_NONE);
979 int rv = last_io_result; 883 int rv = last_io_result;
980 do { 884 do {
981 State state = next_state_; 885 State state = next_state_;
982 next_state_ = STATE_NONE; 886 next_state_ = STATE_NONE;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 int buf_len = kRecvBufferSize - bytes_received_; 928 int buf_len = kRecvBufferSize - bytes_received_;
1025 929
1026 if (buf_len <= 0) { 930 if (buf_len <= 0) {
1027 LOG(DFATAL) << "Receive buffer is too small!"; 931 LOG(DFATAL) << "Receive buffer is too small!";
1028 return ERR_UNEXPECTED; 932 return ERR_UNEXPECTED;
1029 } 933 }
1030 934
1031 DCHECK(!transport_read_buf_); 935 DCHECK(!transport_read_buf_);
1032 transport_read_buf_ = new IOBuffer(buf_len); 936 transport_read_buf_ = new IOBuffer(buf_len);
1033 937
1034 return transport_->socket()->Read(transport_read_buf_, buf_len, 938 return transport_->socket()->Read(
1035 &handshake_io_callback_); 939 transport_read_buf_, buf_len,
940 base::Bind(&SSLClientSocketWin::OnHandshakeIOComplete,
941 base::Unretained(this)));
1036 } 942 }
1037 943
1038 int SSLClientSocketWin::DoHandshakeReadComplete(int result) { 944 int SSLClientSocketWin::DoHandshakeReadComplete(int result) {
1039 if (result < 0) { 945 if (result < 0) {
1040 transport_read_buf_ = NULL; 946 transport_read_buf_ = NULL;
1041 return result; 947 return result;
1042 } 948 }
1043 949
1044 if (transport_read_buf_) { 950 if (transport_read_buf_) {
1045 // A transition to STATE_HANDSHAKE_READ_COMPLETE is set in multiple places, 951 // A transition to STATE_HANDSHAKE_READ_COMPLETE is set in multiple places,
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1202 // We should have something to send. 1108 // We should have something to send.
1203 DCHECK(send_buffer_.pvBuffer); 1109 DCHECK(send_buffer_.pvBuffer);
1204 DCHECK(send_buffer_.cbBuffer > 0); 1110 DCHECK(send_buffer_.cbBuffer > 0);
1205 DCHECK(!transport_write_buf_); 1111 DCHECK(!transport_write_buf_);
1206 1112
1207 const char* buf = static_cast<char*>(send_buffer_.pvBuffer) + bytes_sent_; 1113 const char* buf = static_cast<char*>(send_buffer_.pvBuffer) + bytes_sent_;
1208 int buf_len = send_buffer_.cbBuffer - bytes_sent_; 1114 int buf_len = send_buffer_.cbBuffer - bytes_sent_;
1209 transport_write_buf_ = new IOBuffer(buf_len); 1115 transport_write_buf_ = new IOBuffer(buf_len);
1210 memcpy(transport_write_buf_->data(), buf, buf_len); 1116 memcpy(transport_write_buf_->data(), buf, buf_len);
1211 1117
1212 return transport_->socket()->Write(transport_write_buf_, buf_len, 1118 return transport_->socket()->Write(
1213 &handshake_io_callback_); 1119 transport_write_buf_, buf_len,
1120 base::Bind(&SSLClientSocketWin::OnHandshakeIOComplete,
1121 base::Unretained(this)));
1214 } 1122 }
1215 1123
1216 int SSLClientSocketWin::DoHandshakeWriteComplete(int result) { 1124 int SSLClientSocketWin::DoHandshakeWriteComplete(int result) {
1217 DCHECK(transport_write_buf_); 1125 DCHECK(transport_write_buf_);
1218 transport_write_buf_ = NULL; 1126 transport_write_buf_ = NULL;
1219 if (result < 0) 1127 if (result < 0)
1220 return result; 1128 return result;
1221 1129
1222 DCHECK(result != 0); 1130 DCHECK(result != 0);
1223 1131
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1301 return ERR_FAILED; 1209 return ERR_FAILED;
1302 } 1210 }
1303 1211
1304 int rv; 1212 int rv;
1305 // If bytes_received_, we have some data from a previous read still ready 1213 // If bytes_received_, we have some data from a previous read still ready
1306 // for decoding. Otherwise, we need to issue a real read. 1214 // for decoding. Otherwise, we need to issue a real read.
1307 if (!bytes_received_ || need_more_data_) { 1215 if (!bytes_received_ || need_more_data_) {
1308 DCHECK(!transport_read_buf_); 1216 DCHECK(!transport_read_buf_);
1309 transport_read_buf_ = new IOBuffer(buf_len); 1217 transport_read_buf_ = new IOBuffer(buf_len);
1310 1218
1311 rv = transport_->socket()->Read(transport_read_buf_, buf_len, 1219 rv = transport_->socket()->Read(
1312 &read_callback_); 1220 transport_read_buf_, buf_len,
1221 base::Bind(&SSLClientSocketWin::OnReadComplete,
1222 base::Unretained(this)));
1313 if (rv != ERR_IO_PENDING) 1223 if (rv != ERR_IO_PENDING)
1314 rv = DoPayloadReadComplete(rv); 1224 rv = DoPayloadReadComplete(rv);
1315 if (rv <= 0) 1225 if (rv <= 0)
1316 return rv; 1226 return rv;
1317 } 1227 }
1318 1228
1319 // Decode what we've read. If there is not enough data to decode yet, 1229 // Decode what we've read. If there is not enough data to decode yet,
1320 // this may return ERR_IO_PENDING still. 1230 // this may return ERR_IO_PENDING still.
1321 return DoPayloadDecrypt(); 1231 return DoPayloadDecrypt();
1322 } 1232 }
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
1544 // We should have something to send. 1454 // We should have something to send.
1545 DCHECK(payload_send_buffer_.get()); 1455 DCHECK(payload_send_buffer_.get());
1546 DCHECK(payload_send_buffer_len_ > 0); 1456 DCHECK(payload_send_buffer_len_ > 0);
1547 DCHECK(!transport_write_buf_); 1457 DCHECK(!transport_write_buf_);
1548 1458
1549 const char* buf = payload_send_buffer_.get() + bytes_sent_; 1459 const char* buf = payload_send_buffer_.get() + bytes_sent_;
1550 int buf_len = payload_send_buffer_len_ - bytes_sent_; 1460 int buf_len = payload_send_buffer_len_ - bytes_sent_;
1551 transport_write_buf_ = new IOBuffer(buf_len); 1461 transport_write_buf_ = new IOBuffer(buf_len);
1552 memcpy(transport_write_buf_->data(), buf, buf_len); 1462 memcpy(transport_write_buf_->data(), buf, buf_len);
1553 1463
1554 int rv = transport_->socket()->Write(transport_write_buf_, buf_len, 1464 int rv = transport_->socket()->Write(
1555 &write_callback_); 1465 transport_write_buf_, buf_len,
1466 base::Bind(&SSLClientSocketWin::OnWriteComplete,
1467 base::Unretained(this)));
1556 if (rv != ERR_IO_PENDING) 1468 if (rv != ERR_IO_PENDING)
1557 rv = DoPayloadWriteComplete(rv); 1469 rv = DoPayloadWriteComplete(rv);
1558 return rv; 1470 return rv;
1559 } 1471 }
1560 1472
1561 int SSLClientSocketWin::DoPayloadWriteComplete(int result) { 1473 int SSLClientSocketWin::DoPayloadWriteComplete(int result) {
1562 DCHECK(transport_write_buf_); 1474 DCHECK(transport_write_buf_);
1563 transport_write_buf_ = NULL; 1475 transport_write_buf_ = NULL;
1564 if (result < 0) 1476 if (result < 0)
1565 return result; 1477 return result;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1628 server_cert_ = new_server_cert; 1540 server_cert_ = new_server_cert;
1629 next_state_ = STATE_VERIFY_CERT; 1541 next_state_ = STATE_VERIFY_CERT;
1630 } 1542 }
1631 CertFreeCertificateContext(server_cert_handle); 1543 CertFreeCertificateContext(server_cert_handle);
1632 return OK; 1544 return OK;
1633 } 1545 }
1634 1546
1635 // Called when a renegotiation is completed. |result| is the verification 1547 // Called when a renegotiation is completed. |result| is the verification
1636 // result of the server certificate received during renegotiation. 1548 // result of the server certificate received during renegotiation.
1637 void SSLClientSocketWin::DidCompleteRenegotiation() { 1549 void SSLClientSocketWin::DidCompleteRenegotiation() {
1638 DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null()); 1550 DCHECK(user_connect_callback_.is_null());
1639 DCHECK(old_user_read_callback_ || !user_read_callback_.is_null()); 1551 DCHECK(!user_read_callback_.is_null());
1640 renegotiating_ = false; 1552 renegotiating_ = false;
1641 next_state_ = STATE_COMPLETED_RENEGOTIATION; 1553 next_state_ = STATE_COMPLETED_RENEGOTIATION;
1642 } 1554 }
1643 1555
1644 void SSLClientSocketWin::LogConnectionTypeMetrics() const { 1556 void SSLClientSocketWin::LogConnectionTypeMetrics() const {
1645 UpdateConnectionTypeHistograms(CONNECTION_SSL); 1557 UpdateConnectionTypeHistograms(CONNECTION_SSL);
1646 if (server_cert_verify_result_.has_md5) 1558 if (server_cert_verify_result_.has_md5)
1647 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD5); 1559 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD5);
1648 if (server_cert_verify_result_.has_md2) 1560 if (server_cert_verify_result_.has_md2)
1649 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD2); 1561 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD2);
1650 if (server_cert_verify_result_.has_md4) 1562 if (server_cert_verify_result_.has_md4)
1651 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD4); 1563 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD4);
1652 if (server_cert_verify_result_.has_md5_ca) 1564 if (server_cert_verify_result_.has_md5_ca)
1653 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD5_CA); 1565 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD5_CA);
1654 if (server_cert_verify_result_.has_md2_ca) 1566 if (server_cert_verify_result_.has_md2_ca)
1655 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD2_CA); 1567 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD2_CA);
1656 } 1568 }
1657 1569
1658 void SSLClientSocketWin::FreeSendBuffer() { 1570 void SSLClientSocketWin::FreeSendBuffer() {
1659 SECURITY_STATUS status = FreeContextBuffer(send_buffer_.pvBuffer); 1571 SECURITY_STATUS status = FreeContextBuffer(send_buffer_.pvBuffer);
1660 DCHECK(status == SEC_E_OK); 1572 DCHECK(status == SEC_E_OK);
1661 memset(&send_buffer_, 0, sizeof(send_buffer_)); 1573 memset(&send_buffer_, 0, sizeof(send_buffer_));
1662 } 1574 }
1663 1575
1664 } // namespace net 1576 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_win.h ('k') | net/socket/ssl_server_socket_nss.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698