OLD | NEW |
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 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 ALLOW_THIS_IN_INITIALIZER_LIST( | 393 ALLOW_THIS_IN_INITIALIZER_LIST( |
394 read_callback_(this, &SSLClientSocketWin::OnReadComplete)), | 394 read_callback_(this, &SSLClientSocketWin::OnReadComplete)), |
395 ALLOW_THIS_IN_INITIALIZER_LIST( | 395 ALLOW_THIS_IN_INITIALIZER_LIST( |
396 write_callback_(this, &SSLClientSocketWin::OnWriteComplete)), | 396 write_callback_(this, &SSLClientSocketWin::OnWriteComplete)), |
397 transport_(transport_socket), | 397 transport_(transport_socket), |
398 host_and_port_(host_and_port), | 398 host_and_port_(host_and_port), |
399 ssl_config_(ssl_config), | 399 ssl_config_(ssl_config), |
400 old_user_connect_callback_(NULL), | 400 old_user_connect_callback_(NULL), |
401 old_user_read_callback_(NULL), | 401 old_user_read_callback_(NULL), |
402 user_read_buf_len_(0), | 402 user_read_buf_len_(0), |
403 old_user_write_callback_(NULL), | 403 user_write_callback_(NULL), |
404 user_write_buf_len_(0), | 404 user_write_buf_len_(0), |
405 next_state_(STATE_NONE), | 405 next_state_(STATE_NONE), |
406 cert_verifier_(context.cert_verifier), | 406 cert_verifier_(context.cert_verifier), |
407 creds_(NULL), | 407 creds_(NULL), |
408 isc_status_(SEC_E_OK), | 408 isc_status_(SEC_E_OK), |
409 payload_send_buffer_len_(0), | 409 payload_send_buffer_len_(0), |
410 bytes_sent_(0), | 410 bytes_sent_(0), |
411 decrypted_ptr_(NULL), | 411 decrypted_ptr_(NULL), |
412 bytes_decrypted_(0), | 412 bytes_decrypted_(0), |
413 received_ptr_(NULL), | 413 received_ptr_(NULL), |
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 } else { | 862 } else { |
863 user_read_buf_ = NULL; | 863 user_read_buf_ = NULL; |
864 user_read_buf_len_ = 0; | 864 user_read_buf_len_ = 0; |
865 } | 865 } |
866 return rv; | 866 return rv; |
867 } | 867 } |
868 | 868 |
869 int SSLClientSocketWin::Write(IOBuffer* buf, int buf_len, | 869 int SSLClientSocketWin::Write(IOBuffer* buf, int buf_len, |
870 OldCompletionCallback* callback) { | 870 OldCompletionCallback* callback) { |
871 DCHECK(completed_handshake()); | 871 DCHECK(completed_handshake()); |
872 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null()); | 872 DCHECK(!user_write_callback_); |
873 | 873 |
874 DCHECK(!user_write_buf_); | 874 DCHECK(!user_write_buf_); |
875 user_write_buf_ = buf; | 875 user_write_buf_ = buf; |
876 user_write_buf_len_ = buf_len; | 876 user_write_buf_len_ = buf_len; |
877 | 877 |
878 int rv = DoPayloadEncrypt(); | 878 int rv = DoPayloadEncrypt(); |
879 if (rv != OK) | 879 if (rv != OK) |
880 return rv; | 880 return rv; |
881 | 881 |
882 rv = DoPayloadWrite(); | 882 rv = DoPayloadWrite(); |
883 if (rv == ERR_IO_PENDING) { | 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 return rv; | |
890 } | |
891 int SSLClientSocketWin::Write(IOBuffer* buf, int buf_len, | |
892 const CompletionCallback& callback) { | |
893 DCHECK(completed_handshake()); | |
894 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null()); | |
895 | |
896 DCHECK(!user_write_buf_); | |
897 user_write_buf_ = buf; | |
898 user_write_buf_len_ = buf_len; | |
899 | |
900 int rv = DoPayloadEncrypt(); | |
901 if (rv != OK) | |
902 return rv; | |
903 | |
904 rv = DoPayloadWrite(); | |
905 if (rv == ERR_IO_PENDING) { | |
906 user_write_callback_ = callback; | 884 user_write_callback_ = callback; |
907 } else { | 885 } else { |
908 user_write_buf_ = NULL; | 886 user_write_buf_ = NULL; |
909 user_write_buf_len_ = 0; | 887 user_write_buf_len_ = 0; |
910 } | 888 } |
911 return rv; | 889 return rv; |
912 } | 890 } |
913 | 891 |
914 bool SSLClientSocketWin::SetReceiveBufferSize(int32 size) { | 892 bool SSLClientSocketWin::SetReceiveBufferSize(int32 size) { |
915 return transport_->socket()->SetReceiveBufferSize(size); | 893 return transport_->socket()->SetReceiveBufferSize(size); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
979 c.Run(result); | 957 c.Run(result); |
980 } | 958 } |
981 } | 959 } |
982 } | 960 } |
983 | 961 |
984 void SSLClientSocketWin::OnWriteComplete(int result) { | 962 void SSLClientSocketWin::OnWriteComplete(int result) { |
985 DCHECK(completed_handshake()); | 963 DCHECK(completed_handshake()); |
986 | 964 |
987 int rv = DoPayloadWriteComplete(result); | 965 int rv = DoPayloadWriteComplete(result); |
988 if (rv != ERR_IO_PENDING) { | 966 if (rv != ERR_IO_PENDING) { |
989 DCHECK(old_user_write_callback_ || !user_write_callback_.is_null()); | 967 DCHECK(user_write_callback_); |
990 if (old_user_write_callback_) { | 968 OldCompletionCallback* c = user_write_callback_; |
991 OldCompletionCallback* c = old_user_write_callback_; | 969 user_write_callback_ = NULL; |
992 old_user_write_callback_ = NULL; | 970 user_write_buf_ = NULL; |
993 user_write_buf_ = NULL; | 971 user_write_buf_len_ = 0; |
994 user_write_buf_len_ = 0; | 972 c->Run(rv); |
995 c->Run(rv); | |
996 } else { | |
997 CompletionCallback c = user_write_callback_; | |
998 user_write_callback_.Reset(); | |
999 user_write_buf_ = NULL; | |
1000 user_write_buf_len_ = 0; | |
1001 c.Run(rv); | |
1002 } | |
1003 } | 973 } |
1004 } | 974 } |
1005 | 975 |
1006 | 976 |
1007 int SSLClientSocketWin::DoLoop(int last_io_result) { | 977 int SSLClientSocketWin::DoLoop(int last_io_result) { |
1008 DCHECK(next_state_ != STATE_NONE); | 978 DCHECK(next_state_ != STATE_NONE); |
1009 int rv = last_io_result; | 979 int rv = last_io_result; |
1010 do { | 980 do { |
1011 State state = next_state_; | 981 State state = next_state_; |
1012 next_state_ = STATE_NONE; | 982 next_state_ = STATE_NONE; |
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1685 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD2_CA); | 1655 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD2_CA); |
1686 } | 1656 } |
1687 | 1657 |
1688 void SSLClientSocketWin::FreeSendBuffer() { | 1658 void SSLClientSocketWin::FreeSendBuffer() { |
1689 SECURITY_STATUS status = FreeContextBuffer(send_buffer_.pvBuffer); | 1659 SECURITY_STATUS status = FreeContextBuffer(send_buffer_.pvBuffer); |
1690 DCHECK(status == SEC_E_OK); | 1660 DCHECK(status == SEC_E_OK); |
1691 memset(&send_buffer_, 0, sizeof(send_buffer_)); | 1661 memset(&send_buffer_, 0, sizeof(send_buffer_)); |
1692 } | 1662 } |
1693 | 1663 |
1694 } // namespace net | 1664 } // namespace net |
OLD | NEW |