blob: 3b0271a40a81f66a7a41b9f1b038216c34736a72 [file] [log] [blame] [edit]
// Copyright 2023 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_MOQT_MOQT_SESSION_CALLBACKS_H_
#define QUICHE_QUIC_MOQT_MOQT_SESSION_CALLBACKS_H_
#include <optional>
#include "absl/strings/string_view.h"
#include "quiche/quic/core/quic_clock.h"
#include "quiche/quic/core/quic_default_clock.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/common/quiche_callbacks.h"
namespace moqt {
// Called when the SETUP message from the peer is received.
using MoqtSessionEstablishedCallback = quiche::SingleUseCallback<void()>;
// Called when a GOAWAY message is received from the server.
using MoqtSessionGoAwayCallback =
quiche::SingleUseCallback<void(absl::string_view new_session_uri)>;
// Called when the session is terminated.
using MoqtSessionTerminatedCallback =
quiche::SingleUseCallback<void(absl::string_view error_message)>;
// Called from the session destructor.
using MoqtSessionDeletedCallback = quiche::SingleUseCallback<void()>;
// Called whenever an ANNOUNCE or UNANNOUNCE message is received from the peer.
// ANNOUNCE sets a value for |parameters|, UNANNOUNCE does not.
using MoqtIncomingAnnounceCallback =
quiche::MultiUseCallback<std::optional<MoqtAnnounceErrorReason>(
const FullTrackName& track_namespace,
const std::optional<VersionSpecificParameters>& parameters)>;
// Called whenever SUBSCRIBE_ANNOUNCES or UNSUBSCRIBE_ANNOUNCES is received from
// the peer. For SUBSCRIBE_ANNOUNCES, the return value indicates whether to
// return an OK or an ERROR; for UNSUBSCRIBE_ANNOUNCES, the return value is
// ignored. SUBSCRIBE_ANNOUNCES sets a value for |parameters|,
// UNSUBSCRIBE_ANNOUNCES does not.
using MoqtIncomingSubscribeAnnouncesCallback =
quiche::MultiUseCallback<std::optional<MoqtSubscribeErrorReason>(
const FullTrackName& track_namespace,
std::optional<VersionSpecificParameters> parameters)>;
inline std::optional<MoqtAnnounceErrorReason> DefaultIncomingAnnounceCallback(
const FullTrackName& /*track_namespace*/,
std::optional<VersionSpecificParameters> /*parameters*/) {
return std::optional(MoqtAnnounceErrorReason{
RequestErrorCode::kNotSupported,
"This endpoint does not accept incoming ANNOUNCE messages"});
};
inline std::optional<MoqtSubscribeErrorReason>
DefaultIncomingSubscribeAnnouncesCallback(
const FullTrackName& track_namespace,
std::optional<VersionSpecificParameters> /*parameters*/) {
return MoqtSubscribeErrorReason{
RequestErrorCode::kNotSupported,
"This endpoint does not support incoming SUBSCRIBE_ANNOUNCES messages"};
}
// Callbacks for session-level events.
struct MoqtSessionCallbacks {
MoqtSessionEstablishedCallback session_established_callback = +[] {};
MoqtSessionGoAwayCallback goaway_received_callback =
+[](absl::string_view) {};
MoqtSessionTerminatedCallback session_terminated_callback =
+[](absl::string_view) {};
MoqtSessionDeletedCallback session_deleted_callback = +[] {};
MoqtIncomingAnnounceCallback incoming_announce_callback =
DefaultIncomingAnnounceCallback;
MoqtIncomingSubscribeAnnouncesCallback incoming_subscribe_announces_callback =
DefaultIncomingSubscribeAnnouncesCallback;
const quic::QuicClock* clock = quic::QuicDefaultClock::Get();
};
} // namespace moqt
#endif // QUICHE_QUIC_MOQT_MOQT_SESSION_CALLBACKS_H_