// Copyright 2013 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 "ppapi/shared_impl/ppb_tcp_socket_shared.h"

#include "base/logging.h"

namespace ppapi {

TCPSocketState::TCPSocketState(StateType state)
    : state_(state), pending_transition_(NONE) {
  DCHECK(state_ == INITIAL || state_ == CONNECTED);
}

TCPSocketState::~TCPSocketState() {}

void TCPSocketState::SetPendingTransition(TransitionType pending_transition) {
  DCHECK(IsValidTransition(pending_transition));
  pending_transition_ = pending_transition;
}

void TCPSocketState::CompletePendingTransition(bool success) {
  switch (pending_transition_) {
    case NONE:
      NOTREACHED();
      break;
    case BIND:
      if (success)
        state_ = BOUND;
      break;
    case CONNECT:
      state_ = success ? CONNECTED : CLOSED;
      break;
    case SSL_CONNECT:
      state_ = success ? SSL_CONNECTED : CLOSED;
      break;
    case LISTEN:
      state_ = success ? LISTENING : CLOSED;
      break;
    case CLOSE:
      state_ = CLOSED;
      break;
  }
  pending_transition_ = NONE;
}

void TCPSocketState::DoTransition(TransitionType transition, bool success) {
  SetPendingTransition(transition);
  CompletePendingTransition(success);
}

bool TCPSocketState::IsValidTransition(TransitionType transition) const {
  if (pending_transition_ != NONE && transition != CLOSE)
    return false;

  switch (transition) {
    case NONE:
      return false;
    case BIND:
      return state_ == INITIAL;
    case CONNECT:
      return state_ == INITIAL || state_ == BOUND;
    case SSL_CONNECT:
      return state_ == CONNECTED;
    case LISTEN:
      return state_ == BOUND;
    case CLOSE:
      return true;
  }
  NOTREACHED();
  return false;
}

bool TCPSocketState::IsPending(TransitionType transition) const {
  return pending_transition_ == transition;
}

bool TCPSocketState::IsConnected() const {
  return state_ == CONNECTED || state_ == SSL_CONNECTED;
}

bool TCPSocketState::IsBound() const {
  return state_ != INITIAL && state_ != CLOSED;
}

}  // namespace ppapi
