blob: 29509c33d922301fc64bd301a74d87b0d2cbda79 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef OSP_IMPL_QUIC_QUIC_PROTOCOL_CONNECTION_H_
#define OSP_IMPL_QUIC_QUIC_PROTOCOL_CONNECTION_H_
#include <cstdint>
#include <memory>
#include "osp/public/protocol_connection.h"
namespace openscreen::osp {
class QuicConnection;
class QuicStream;
class QuicStreamManager;
class QuicProtocolConnection final : public ProtocolConnection {
public:
class Owner {
public:
virtual ~Owner() = default;
// Called right before `connection` is destroyed (destructor runs).
virtual void OnConnectionDestroyed(QuicProtocolConnection& connection) = 0;
};
static std::unique_ptr<QuicProtocolConnection> FromExisting(
Owner& owner,
QuicConnection& connection,
QuicStreamManager& manager,
uint64_t instance_id);
QuicProtocolConnection(Owner& owner,
QuicStream& stream,
uint64_t instance_id);
QuicProtocolConnection(const QuicProtocolConnection&) = delete;
QuicProtocolConnection& operator=(const QuicProtocolConnection&) = delete;
QuicProtocolConnection(QuicProtocolConnection&&) noexcept = delete;
QuicProtocolConnection& operator=(QuicProtocolConnection&&) noexcept = delete;
~QuicProtocolConnection() override;
// ProtocolConnection overrides.
uint64_t GetInstanceID() const override { return instance_id_; }
uint64_t GetID() const override;
void Write(ByteView bytes) override;
void CloseWriteEnd() override;
void OnClose();
private:
Owner& owner_;
uint64_t instance_id_ = 0u;
QuicStream* stream_ = nullptr;
};
} // namespace openscreen::osp
#endif // OSP_IMPL_QUIC_QUIC_PROTOCOL_CONNECTION_H_