| 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 #include "net/socket/socks5_client_socket.h" | 5 #include "net/socket/socks5_client_socket.h" |
| 6 | 6 |
| 7 #include <utility> |
| 8 |
| 7 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
| 8 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| 9 #include "base/format_macros.h" | 11 #include "base/format_macros.h" |
| 10 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
| 11 #include "base/sys_byteorder.h" | 13 #include "base/sys_byteorder.h" |
| 12 #include "base/trace_event/trace_event.h" | 14 #include "base/trace_event/trace_event.h" |
| 13 #include "net/base/io_buffer.h" | 15 #include "net/base/io_buffer.h" |
| 14 #include "net/base/net_util.h" | 16 #include "net/base/net_util.h" |
| 15 #include "net/log/net_log.h" | 17 #include "net/log/net_log.h" |
| 16 #include "net/socket/client_socket_handle.h" | 18 #include "net/socket/client_socket_handle.h" |
| 17 | 19 |
| 18 namespace net { | 20 namespace net { |
| 19 | 21 |
| 20 const unsigned int SOCKS5ClientSocket::kGreetReadHeaderSize = 2; | 22 const unsigned int SOCKS5ClientSocket::kGreetReadHeaderSize = 2; |
| 21 const unsigned int SOCKS5ClientSocket::kWriteHeaderSize = 10; | 23 const unsigned int SOCKS5ClientSocket::kWriteHeaderSize = 10; |
| 22 const unsigned int SOCKS5ClientSocket::kReadHeaderSize = 5; | 24 const unsigned int SOCKS5ClientSocket::kReadHeaderSize = 5; |
| 23 const uint8_t SOCKS5ClientSocket::kSOCKS5Version = 0x05; | 25 const uint8_t SOCKS5ClientSocket::kSOCKS5Version = 0x05; |
| 24 const uint8_t SOCKS5ClientSocket::kTunnelCommand = 0x01; | 26 const uint8_t SOCKS5ClientSocket::kTunnelCommand = 0x01; |
| 25 const uint8_t SOCKS5ClientSocket::kNullByte = 0x00; | 27 const uint8_t SOCKS5ClientSocket::kNullByte = 0x00; |
| 26 | 28 |
| 27 static_assert(sizeof(struct in_addr) == 4, "incorrect system size of IPv4"); | 29 static_assert(sizeof(struct in_addr) == 4, "incorrect system size of IPv4"); |
| 28 static_assert(sizeof(struct in6_addr) == 16, "incorrect system size of IPv6"); | 30 static_assert(sizeof(struct in6_addr) == 16, "incorrect system size of IPv6"); |
| 29 | 31 |
| 30 SOCKS5ClientSocket::SOCKS5ClientSocket( | 32 SOCKS5ClientSocket::SOCKS5ClientSocket( |
| 31 scoped_ptr<ClientSocketHandle> transport_socket, | 33 scoped_ptr<ClientSocketHandle> transport_socket, |
| 32 const HostResolver::RequestInfo& req_info) | 34 const HostResolver::RequestInfo& req_info) |
| 33 : io_callback_(base::Bind(&SOCKS5ClientSocket::OnIOComplete, | 35 : io_callback_(base::Bind(&SOCKS5ClientSocket::OnIOComplete, |
| 34 base::Unretained(this))), | 36 base::Unretained(this))), |
| 35 transport_(transport_socket.Pass()), | 37 transport_(std::move(transport_socket)), |
| 36 next_state_(STATE_NONE), | 38 next_state_(STATE_NONE), |
| 37 completed_handshake_(false), | 39 completed_handshake_(false), |
| 38 bytes_sent_(0), | 40 bytes_sent_(0), |
| 39 bytes_received_(0), | 41 bytes_received_(0), |
| 40 read_header_size(kReadHeaderSize), | 42 read_header_size(kReadHeaderSize), |
| 41 was_ever_used_(false), | 43 was_ever_used_(false), |
| 42 host_request_info_(req_info), | 44 host_request_info_(req_info), |
| 43 net_log_(transport_->socket()->NetLog()) { | 45 net_log_(transport_->socket()->NetLog()) {} |
| 44 } | |
| 45 | 46 |
| 46 SOCKS5ClientSocket::~SOCKS5ClientSocket() { | 47 SOCKS5ClientSocket::~SOCKS5ClientSocket() { |
| 47 Disconnect(); | 48 Disconnect(); |
| 48 } | 49 } |
| 49 | 50 |
| 50 int SOCKS5ClientSocket::Connect(const CompletionCallback& callback) { | 51 int SOCKS5ClientSocket::Connect(const CompletionCallback& callback) { |
| 51 DCHECK(transport_.get()); | 52 DCHECK(transport_.get()); |
| 52 DCHECK(transport_->socket()); | 53 DCHECK(transport_->socket()); |
| 53 DCHECK_EQ(STATE_NONE, next_state_); | 54 DCHECK_EQ(STATE_NONE, next_state_); |
| 54 DCHECK(user_callback_.is_null()); | 55 DCHECK(user_callback_.is_null()); |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 | 504 |
| 504 int SOCKS5ClientSocket::GetPeerAddress(IPEndPoint* address) const { | 505 int SOCKS5ClientSocket::GetPeerAddress(IPEndPoint* address) const { |
| 505 return transport_->socket()->GetPeerAddress(address); | 506 return transport_->socket()->GetPeerAddress(address); |
| 506 } | 507 } |
| 507 | 508 |
| 508 int SOCKS5ClientSocket::GetLocalAddress(IPEndPoint* address) const { | 509 int SOCKS5ClientSocket::GetLocalAddress(IPEndPoint* address) const { |
| 509 return transport_->socket()->GetLocalAddress(address); | 510 return transport_->socket()->GetLocalAddress(address); |
| 510 } | 511 } |
| 511 | 512 |
| 512 } // namespace net | 513 } // namespace net |
| OLD | NEW |