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