| Index: net/socket/websocket_transport_connect_sub_job.cc
|
| diff --git a/net/socket/websocket_transport_connect_sub_job.cc b/net/socket/websocket_transport_connect_sub_job.cc
|
| deleted file mode 100644
|
| index fbe8bbcc82c92c107efc0da3e02114df118a02b3..0000000000000000000000000000000000000000
|
| --- a/net/socket/websocket_transport_connect_sub_job.cc
|
| +++ /dev/null
|
| @@ -1,170 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "net/socket/websocket_transport_connect_sub_job.h"
|
| -
|
| -#include "base/logging.h"
|
| -#include "net/base/ip_endpoint.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/base/net_log.h"
|
| -#include "net/socket/client_socket_factory.h"
|
| -#include "net/socket/websocket_endpoint_lock_manager.h"
|
| -
|
| -namespace net {
|
| -
|
| -WebSocketTransportConnectSubJob::WebSocketTransportConnectSubJob(
|
| - const AddressList& addresses,
|
| - WebSocketTransportConnectJob* parent_job,
|
| - SubJobType type)
|
| - : parent_job_(parent_job),
|
| - addresses_(addresses),
|
| - current_address_index_(0),
|
| - next_state_(STATE_NONE),
|
| - type_(type) {}
|
| -
|
| -WebSocketTransportConnectSubJob::~WebSocketTransportConnectSubJob() {
|
| - // We don't worry about cancelling the TCP connect, since ~StreamSocket will
|
| - // take care of it.
|
| - if (next()) {
|
| - DCHECK_EQ(STATE_OBTAIN_LOCK_COMPLETE, next_state_);
|
| - // The ~Waiter destructor will remove this object from the waiting list.
|
| - } else if (next_state_ == STATE_TRANSPORT_CONNECT_COMPLETE) {
|
| - WebSocketEndpointLockManager::GetInstance()->UnlockEndpoint(
|
| - CurrentAddress());
|
| - }
|
| -}
|
| -
|
| -// Start connecting.
|
| -int WebSocketTransportConnectSubJob::Start() {
|
| - DCHECK_EQ(STATE_NONE, next_state_);
|
| - next_state_ = STATE_OBTAIN_LOCK;
|
| - return DoLoop(OK);
|
| -}
|
| -
|
| -// Called by WebSocketEndpointLockManager when the lock becomes available.
|
| -void WebSocketTransportConnectSubJob::GotEndpointLock() {
|
| - DCHECK_EQ(STATE_OBTAIN_LOCK_COMPLETE, next_state_);
|
| - OnIOComplete(OK);
|
| -}
|
| -
|
| -LoadState WebSocketTransportConnectSubJob::GetLoadState() const {
|
| - switch (next_state_) {
|
| - case STATE_OBTAIN_LOCK:
|
| - case STATE_OBTAIN_LOCK_COMPLETE:
|
| - // TODO(ricea): Add a WebSocket-specific LOAD_STATE ?
|
| - return LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET;
|
| - case STATE_TRANSPORT_CONNECT:
|
| - case STATE_TRANSPORT_CONNECT_COMPLETE:
|
| - case STATE_DONE:
|
| - return LOAD_STATE_CONNECTING;
|
| - case STATE_NONE:
|
| - return LOAD_STATE_IDLE;
|
| - }
|
| - NOTREACHED();
|
| - return LOAD_STATE_IDLE;
|
| -}
|
| -
|
| -ClientSocketFactory* WebSocketTransportConnectSubJob::client_socket_factory()
|
| - const {
|
| - return parent_job_->helper_.client_socket_factory();
|
| -}
|
| -
|
| -const BoundNetLog& WebSocketTransportConnectSubJob::net_log() const {
|
| - return parent_job_->net_log();
|
| -}
|
| -
|
| -const IPEndPoint& WebSocketTransportConnectSubJob::CurrentAddress() const {
|
| - DCHECK_LT(current_address_index_, addresses_.size());
|
| - return addresses_[current_address_index_];
|
| -}
|
| -
|
| -void WebSocketTransportConnectSubJob::OnIOComplete(int result) {
|
| - int rv = DoLoop(result);
|
| - if (rv != ERR_IO_PENDING)
|
| - parent_job_->OnSubJobComplete(rv, this); // |this| deleted
|
| -}
|
| -
|
| -int WebSocketTransportConnectSubJob::DoLoop(int result) {
|
| - DCHECK_NE(next_state_, STATE_NONE);
|
| -
|
| - int rv = result;
|
| - do {
|
| - State state = next_state_;
|
| - next_state_ = STATE_NONE;
|
| - switch (state) {
|
| - case STATE_OBTAIN_LOCK:
|
| - DCHECK_EQ(OK, rv);
|
| - rv = DoEndpointLock();
|
| - break;
|
| - case STATE_OBTAIN_LOCK_COMPLETE:
|
| - DCHECK_EQ(OK, rv);
|
| - rv = DoEndpointLockComplete();
|
| - break;
|
| - case STATE_TRANSPORT_CONNECT:
|
| - DCHECK_EQ(OK, rv);
|
| - rv = DoTransportConnect();
|
| - break;
|
| - case STATE_TRANSPORT_CONNECT_COMPLETE:
|
| - rv = DoTransportConnectComplete(rv);
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - rv = ERR_FAILED;
|
| - break;
|
| - }
|
| - } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE &&
|
| - next_state_ != STATE_DONE);
|
| -
|
| - return rv;
|
| -}
|
| -
|
| -int WebSocketTransportConnectSubJob::DoEndpointLock() {
|
| - int rv = WebSocketEndpointLockManager::GetInstance()->LockEndpoint(
|
| - CurrentAddress(), this);
|
| - next_state_ = STATE_OBTAIN_LOCK_COMPLETE;
|
| - return rv;
|
| -}
|
| -
|
| -int WebSocketTransportConnectSubJob::DoEndpointLockComplete() {
|
| - next_state_ = STATE_TRANSPORT_CONNECT;
|
| - return OK;
|
| -}
|
| -
|
| -int WebSocketTransportConnectSubJob::DoTransportConnect() {
|
| - // TODO(ricea): Update global g_last_connect_time and report
|
| - // ConnectInterval.
|
| - next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE;
|
| - AddressList one_address(CurrentAddress());
|
| - transport_socket_ = client_socket_factory()->CreateTransportClientSocket(
|
| - one_address, net_log().net_log(), net_log().source());
|
| - // This use of base::Unretained() is safe because transport_socket_ is
|
| - // destroyed in the destructor.
|
| - return transport_socket_->Connect(base::Bind(
|
| - &WebSocketTransportConnectSubJob::OnIOComplete, base::Unretained(this)));
|
| -}
|
| -
|
| -int WebSocketTransportConnectSubJob::DoTransportConnectComplete(int result) {
|
| - next_state_ = STATE_DONE;
|
| - WebSocketEndpointLockManager* endpoint_lock_manager =
|
| - WebSocketEndpointLockManager::GetInstance();
|
| - if (result != OK) {
|
| - endpoint_lock_manager->UnlockEndpoint(CurrentAddress());
|
| -
|
| - if (current_address_index_ + 1 < addresses_.size()) {
|
| - // Try falling back to the next address in the list.
|
| - next_state_ = STATE_OBTAIN_LOCK;
|
| - ++current_address_index_;
|
| - result = OK;
|
| - }
|
| -
|
| - return result;
|
| - }
|
| -
|
| - endpoint_lock_manager->RememberSocket(transport_socket_.get(),
|
| - CurrentAddress());
|
| -
|
| - return result;
|
| -}
|
| -
|
| -} // namespace net
|
|
|