OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 // TODO(ukai): code is similar with http_network_transaction.cc. We should | 5 // TODO(ukai): code is similar with http_network_transaction.cc. We should |
6 // think about ways to share code, if possible. | 6 // think about ways to share code, if possible. |
7 | 7 |
8 #include "net/socket_stream/socket_stream.h" | 8 #include "net/socket_stream/socket_stream.h" |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 } else { | 492 } else { |
493 next_state_ = STATE_CLOSE; | 493 next_state_ = STATE_CLOSE; |
494 } | 494 } |
495 // TODO(ukai): if error occured, reconsider proxy after error. | 495 // TODO(ukai): if error occured, reconsider proxy after error. |
496 return result; | 496 return result; |
497 } | 497 } |
498 | 498 |
499 int SocketStream::DoTcpConnect() { | 499 int SocketStream::DoTcpConnect() { |
500 next_state_ = STATE_TCP_CONNECT_COMPLETE; | 500 next_state_ = STATE_TCP_CONNECT_COMPLETE; |
501 DCHECK(factory_); | 501 DCHECK(factory_); |
502 socket_.reset(factory_->CreateTCPClientSocket(addresses_)); | 502 socket_.reset(factory_->CreateTCPClientSocket(addresses_, |
| 503 net_log_.net_log())); |
503 metrics_->OnStartConnection(); | 504 metrics_->OnStartConnection(); |
504 return socket_->Connect(&io_callback_, net_log_); | 505 return socket_->Connect(&io_callback_); |
505 } | 506 } |
506 | 507 |
507 int SocketStream::DoTcpConnectComplete(int result) { | 508 int SocketStream::DoTcpConnectComplete(int result) { |
508 // TODO(ukai): if error occured, reconsider proxy after error. | 509 // TODO(ukai): if error occured, reconsider proxy after error. |
509 if (result != OK) { | 510 if (result != OK) { |
510 next_state_ = STATE_CLOSE; | 511 next_state_ = STATE_CLOSE; |
511 return result; | 512 return result; |
512 } | 513 } |
513 | 514 |
514 if (proxy_mode_ == kTunnelProxy) | 515 if (proxy_mode_ == kTunnelProxy) |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
710 ClientSocket* s = socket_.release(); | 711 ClientSocket* s = socket_.release(); |
711 HostResolver::RequestInfo req_info(url_.HostNoBrackets(), | 712 HostResolver::RequestInfo req_info(url_.HostNoBrackets(), |
712 url_.EffectiveIntPort()); | 713 url_.EffectiveIntPort()); |
713 | 714 |
714 if (proxy_info_.proxy_server().scheme() == ProxyServer::SCHEME_SOCKS5) | 715 if (proxy_info_.proxy_server().scheme() == ProxyServer::SCHEME_SOCKS5) |
715 s = new SOCKS5ClientSocket(s, req_info); | 716 s = new SOCKS5ClientSocket(s, req_info); |
716 else | 717 else |
717 s = new SOCKSClientSocket(s, req_info, host_resolver_.get()); | 718 s = new SOCKSClientSocket(s, req_info, host_resolver_.get()); |
718 socket_.reset(s); | 719 socket_.reset(s); |
719 metrics_->OnSOCKSProxy(); | 720 metrics_->OnSOCKSProxy(); |
720 return socket_->Connect(&io_callback_, net_log_); | 721 return socket_->Connect(&io_callback_); |
721 } | 722 } |
722 | 723 |
723 int SocketStream::DoSOCKSConnectComplete(int result) { | 724 int SocketStream::DoSOCKSConnectComplete(int result) { |
724 DCHECK_EQ(kSOCKSProxy, proxy_mode_); | 725 DCHECK_EQ(kSOCKSProxy, proxy_mode_); |
725 | 726 |
726 if (result == OK) { | 727 if (result == OK) { |
727 if (is_secure()) | 728 if (is_secure()) |
728 next_state_ = STATE_SSL_CONNECT; | 729 next_state_ = STATE_SSL_CONNECT; |
729 else | 730 else |
730 result = DidEstablishConnection(); | 731 result = DidEstablishConnection(); |
731 } else { | 732 } else { |
732 next_state_ = STATE_CLOSE; | 733 next_state_ = STATE_CLOSE; |
733 } | 734 } |
734 return result; | 735 return result; |
735 } | 736 } |
736 | 737 |
737 int SocketStream::DoSSLConnect() { | 738 int SocketStream::DoSSLConnect() { |
738 DCHECK(factory_); | 739 DCHECK(factory_); |
739 socket_.reset(factory_->CreateSSLClientSocket( | 740 socket_.reset(factory_->CreateSSLClientSocket( |
740 socket_.release(), url_.HostNoBrackets(), ssl_config_)); | 741 socket_.release(), url_.HostNoBrackets(), ssl_config_)); |
741 next_state_ = STATE_SSL_CONNECT_COMPLETE; | 742 next_state_ = STATE_SSL_CONNECT_COMPLETE; |
742 metrics_->OnSSLConnection(); | 743 metrics_->OnSSLConnection(); |
743 return socket_->Connect(&io_callback_, net_log_); | 744 return socket_->Connect(&io_callback_); |
744 } | 745 } |
745 | 746 |
746 int SocketStream::DoSSLConnectComplete(int result) { | 747 int SocketStream::DoSSLConnectComplete(int result) { |
747 if (IsCertificateError(result)) { | 748 if (IsCertificateError(result)) { |
748 if (socket_->IsConnectedAndIdle()) { | 749 if (socket_->IsConnectedAndIdle()) { |
749 result = HandleCertificateError(result); | 750 result = HandleCertificateError(result); |
750 } else { | 751 } else { |
751 // SSLClientSocket for Mac will report socket is not connected, | 752 // SSLClientSocket for Mac will report socket is not connected, |
752 // if it returns cert verification error. It didn't perform | 753 // if it returns cert verification error. It didn't perform |
753 // SSLHandshake yet. | 754 // SSLHandshake yet. |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
938 | 939 |
939 SSLConfigService* SocketStream::ssl_config_service() const { | 940 SSLConfigService* SocketStream::ssl_config_service() const { |
940 return context_->ssl_config_service(); | 941 return context_->ssl_config_service(); |
941 } | 942 } |
942 | 943 |
943 ProxyService* SocketStream::proxy_service() const { | 944 ProxyService* SocketStream::proxy_service() const { |
944 return context_->proxy_service(); | 945 return context_->proxy_service(); |
945 } | 946 } |
946 | 947 |
947 } // namespace net | 948 } // namespace net |
OLD | NEW |