| 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 |