| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // OpenSSL binding for SSLClientSocket. The class layout and general principle | 5 // OpenSSL binding for SSLClientSocket. The class layout and general principle |
| 6 // of operation is derived from SSLClientSocketNSS. | 6 // of operation is derived from SSLClientSocketNSS. |
| 7 | 7 |
| 8 #include "net/socket/ssl_client_socket_openssl.h" | 8 #include "net/socket/ssl_client_socket_openssl.h" |
| 9 | 9 |
| 10 #include <openssl/err.h> | 10 #include <openssl/err.h> |
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 const SSLConfig& ssl_config, | 480 const SSLConfig& ssl_config, |
| 481 const SSLClientSocketContext& context) | 481 const SSLClientSocketContext& context) |
| 482 : transport_send_busy_(false), | 482 : transport_send_busy_(false), |
| 483 transport_recv_busy_(false), | 483 transport_recv_busy_(false), |
| 484 transport_recv_eof_(false), | 484 transport_recv_eof_(false), |
| 485 weak_factory_(this), | 485 weak_factory_(this), |
| 486 pending_read_error_(kNoPendingReadResult), | 486 pending_read_error_(kNoPendingReadResult), |
| 487 transport_write_error_(OK), | 487 transport_write_error_(OK), |
| 488 server_cert_chain_(new PeerCertificateChain(NULL)), | 488 server_cert_chain_(new PeerCertificateChain(NULL)), |
| 489 completed_handshake_(false), | 489 completed_handshake_(false), |
| 490 was_ever_used_(false), |
| 490 client_auth_cert_needed_(false), | 491 client_auth_cert_needed_(false), |
| 491 cert_verifier_(context.cert_verifier), | 492 cert_verifier_(context.cert_verifier), |
| 492 server_bound_cert_service_(context.server_bound_cert_service), | 493 server_bound_cert_service_(context.server_bound_cert_service), |
| 493 ssl_(NULL), | 494 ssl_(NULL), |
| 494 transport_bio_(NULL), | 495 transport_bio_(NULL), |
| 495 transport_(transport_socket.Pass()), | 496 transport_(transport_socket.Pass()), |
| 496 host_and_port_(host_and_port), | 497 host_and_port_(host_and_port), |
| 497 ssl_config_(ssl_config), | 498 ssl_config_(ssl_config), |
| 498 ssl_session_cache_shard_(context.ssl_session_cache_shard), | 499 ssl_session_cache_shard_(context.ssl_session_cache_shard), |
| 499 trying_cached_session_(false), | 500 trying_cached_session_(false), |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 | 669 |
| 669 void SSLClientSocketOpenSSL::SetOmniboxSpeculation() { | 670 void SSLClientSocketOpenSSL::SetOmniboxSpeculation() { |
| 670 if (transport_.get() && transport_->socket()) { | 671 if (transport_.get() && transport_->socket()) { |
| 671 transport_->socket()->SetOmniboxSpeculation(); | 672 transport_->socket()->SetOmniboxSpeculation(); |
| 672 } else { | 673 } else { |
| 673 NOTREACHED(); | 674 NOTREACHED(); |
| 674 } | 675 } |
| 675 } | 676 } |
| 676 | 677 |
| 677 bool SSLClientSocketOpenSSL::WasEverUsed() const { | 678 bool SSLClientSocketOpenSSL::WasEverUsed() const { |
| 678 if (transport_.get() && transport_->socket()) | 679 return was_ever_used_; |
| 679 return transport_->socket()->WasEverUsed(); | |
| 680 | |
| 681 NOTREACHED(); | |
| 682 return false; | |
| 683 } | 680 } |
| 684 | 681 |
| 685 bool SSLClientSocketOpenSSL::UsingTCPFastOpen() const { | 682 bool SSLClientSocketOpenSSL::UsingTCPFastOpen() const { |
| 686 if (transport_.get() && transport_->socket()) | 683 if (transport_.get() && transport_->socket()) |
| 687 return transport_->socket()->UsingTCPFastOpen(); | 684 return transport_->socket()->UsingTCPFastOpen(); |
| 688 | 685 |
| 689 NOTREACHED(); | 686 NOTREACHED(); |
| 690 return false; | 687 return false; |
| 691 } | 688 } |
| 692 | 689 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 743 int buf_len, | 740 int buf_len, |
| 744 const CompletionCallback& callback) { | 741 const CompletionCallback& callback) { |
| 745 user_read_buf_ = buf; | 742 user_read_buf_ = buf; |
| 746 user_read_buf_len_ = buf_len; | 743 user_read_buf_len_ = buf_len; |
| 747 | 744 |
| 748 int rv = DoReadLoop(OK); | 745 int rv = DoReadLoop(OK); |
| 749 | 746 |
| 750 if (rv == ERR_IO_PENDING) { | 747 if (rv == ERR_IO_PENDING) { |
| 751 user_read_callback_ = callback; | 748 user_read_callback_ = callback; |
| 752 } else { | 749 } else { |
| 750 if (rv > 0) |
| 751 was_ever_used_ = true; |
| 753 user_read_buf_ = NULL; | 752 user_read_buf_ = NULL; |
| 754 user_read_buf_len_ = 0; | 753 user_read_buf_len_ = 0; |
| 755 } | 754 } |
| 756 | 755 |
| 757 return rv; | 756 return rv; |
| 758 } | 757 } |
| 759 | 758 |
| 760 int SSLClientSocketOpenSSL::Write(IOBuffer* buf, | 759 int SSLClientSocketOpenSSL::Write(IOBuffer* buf, |
| 761 int buf_len, | 760 int buf_len, |
| 762 const CompletionCallback& callback) { | 761 const CompletionCallback& callback) { |
| 763 user_write_buf_ = buf; | 762 user_write_buf_ = buf; |
| 764 user_write_buf_len_ = buf_len; | 763 user_write_buf_len_ = buf_len; |
| 765 | 764 |
| 766 int rv = DoWriteLoop(OK); | 765 int rv = DoWriteLoop(OK); |
| 767 | 766 |
| 768 if (rv == ERR_IO_PENDING) { | 767 if (rv == ERR_IO_PENDING) { |
| 769 user_write_callback_ = callback; | 768 user_write_callback_ = callback; |
| 770 } else { | 769 } else { |
| 770 if (rv > 0) |
| 771 was_ever_used_ = true; |
| 771 user_write_buf_ = NULL; | 772 user_write_buf_ = NULL; |
| 772 user_write_buf_len_ = 0; | 773 user_write_buf_len_ = 0; |
| 773 } | 774 } |
| 774 | 775 |
| 775 return rv; | 776 return rv; |
| 776 } | 777 } |
| 777 | 778 |
| 778 bool SSLClientSocketOpenSSL::SetReceiveBufferSize(int32 size) { | 779 bool SSLClientSocketOpenSSL::SetReceiveBufferSize(int32 size) { |
| 779 return transport_->socket()->SetReceiveBufferSize(size); | 780 return transport_->socket()->SetReceiveBufferSize(size); |
| 780 } | 781 } |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 900 if (IsChannelIDEnabled(ssl_config_, server_bound_cert_service_)) { | 901 if (IsChannelIDEnabled(ssl_config_, server_bound_cert_service_)) { |
| 901 SSL_enable_tls_channel_id(ssl_); | 902 SSL_enable_tls_channel_id(ssl_); |
| 902 } | 903 } |
| 903 | 904 |
| 904 return true; | 905 return true; |
| 905 } | 906 } |
| 906 | 907 |
| 907 void SSLClientSocketOpenSSL::DoReadCallback(int rv) { | 908 void SSLClientSocketOpenSSL::DoReadCallback(int rv) { |
| 908 // Since Run may result in Read being called, clear |user_read_callback_| | 909 // Since Run may result in Read being called, clear |user_read_callback_| |
| 909 // up front. | 910 // up front. |
| 911 if (rv > 0) |
| 912 was_ever_used_ = true; |
| 910 user_read_buf_ = NULL; | 913 user_read_buf_ = NULL; |
| 911 user_read_buf_len_ = 0; | 914 user_read_buf_len_ = 0; |
| 912 base::ResetAndReturn(&user_read_callback_).Run(rv); | 915 base::ResetAndReturn(&user_read_callback_).Run(rv); |
| 913 } | 916 } |
| 914 | 917 |
| 915 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) { | 918 void SSLClientSocketOpenSSL::DoWriteCallback(int rv) { |
| 916 // Since Run may result in Write being called, clear |user_write_callback_| | 919 // Since Run may result in Write being called, clear |user_write_callback_| |
| 917 // up front. | 920 // up front. |
| 921 if (rv > 0) |
| 922 was_ever_used_ = true; |
| 918 user_write_buf_ = NULL; | 923 user_write_buf_ = NULL; |
| 919 user_write_buf_len_ = 0; | 924 user_write_buf_len_ = 0; |
| 920 base::ResetAndReturn(&user_write_callback_).Run(rv); | 925 base::ResetAndReturn(&user_write_callback_).Run(rv); |
| 921 } | 926 } |
| 922 | 927 |
| 923 bool SSLClientSocketOpenSSL::DoTransportIO() { | 928 bool SSLClientSocketOpenSSL::DoTransportIO() { |
| 924 bool network_moved = false; | 929 bool network_moved = false; |
| 925 int rv; | 930 int rv; |
| 926 // Read and write as much data as possible. The loop is necessary because | 931 // Read and write as much data as possible. The loop is necessary because |
| 927 // Write() may return synchronously. | 932 // Write() may return synchronously. |
| (...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1567 #endif | 1572 #endif |
| 1568 return SSL_TLSEXT_ERR_OK; | 1573 return SSL_TLSEXT_ERR_OK; |
| 1569 } | 1574 } |
| 1570 | 1575 |
| 1571 scoped_refptr<X509Certificate> | 1576 scoped_refptr<X509Certificate> |
| 1572 SSLClientSocketOpenSSL::GetUnverifiedServerCertificateChain() const { | 1577 SSLClientSocketOpenSSL::GetUnverifiedServerCertificateChain() const { |
| 1573 return server_cert_; | 1578 return server_cert_; |
| 1574 } | 1579 } |
| 1575 | 1580 |
| 1576 } // namespace net | 1581 } // namespace net |
| OLD | NEW |