diff options
Diffstat (limited to 'net/socket/socks_client_socket.cc')
-rw-r--r-- | net/socket/socks_client_socket.cc | 78 |
1 files changed, 18 insertions, 60 deletions
diff --git a/net/socket/socks_client_socket.cc b/net/socket/socks_client_socket.cc index 623f202..4c368c1 100644 --- a/net/socket/socks_client_socket.cc +++ b/net/socket/socks_client_socket.cc @@ -58,11 +58,8 @@ COMPILE_ASSERT(sizeof(SOCKS4ServerResponse) == kReadHeaderSize, SOCKSClientSocket::SOCKSClientSocket(ClientSocketHandle* transport_socket, const HostResolver::RequestInfo& req_info, HostResolver* host_resolver) - : ALLOW_THIS_IN_INITIALIZER_LIST( - io_callback_(this, &SOCKSClientSocket::OnIOComplete)), - transport_(transport_socket), + : transport_(transport_socket), next_state_(STATE_NONE), - old_user_callback_(NULL), completed_handshake_(false), bytes_sent_(0), bytes_received_(0), @@ -74,11 +71,8 @@ SOCKSClientSocket::SOCKSClientSocket(ClientSocketHandle* transport_socket, SOCKSClientSocket::SOCKSClientSocket(StreamSocket* transport_socket, const HostResolver::RequestInfo& req_info, HostResolver* host_resolver) - : ALLOW_THIS_IN_INITIALIZER_LIST( - io_callback_(this, &SOCKSClientSocket::OnIOComplete)), - transport_(new ClientSocketHandle()), + : transport_(new ClientSocketHandle()), next_state_(STATE_NONE), - old_user_callback_(NULL), completed_handshake_(false), bytes_sent_(0), bytes_received_(0), @@ -92,11 +86,11 @@ SOCKSClientSocket::~SOCKSClientSocket() { Disconnect(); } -int SOCKSClientSocket::Connect(OldCompletionCallback* callback) { +int SOCKSClientSocket::Connect(const CompletionCallback& callback) { DCHECK(transport_.get()); DCHECK(transport_->socket()); DCHECK_EQ(STATE_NONE, next_state_); - DCHECK(!old_user_callback_ && user_callback_.is_null()); + DCHECK(user_callback_.is_null()); // If already connected, then just return OK. if (completed_handshake_) @@ -108,34 +102,12 @@ int SOCKSClientSocket::Connect(OldCompletionCallback* callback) { int rv = DoLoop(OK); if (rv == ERR_IO_PENDING) { - old_user_callback_ = callback; + user_callback_ = callback; } else { net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SOCKS_CONNECT, rv); } return rv; } -int SOCKSClientSocket::Connect(const net::CompletionCallback& callback) { - DCHECK(transport_.get()); - DCHECK(transport_->socket()); - DCHECK_EQ(STATE_NONE, next_state_); - DCHECK(!old_user_callback_ && user_callback_.is_null()); - - // If already connected, then just return OK. - if (completed_handshake_) - return OK; - - next_state_ = STATE_RESOLVE_HOST; - - net_log_.BeginEvent(NetLog::TYPE_SOCKS_CONNECT, NULL); - - int rv = DoLoop(OK); - if (rv == ERR_IO_PENDING) - user_callback_ = callback; - else - net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SOCKS_CONNECT, rv); - - return rv; -} void SOCKSClientSocket::Disconnect() { completed_handshake_ = false; @@ -145,7 +117,6 @@ void SOCKSClientSocket::Disconnect() { // Reset other states to make sure they aren't mistakenly used later. // These are the states initialized by Connect(). next_state_ = STATE_NONE; - old_user_callback_ = NULL; user_callback_.Reset(); } @@ -213,18 +184,10 @@ base::TimeDelta SOCKSClientSocket::GetConnectTimeMicros() const { // Read is called by the transport layer above to read. This can only be done // if the SOCKS handshake is complete. int SOCKSClientSocket::Read(IOBuffer* buf, int buf_len, - OldCompletionCallback* callback) { - DCHECK(completed_handshake_); - DCHECK_EQ(STATE_NONE, next_state_); - DCHECK(!old_user_callback_ && user_callback_.is_null()); - - return transport_->socket()->Read(buf, buf_len, callback); -} -int SOCKSClientSocket::Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) { DCHECK(completed_handshake_); DCHECK_EQ(STATE_NONE, next_state_); - DCHECK(!old_user_callback_ && user_callback_.is_null()); + DCHECK(user_callback_.is_null()); return transport_->socket()->Read(buf, buf_len, callback); } @@ -232,10 +195,10 @@ int SOCKSClientSocket::Read(IOBuffer* buf, int buf_len, // Write is called by the transport layer. This can only be done if the // SOCKS handshake is complete. int SOCKSClientSocket::Write(IOBuffer* buf, int buf_len, - OldCompletionCallback* callback) { + const CompletionCallback& callback) { DCHECK(completed_handshake_); DCHECK_EQ(STATE_NONE, next_state_); - DCHECK(!old_user_callback_); + DCHECK(user_callback_.is_null()); return transport_->socket()->Write(buf, buf_len, callback); } @@ -250,21 +213,14 @@ bool SOCKSClientSocket::SetSendBufferSize(int32 size) { void SOCKSClientSocket::DoCallback(int result) { DCHECK_NE(ERR_IO_PENDING, result); - DCHECK(old_user_callback_ || !user_callback_.is_null()); + DCHECK(!user_callback_.is_null()); // Since Run() may result in Read being called, // clear user_callback_ up front. - if (old_user_callback_) { - OldCompletionCallback* c = old_user_callback_; - old_user_callback_ = NULL; - DVLOG(1) << "Finished setting up SOCKS handshake"; - c->Run(result); - } else { - CompletionCallback c = user_callback_; - user_callback_.Reset(); - DVLOG(1) << "Finished setting up SOCKS handshake"; - c.Run(result); - } + CompletionCallback c = user_callback_; + user_callback_.Reset(); + DVLOG(1) << "Finished setting up SOCKS handshake"; + c.Run(result); } void SOCKSClientSocket::OnIOComplete(int result) { @@ -379,8 +335,9 @@ int SOCKSClientSocket::DoHandshakeWrite() { handshake_buf_ = new IOBuffer(handshake_buf_len); memcpy(handshake_buf_->data(), &buffer_[bytes_sent_], handshake_buf_len); - return transport_->socket()->Write(handshake_buf_, handshake_buf_len, - &io_callback_); + return transport_->socket()->Write( + handshake_buf_, handshake_buf_len, + base::Bind(&SOCKSClientSocket::OnIOComplete, base::Unretained(this))); } int SOCKSClientSocket::DoHandshakeWriteComplete(int result) { @@ -413,7 +370,8 @@ int SOCKSClientSocket::DoHandshakeRead() { int handshake_buf_len = kReadHeaderSize - bytes_received_; handshake_buf_ = new IOBuffer(handshake_buf_len); return transport_->socket()->Read(handshake_buf_, handshake_buf_len, - &io_callback_); + base::Bind(&SOCKSClientSocket::OnIOComplete, + base::Unretained(this))); } int SOCKSClientSocket::DoHandshakeReadComplete(int result) { |