| // 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_ |