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 user_write_callback_(NULL), | 403 old_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(!user_write_callback_); | 872 DCHECK(!old_user_write_callback_ && user_write_callback_.is_null()); |
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; |
| 877 |
| 878 int rv = DoPayloadEncrypt(); |
| 879 if (rv != OK) |
| 880 return rv; |
| 881 |
| 882 rv = DoPayloadWrite(); |
| 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; |
876 user_write_buf_len_ = buf_len; | 898 user_write_buf_len_ = buf_len; |
877 | 899 |
878 int rv = DoPayloadEncrypt(); | 900 int rv = DoPayloadEncrypt(); |
879 if (rv != OK) | 901 if (rv != OK) |
880 return rv; | 902 return rv; |
881 | 903 |
882 rv = DoPayloadWrite(); | 904 rv = DoPayloadWrite(); |
883 if (rv == ERR_IO_PENDING) { | 905 if (rv == ERR_IO_PENDING) { |
884 user_write_callback_ = callback; | 906 user_write_callback_ = callback; |
885 } else { | 907 } else { |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
957 c.Run(result); | 979 c.Run(result); |
958 } | 980 } |
959 } | 981 } |
960 } | 982 } |
961 | 983 |
962 void SSLClientSocketWin::OnWriteComplete(int result) { | 984 void SSLClientSocketWin::OnWriteComplete(int result) { |
963 DCHECK(completed_handshake()); | 985 DCHECK(completed_handshake()); |
964 | 986 |
965 int rv = DoPayloadWriteComplete(result); | 987 int rv = DoPayloadWriteComplete(result); |
966 if (rv != ERR_IO_PENDING) { | 988 if (rv != ERR_IO_PENDING) { |
967 DCHECK(user_write_callback_); | 989 DCHECK(old_user_write_callback_ || !user_write_callback_.is_null()); |
968 OldCompletionCallback* c = user_write_callback_; | 990 if (old_user_write_callback_) { |
969 user_write_callback_ = NULL; | 991 OldCompletionCallback* c = old_user_write_callback_; |
970 user_write_buf_ = NULL; | 992 old_user_write_callback_ = NULL; |
971 user_write_buf_len_ = 0; | 993 user_write_buf_ = NULL; |
972 c->Run(rv); | 994 user_write_buf_len_ = 0; |
| 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 } |
973 } | 1003 } |
974 } | 1004 } |
975 | 1005 |
976 | 1006 |
977 int SSLClientSocketWin::DoLoop(int last_io_result) { | 1007 int SSLClientSocketWin::DoLoop(int last_io_result) { |
978 DCHECK(next_state_ != STATE_NONE); | 1008 DCHECK(next_state_ != STATE_NONE); |
979 int rv = last_io_result; | 1009 int rv = last_io_result; |
980 do { | 1010 do { |
981 State state = next_state_; | 1011 State state = next_state_; |
982 next_state_ = STATE_NONE; | 1012 next_state_ = STATE_NONE; |
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1655 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD2_CA); | 1685 UpdateConnectionTypeHistograms(CONNECTION_SSL_MD2_CA); |
1656 } | 1686 } |
1657 | 1687 |
1658 void SSLClientSocketWin::FreeSendBuffer() { | 1688 void SSLClientSocketWin::FreeSendBuffer() { |
1659 SECURITY_STATUS status = FreeContextBuffer(send_buffer_.pvBuffer); | 1689 SECURITY_STATUS status = FreeContextBuffer(send_buffer_.pvBuffer); |
1660 DCHECK(status == SEC_E_OK); | 1690 DCHECK(status == SEC_E_OK); |
1661 memset(&send_buffer_, 0, sizeof(send_buffer_)); | 1691 memset(&send_buffer_, 0, sizeof(send_buffer_)); |
1662 } | 1692 } |
1663 | 1693 |
1664 } // namespace net | 1694 } // namespace net |
OLD | NEW |