| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 #include <map> | 9 #include <map> |
| 10 | 10 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 MockWrite writes[], | 37 MockWrite writes[], |
| 38 size_t writes_count, | 38 size_t writes_count, |
| 39 const std::string& hostname, | 39 const std::string& hostname, |
| 40 int port, | 40 int port, |
| 41 NetLog* net_log); | 41 NetLog* net_log); |
| 42 | 42 |
| 43 void SetUp() override; | 43 void SetUp() override; |
| 44 | 44 |
| 45 protected: | 45 protected: |
| 46 const uint16 kNwPort; | 46 const uint16 kNwPort; |
| 47 CapturingNetLog net_log_; | 47 TestNetLog net_log_; |
| 48 scoped_ptr<SOCKS5ClientSocket> user_sock_; | 48 scoped_ptr<SOCKS5ClientSocket> user_sock_; |
| 49 AddressList address_list_; | 49 AddressList address_list_; |
| 50 // Filled in by BuildMockSocket() and owned by its return value | 50 // Filled in by BuildMockSocket() and owned by its return value |
| 51 // (which |user_sock| is set to). | 51 // (which |user_sock| is set to). |
| 52 StreamSocket* tcp_sock_; | 52 StreamSocket* tcp_sock_; |
| 53 TestCompletionCallback callback_; | 53 TestCompletionCallback callback_; |
| 54 scoped_ptr<MockHostResolver> host_resolver_; | 54 scoped_ptr<MockHostResolver> host_resolver_; |
| 55 scoped_ptr<SocketDataProvider> data_; | 55 scoped_ptr<SocketDataProvider> data_; |
| 56 | 56 |
| 57 private: | 57 private: |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 "localhost", 80, &net_log_); | 139 "localhost", 80, &net_log_); |
| 140 | 140 |
| 141 // At this state the TCP connection is completed but not the SOCKS handshake. | 141 // At this state the TCP connection is completed but not the SOCKS handshake. |
| 142 EXPECT_TRUE(tcp_sock_->IsConnected()); | 142 EXPECT_TRUE(tcp_sock_->IsConnected()); |
| 143 EXPECT_FALSE(user_sock_->IsConnected()); | 143 EXPECT_FALSE(user_sock_->IsConnected()); |
| 144 | 144 |
| 145 int rv = user_sock_->Connect(callback_.callback()); | 145 int rv = user_sock_->Connect(callback_.callback()); |
| 146 EXPECT_EQ(ERR_IO_PENDING, rv); | 146 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 147 EXPECT_FALSE(user_sock_->IsConnected()); | 147 EXPECT_FALSE(user_sock_->IsConnected()); |
| 148 | 148 |
| 149 CapturingNetLog::CapturedEntryList net_log_entries; | 149 TestNetLog::CapturedEntryList net_log_entries; |
| 150 net_log_.GetEntries(&net_log_entries); | 150 net_log_.GetEntries(&net_log_entries); |
| 151 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 151 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 152 NetLog::TYPE_SOCKS5_CONNECT)); | 152 NetLog::TYPE_SOCKS5_CONNECT)); |
| 153 | 153 |
| 154 rv = callback_.WaitForResult(); | 154 rv = callback_.WaitForResult(); |
| 155 | 155 |
| 156 EXPECT_EQ(OK, rv); | 156 EXPECT_EQ(OK, rv); |
| 157 EXPECT_TRUE(user_sock_->IsConnected()); | 157 EXPECT_TRUE(user_sock_->IsConnected()); |
| 158 | 158 |
| 159 net_log_.GetEntries(&net_log_entries); | 159 net_log_.GetEntries(&net_log_entries); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest)) }; | 263 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest)) }; |
| 264 MockRead data_reads[] = { | 264 MockRead data_reads[] = { |
| 265 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), | 265 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), |
| 266 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; | 266 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; |
| 267 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), | 267 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), |
| 268 data_writes, arraysize(data_writes), | 268 data_writes, arraysize(data_writes), |
| 269 hostname, 80, &net_log_); | 269 hostname, 80, &net_log_); |
| 270 int rv = user_sock_->Connect(callback_.callback()); | 270 int rv = user_sock_->Connect(callback_.callback()); |
| 271 EXPECT_EQ(ERR_IO_PENDING, rv); | 271 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 272 | 272 |
| 273 CapturingNetLog::CapturedEntryList net_log_entries; | 273 TestNetLog::CapturedEntryList net_log_entries; |
| 274 net_log_.GetEntries(&net_log_entries); | 274 net_log_.GetEntries(&net_log_entries); |
| 275 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 275 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 276 NetLog::TYPE_SOCKS5_CONNECT)); | 276 NetLog::TYPE_SOCKS5_CONNECT)); |
| 277 | 277 |
| 278 rv = callback_.WaitForResult(); | 278 rv = callback_.WaitForResult(); |
| 279 EXPECT_EQ(OK, rv); | 279 EXPECT_EQ(OK, rv); |
| 280 EXPECT_TRUE(user_sock_->IsConnected()); | 280 EXPECT_TRUE(user_sock_->IsConnected()); |
| 281 | 281 |
| 282 net_log_.GetEntries(&net_log_entries); | 282 net_log_.GetEntries(&net_log_entries); |
| 283 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 283 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 294 MockRead data_reads[] = { | 294 MockRead data_reads[] = { |
| 295 MockRead(ASYNC, partial1, arraysize(partial1)), | 295 MockRead(ASYNC, partial1, arraysize(partial1)), |
| 296 MockRead(ASYNC, partial2, arraysize(partial2)), | 296 MockRead(ASYNC, partial2, arraysize(partial2)), |
| 297 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; | 297 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; |
| 298 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), | 298 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), |
| 299 data_writes, arraysize(data_writes), | 299 data_writes, arraysize(data_writes), |
| 300 hostname, 80, &net_log_); | 300 hostname, 80, &net_log_); |
| 301 int rv = user_sock_->Connect(callback_.callback()); | 301 int rv = user_sock_->Connect(callback_.callback()); |
| 302 EXPECT_EQ(ERR_IO_PENDING, rv); | 302 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 303 | 303 |
| 304 CapturingNetLog::CapturedEntryList net_log_entries; | 304 TestNetLog::CapturedEntryList net_log_entries; |
| 305 net_log_.GetEntries(&net_log_entries); | 305 net_log_.GetEntries(&net_log_entries); |
| 306 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 306 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 307 NetLog::TYPE_SOCKS5_CONNECT)); | 307 NetLog::TYPE_SOCKS5_CONNECT)); |
| 308 rv = callback_.WaitForResult(); | 308 rv = callback_.WaitForResult(); |
| 309 EXPECT_EQ(OK, rv); | 309 EXPECT_EQ(OK, rv); |
| 310 EXPECT_TRUE(user_sock_->IsConnected()); | 310 EXPECT_TRUE(user_sock_->IsConnected()); |
| 311 net_log_.GetEntries(&net_log_entries); | 311 net_log_.GetEntries(&net_log_entries); |
| 312 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 312 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| 313 NetLog::TYPE_SOCKS5_CONNECT)); | 313 NetLog::TYPE_SOCKS5_CONNECT)); |
| 314 } | 314 } |
| 315 | 315 |
| 316 // Test for partial handshake request write. | 316 // Test for partial handshake request write. |
| 317 { | 317 { |
| 318 const int kSplitPoint = 3; // Break handshake write into two parts. | 318 const int kSplitPoint = 3; // Break handshake write into two parts. |
| 319 MockWrite data_writes[] = { | 319 MockWrite data_writes[] = { |
| 320 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), | 320 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), |
| 321 MockWrite(ASYNC, kOkRequest, kSplitPoint), | 321 MockWrite(ASYNC, kOkRequest, kSplitPoint), |
| 322 MockWrite(ASYNC, kOkRequest + kSplitPoint, | 322 MockWrite(ASYNC, kOkRequest + kSplitPoint, |
| 323 arraysize(kOkRequest) - kSplitPoint) | 323 arraysize(kOkRequest) - kSplitPoint) |
| 324 }; | 324 }; |
| 325 MockRead data_reads[] = { | 325 MockRead data_reads[] = { |
| 326 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), | 326 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), |
| 327 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; | 327 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; |
| 328 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), | 328 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), |
| 329 data_writes, arraysize(data_writes), | 329 data_writes, arraysize(data_writes), |
| 330 hostname, 80, &net_log_); | 330 hostname, 80, &net_log_); |
| 331 int rv = user_sock_->Connect(callback_.callback()); | 331 int rv = user_sock_->Connect(callback_.callback()); |
| 332 EXPECT_EQ(ERR_IO_PENDING, rv); | 332 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 333 CapturingNetLog::CapturedEntryList net_log_entries; | 333 TestNetLog::CapturedEntryList net_log_entries; |
| 334 net_log_.GetEntries(&net_log_entries); | 334 net_log_.GetEntries(&net_log_entries); |
| 335 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 335 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 336 NetLog::TYPE_SOCKS5_CONNECT)); | 336 NetLog::TYPE_SOCKS5_CONNECT)); |
| 337 rv = callback_.WaitForResult(); | 337 rv = callback_.WaitForResult(); |
| 338 EXPECT_EQ(OK, rv); | 338 EXPECT_EQ(OK, rv); |
| 339 EXPECT_TRUE(user_sock_->IsConnected()); | 339 EXPECT_TRUE(user_sock_->IsConnected()); |
| 340 net_log_.GetEntries(&net_log_entries); | 340 net_log_.GetEntries(&net_log_entries); |
| 341 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 341 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| 342 NetLog::TYPE_SOCKS5_CONNECT)); | 342 NetLog::TYPE_SOCKS5_CONNECT)); |
| 343 } | 343 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 354 MockRead(ASYNC, kSOCKS5OkResponse, kSplitPoint), | 354 MockRead(ASYNC, kSOCKS5OkResponse, kSplitPoint), |
| 355 MockRead(ASYNC, kSOCKS5OkResponse + kSplitPoint, | 355 MockRead(ASYNC, kSOCKS5OkResponse + kSplitPoint, |
| 356 kSOCKS5OkResponseLength - kSplitPoint) | 356 kSOCKS5OkResponseLength - kSplitPoint) |
| 357 }; | 357 }; |
| 358 | 358 |
| 359 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), | 359 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), |
| 360 data_writes, arraysize(data_writes), | 360 data_writes, arraysize(data_writes), |
| 361 hostname, 80, &net_log_); | 361 hostname, 80, &net_log_); |
| 362 int rv = user_sock_->Connect(callback_.callback()); | 362 int rv = user_sock_->Connect(callback_.callback()); |
| 363 EXPECT_EQ(ERR_IO_PENDING, rv); | 363 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 364 CapturingNetLog::CapturedEntryList net_log_entries; | 364 TestNetLog::CapturedEntryList net_log_entries; |
| 365 net_log_.GetEntries(&net_log_entries); | 365 net_log_.GetEntries(&net_log_entries); |
| 366 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 366 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 367 NetLog::TYPE_SOCKS5_CONNECT)); | 367 NetLog::TYPE_SOCKS5_CONNECT)); |
| 368 rv = callback_.WaitForResult(); | 368 rv = callback_.WaitForResult(); |
| 369 EXPECT_EQ(OK, rv); | 369 EXPECT_EQ(OK, rv); |
| 370 EXPECT_TRUE(user_sock_->IsConnected()); | 370 EXPECT_TRUE(user_sock_->IsConnected()); |
| 371 net_log_.GetEntries(&net_log_entries); | 371 net_log_.GetEntries(&net_log_entries); |
| 372 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 372 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| 373 NetLog::TYPE_SOCKS5_CONNECT)); | 373 NetLog::TYPE_SOCKS5_CONNECT)); |
| 374 } | 374 } |
| 375 } | 375 } |
| 376 | 376 |
| 377 } // namespace | 377 } // namespace |
| 378 | 378 |
| 379 } // namespace net | 379 } // namespace net |
| OLD | NEW |