| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 <map> | 7 #include <map> |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #if defined(OS_WIN) | 9 #if defined(OS_WIN) |
| 10 #include <ws2tcpip.h> | 10 #include <ws2tcpip.h> |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 user_sock_->address_type_); | 172 user_sock_->address_type_); |
| 173 } | 173 } |
| 174 | 174 |
| 175 // Tries to connect to a domain that resolves to IPv6. | 175 // Tries to connect to a domain that resolves to IPv6. |
| 176 TEST_F(SOCKS5ClientSocketTest, IPv6Domain) { | 176 TEST_F(SOCKS5ClientSocketTest, IPv6Domain) { |
| 177 const std::string hostname = "an.ipv6.address"; | 177 const std::string hostname = "an.ipv6.address"; |
| 178 const char kSOCKS5IPv6Request[] = { 0x05, 0x01, 0x00, 0x04 }; | 178 const char kSOCKS5IPv6Request[] = { 0x05, 0x01, 0x00, 0x04 }; |
| 179 const uint8 ipv6_addr[] = { 0x20, 0x01, 0x0d, 0xb8, 0x87, 0x14, 0x3a, 0x90, | 179 const uint8 ipv6_addr[] = { 0x20, 0x01, 0x0d, 0xb8, 0x87, 0x14, 0x3a, 0x90, |
| 180 0x00, 0x00, 0x00, 0x00, 0x00, 0x000, 0x00, 0x12 }; | 180 0x00, 0x00, 0x00, 0x00, 0x00, 0x000, 0x00, 0x12 }; |
| 181 | 181 |
| 182 host_resolver_->rules()->AddRule(hostname, "2001:db8:8714:3a90::12"); | 182 host_resolver_->rules()->AddIPv6Rule(hostname, "2001:db8:8714:3a90::12"); |
| 183 | |
| 184 AddressList address_list; | |
| 185 HostResolver::RequestInfo info(hostname, 80); | |
| 186 int rv = host_resolver_->Resolve(info, &address_list, NULL, NULL); | |
| 187 if (rv != OK || !address_list.head()) { | |
| 188 // This machine does not support IPv6. We skip this test altogether. | |
| 189 // TODO(arindam): create a MockIPv6HostResolver to manually | |
| 190 // populate the |address_list| in case of a machine with no IPv6 suppport. | |
| 191 return; | |
| 192 } | |
| 193 | 183 |
| 194 std::string request(kSOCKS5IPv6Request, | 184 std::string request(kSOCKS5IPv6Request, |
| 195 arraysize(kSOCKS5IPv6Request)); | 185 arraysize(kSOCKS5IPv6Request)); |
| 196 request.append(reinterpret_cast<const char*>(&ipv6_addr), sizeof(ipv6_addr)); | 186 request.append(reinterpret_cast<const char*>(&ipv6_addr), sizeof(ipv6_addr)); |
| 197 request.append(reinterpret_cast<const char*>(&kNwPort), sizeof(kNwPort)); | 187 request.append(reinterpret_cast<const char*>(&kNwPort), sizeof(kNwPort)); |
| 198 | 188 |
| 199 MockWrite data_writes[] = { | 189 MockWrite data_writes[] = { |
| 200 MockWrite(false, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), | 190 MockWrite(false, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), |
| 201 MockWrite(false, request.data(), request.size()) }; | 191 MockWrite(false, request.data(), request.size()) }; |
| 202 MockRead data_reads[] = { | 192 MockRead data_reads[] = { |
| 203 MockRead(false, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 193 MockRead(false, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
| 204 MockRead(false, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; | 194 MockRead(false, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; |
| 205 | 195 |
| 206 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80)); | 196 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80)); |
| 207 | 197 |
| 208 rv = user_sock_->Connect(&callback_); | 198 int rv = user_sock_->Connect(&callback_); |
| 209 EXPECT_EQ(ERR_IO_PENDING, rv); | 199 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 210 rv = callback_.WaitForResult(); | 200 rv = callback_.WaitForResult(); |
| 211 EXPECT_EQ(OK, rv); | 201 EXPECT_EQ(OK, rv); |
| 212 EXPECT_TRUE(user_sock_->IsConnected()); | 202 EXPECT_TRUE(user_sock_->IsConnected()); |
| 213 EXPECT_EQ(SOCKS5ClientSocket::kEndPointResolvedIPv6, | 203 EXPECT_EQ(SOCKS5ClientSocket::kEndPointResolvedIPv6, |
| 214 user_sock_->address_type_); | 204 user_sock_->address_type_); |
| 215 } | 205 } |
| 216 | 206 |
| 217 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) { | 207 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) { |
| 218 const std::string hostname = "www.google.com"; | 208 const std::string hostname = "www.google.com"; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 int rv = user_sock_->Connect(&callback_); | 279 int rv = user_sock_->Connect(&callback_); |
| 290 EXPECT_EQ(ERR_IO_PENDING, rv); | 280 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 291 rv = callback_.WaitForResult(); | 281 rv = callback_.WaitForResult(); |
| 292 EXPECT_EQ(OK, rv); | 282 EXPECT_EQ(OK, rv); |
| 293 EXPECT_TRUE(user_sock_->IsConnected()); | 283 EXPECT_TRUE(user_sock_->IsConnected()); |
| 294 } | 284 } |
| 295 } | 285 } |
| 296 | 286 |
| 297 } // namespace net | 287 } // namespace net |
| 298 | 288 |
| OLD | NEW |