blob: cf8ce38f1311f3cf521549ab05fd72240d34c0e3 [file] [log] [blame]
// 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_SILO_H_
#define QUICHE_QUIC_QBONE_BONNET_QBONE_TUNNEL_SILO_H_
#include "absl/synchronization/notification.h"
#include "quic/platform/api/quic_thread.h"
#include "quic/qbone/bonnet/qbone_tunnel_interface.h"
namespace quic {
// QboneTunnelSilo is a thread that initializes and evaluates a QboneTunnel's
// event loop.
class QboneTunnelSilo : public QuicThread {
public:
// Does not take ownership of |tunnel|
explicit QboneTunnelSilo(QboneTunnelInterface* tunnel, bool only_setup_tun)
: QuicThread("QboneTunnelSilo"),
tunnel_(tunnel),
only_setup_tun_(only_setup_tun) {}
QboneTunnelSilo(const QboneTunnelSilo&) = delete;
QboneTunnelSilo& operator=(const QboneTunnelSilo&) = delete;
QboneTunnelSilo(QboneTunnelSilo&&) = delete;
QboneTunnelSilo& operator=(QboneTunnelSilo&&) = delete;
// Terminates the tunnel's event loop. This silo must still be joined.
void Quit();
protected:
void Run() override;
private:
bool ShouldRun();
QboneTunnelInterface* tunnel_;
absl::Notification quitting_;
const bool only_setup_tun_;
};
} // namespace quic
#endif // QUICHE_QUIC_QBONE_BONNET_QBONE_TUNNEL_SILO_H_