| 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 "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "base/format_macros.h" | 10 #include "base/format_macros.h" |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 buffer_ = std::string(kSOCKS5GreetWriteData, | 284 buffer_ = std::string(kSOCKS5GreetWriteData, |
| 285 arraysize(kSOCKS5GreetWriteData)); | 285 arraysize(kSOCKS5GreetWriteData)); |
| 286 bytes_sent_ = 0; | 286 bytes_sent_ = 0; |
| 287 } | 287 } |
| 288 | 288 |
| 289 next_state_ = STATE_GREET_WRITE_COMPLETE; | 289 next_state_ = STATE_GREET_WRITE_COMPLETE; |
| 290 size_t handshake_buf_len = buffer_.size() - bytes_sent_; | 290 size_t handshake_buf_len = buffer_.size() - bytes_sent_; |
| 291 handshake_buf_ = new IOBuffer(handshake_buf_len); | 291 handshake_buf_ = new IOBuffer(handshake_buf_len); |
| 292 memcpy(handshake_buf_->data(), &buffer_.data()[bytes_sent_], | 292 memcpy(handshake_buf_->data(), &buffer_.data()[bytes_sent_], |
| 293 handshake_buf_len); | 293 handshake_buf_len); |
| 294 return transport_->socket()->Write(handshake_buf_, handshake_buf_len, | 294 return transport_->socket() |
| 295 io_callback_); | 295 ->Write(handshake_buf_.get(), handshake_buf_len, io_callback_); |
| 296 } | 296 } |
| 297 | 297 |
| 298 int SOCKS5ClientSocket::DoGreetWriteComplete(int result) { | 298 int SOCKS5ClientSocket::DoGreetWriteComplete(int result) { |
| 299 if (result < 0) | 299 if (result < 0) |
| 300 return result; | 300 return result; |
| 301 | 301 |
| 302 bytes_sent_ += result; | 302 bytes_sent_ += result; |
| 303 if (bytes_sent_ == buffer_.size()) { | 303 if (bytes_sent_ == buffer_.size()) { |
| 304 buffer_.clear(); | 304 buffer_.clear(); |
| 305 bytes_received_ = 0; | 305 bytes_received_ = 0; |
| 306 next_state_ = STATE_GREET_READ; | 306 next_state_ = STATE_GREET_READ; |
| 307 } else { | 307 } else { |
| 308 next_state_ = STATE_GREET_WRITE; | 308 next_state_ = STATE_GREET_WRITE; |
| 309 } | 309 } |
| 310 return OK; | 310 return OK; |
| 311 } | 311 } |
| 312 | 312 |
| 313 int SOCKS5ClientSocket::DoGreetRead() { | 313 int SOCKS5ClientSocket::DoGreetRead() { |
| 314 next_state_ = STATE_GREET_READ_COMPLETE; | 314 next_state_ = STATE_GREET_READ_COMPLETE; |
| 315 size_t handshake_buf_len = kGreetReadHeaderSize - bytes_received_; | 315 size_t handshake_buf_len = kGreetReadHeaderSize - bytes_received_; |
| 316 handshake_buf_ = new IOBuffer(handshake_buf_len); | 316 handshake_buf_ = new IOBuffer(handshake_buf_len); |
| 317 return transport_->socket()->Read(handshake_buf_, handshake_buf_len, | 317 return transport_->socket() |
| 318 io_callback_); | 318 ->Read(handshake_buf_.get(), handshake_buf_len, io_callback_); |
| 319 } | 319 } |
| 320 | 320 |
| 321 int SOCKS5ClientSocket::DoGreetReadComplete(int result) { | 321 int SOCKS5ClientSocket::DoGreetReadComplete(int result) { |
| 322 if (result < 0) | 322 if (result < 0) |
| 323 return result; | 323 return result; |
| 324 | 324 |
| 325 if (result == 0) { | 325 if (result == 0) { |
| 326 net_log_.AddEvent(NetLog::TYPE_SOCKS_UNEXPECTEDLY_CLOSED_DURING_GREETING); | 326 net_log_.AddEvent(NetLog::TYPE_SOCKS_UNEXPECTEDLY_CLOSED_DURING_GREETING); |
| 327 return ERR_SOCKS_CONNECTION_FAILED; | 327 return ERR_SOCKS_CONNECTION_FAILED; |
| 328 } | 328 } |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 if (rv != OK) | 382 if (rv != OK) |
| 383 return rv; | 383 return rv; |
| 384 bytes_sent_ = 0; | 384 bytes_sent_ = 0; |
| 385 } | 385 } |
| 386 | 386 |
| 387 int handshake_buf_len = buffer_.size() - bytes_sent_; | 387 int handshake_buf_len = buffer_.size() - bytes_sent_; |
| 388 DCHECK_LT(0, handshake_buf_len); | 388 DCHECK_LT(0, handshake_buf_len); |
| 389 handshake_buf_ = new IOBuffer(handshake_buf_len); | 389 handshake_buf_ = new IOBuffer(handshake_buf_len); |
| 390 memcpy(handshake_buf_->data(), &buffer_[bytes_sent_], | 390 memcpy(handshake_buf_->data(), &buffer_[bytes_sent_], |
| 391 handshake_buf_len); | 391 handshake_buf_len); |
| 392 return transport_->socket()->Write(handshake_buf_, handshake_buf_len, | 392 return transport_->socket() |
| 393 io_callback_); | 393 ->Write(handshake_buf_.get(), handshake_buf_len, io_callback_); |
| 394 } | 394 } |
| 395 | 395 |
| 396 int SOCKS5ClientSocket::DoHandshakeWriteComplete(int result) { | 396 int SOCKS5ClientSocket::DoHandshakeWriteComplete(int result) { |
| 397 if (result < 0) | 397 if (result < 0) |
| 398 return result; | 398 return result; |
| 399 | 399 |
| 400 // We ignore the case when result is 0, since the underlying Write | 400 // We ignore the case when result is 0, since the underlying Write |
| 401 // may return spurious writes while waiting on the socket. | 401 // may return spurious writes while waiting on the socket. |
| 402 | 402 |
| 403 bytes_sent_ += result; | 403 bytes_sent_ += result; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 416 int SOCKS5ClientSocket::DoHandshakeRead() { | 416 int SOCKS5ClientSocket::DoHandshakeRead() { |
| 417 next_state_ = STATE_HANDSHAKE_READ_COMPLETE; | 417 next_state_ = STATE_HANDSHAKE_READ_COMPLETE; |
| 418 | 418 |
| 419 if (buffer_.empty()) { | 419 if (buffer_.empty()) { |
| 420 bytes_received_ = 0; | 420 bytes_received_ = 0; |
| 421 read_header_size = kReadHeaderSize; | 421 read_header_size = kReadHeaderSize; |
| 422 } | 422 } |
| 423 | 423 |
| 424 int handshake_buf_len = read_header_size - bytes_received_; | 424 int handshake_buf_len = read_header_size - bytes_received_; |
| 425 handshake_buf_ = new IOBuffer(handshake_buf_len); | 425 handshake_buf_ = new IOBuffer(handshake_buf_len); |
| 426 return transport_->socket()->Read(handshake_buf_, handshake_buf_len, | 426 return transport_->socket() |
| 427 io_callback_); | 427 ->Read(handshake_buf_.get(), handshake_buf_len, io_callback_); |
| 428 } | 428 } |
| 429 | 429 |
| 430 int SOCKS5ClientSocket::DoHandshakeReadComplete(int result) { | 430 int SOCKS5ClientSocket::DoHandshakeReadComplete(int result) { |
| 431 if (result < 0) | 431 if (result < 0) |
| 432 return result; | 432 return result; |
| 433 | 433 |
| 434 // The underlying socket closed unexpectedly. | 434 // The underlying socket closed unexpectedly. |
| 435 if (result == 0) { | 435 if (result == 0) { |
| 436 net_log_.AddEvent(NetLog::TYPE_SOCKS_UNEXPECTEDLY_CLOSED_DURING_HANDSHAKE); | 436 net_log_.AddEvent(NetLog::TYPE_SOCKS_UNEXPECTEDLY_CLOSED_DURING_HANDSHAKE); |
| 437 return ERR_SOCKS_CONNECTION_FAILED; | 437 return ERR_SOCKS_CONNECTION_FAILED; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 | 494 |
| 495 int SOCKS5ClientSocket::GetPeerAddress(IPEndPoint* address) const { | 495 int SOCKS5ClientSocket::GetPeerAddress(IPEndPoint* address) const { |
| 496 return transport_->socket()->GetPeerAddress(address); | 496 return transport_->socket()->GetPeerAddress(address); |
| 497 } | 497 } |
| 498 | 498 |
| 499 int SOCKS5ClientSocket::GetLocalAddress(IPEndPoint* address) const { | 499 int SOCKS5ClientSocket::GetLocalAddress(IPEndPoint* address) const { |
| 500 return transport_->socket()->GetLocalAddress(address); | 500 return transport_->socket()->GetLocalAddress(address); |
| 501 } | 501 } |
| 502 | 502 |
| 503 } // namespace net | 503 } // namespace net |
| OLD | NEW |