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