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