// Copyright (c) 2020 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.

#ifndef QUICHE_QUIC_QBONE_BONNET_QBONE_TUNNEL_INTERFACE_H_
#define QUICHE_QUIC_QBONE_BONNET_QBONE_TUNNEL_INTERFACE_H_

#include "quic/qbone/qbone_client.h"

namespace quic {

// Interface for establishing bidirectional communication between a network
// device and a QboneClient.
class QboneTunnelInterface : public quic::QboneClientControlStream::Handler {
 public:
  QboneTunnelInterface() = default;

  QboneTunnelInterface(const QboneTunnelInterface&) = delete;
  QboneTunnelInterface& operator=(const QboneTunnelInterface&) = delete;

  QboneTunnelInterface(QboneTunnelInterface&&) = delete;
  QboneTunnelInterface& operator=(QboneTunnelInterface&&) = delete;

  enum State {
    UNINITIALIZED,
    IP_RANGE_REQUESTED,
    START_REQUESTED,
    STARTED,
    LAME_DUCK_REQUESTED,
    END_REQUESTED,
    ENDED,
    FAILED,
  };

  // Wait and handle any events which occur.
  // Returns true if there are any outstanding requests.
  virtual bool WaitForEvents() = 0;

  // Wakes the tunnel if it is currently in WaitForEvents.
  virtual void Wake() = 0;

  // Disconnect the tunnel, resetting it to an uninitialized state. This will
  // force ConnectIfNeeded to reconnect on the next epoll cycle.
  virtual void ResetTunnel() = 0;

  // Disconnect from the QBONE server.
  virtual State Disconnect() = 0;

  // Callback handling responses from the QBONE server.
  void OnControlRequest(const QboneClientRequest& request) override = 0;

  // Callback handling bad responses from the QBONE server. Currently, this is
  // only called when the response is unparsable.
  void OnControlError() override = 0;

  // Returns a string value of the given state.
  virtual std::string StateToString(State state) = 0;

  virtual QboneClient* client() = 0;

  virtual State state() = 0;

  virtual std::string HealthString() = 0;
};

}  // namespace quic

#endif  // QUICHE_QUIC_QBONE_BONNET_QBONE_TUNNEL_INTERFACE_H_
