blob: 87dc14b9e57c96c612b41512b18f33386cdc3eba [file]
// Copyright 2024 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.
#include "quiche/quic/moqt/test_tools/moqt_framer_utils.h"
#include <string>
#include <variant>
#include "quiche/quic/moqt/moqt_framer.h"
#include "quiche/quic/moqt/moqt_messages.h"
#include "quiche/common/quiche_buffer_allocator.h"
namespace moqt::test {
namespace {
struct FramingVisitor {
quiche::QuicheBuffer operator()(const MoqtClientSetup& message) {
return framer.SerializeClientSetup(message);
}
quiche::QuicheBuffer operator()(const MoqtServerSetup& message) {
return framer.SerializeServerSetup(message);
}
quiche::QuicheBuffer operator()(const MoqtRequestOk& message) {
return framer.SerializeRequestOk(message);
}
quiche::QuicheBuffer operator()(const MoqtRequestError& message) {
return framer.SerializeRequestError(message);
}
quiche::QuicheBuffer operator()(const MoqtSubscribe& message) {
return framer.SerializeSubscribe(message);
}
quiche::QuicheBuffer operator()(const MoqtSubscribeOk& message) {
return framer.SerializeSubscribeOk(message);
}
quiche::QuicheBuffer operator()(const MoqtUnsubscribe& message) {
return framer.SerializeUnsubscribe(message);
}
quiche::QuicheBuffer operator()(const MoqtPublishDone& message) {
return framer.SerializePublishDone(message);
}
quiche::QuicheBuffer operator()(const MoqtRequestUpdate& message) {
return framer.SerializeRequestUpdate(message);
}
quiche::QuicheBuffer operator()(const MoqtPublishNamespace& message) {
return framer.SerializePublishNamespace(message);
}
quiche::QuicheBuffer operator()(const MoqtPublishNamespaceDone& message) {
return framer.SerializePublishNamespaceDone(message);
}
quiche::QuicheBuffer operator()(const MoqtNamespace& message) {
return framer.SerializeNamespace(message);
}
quiche::QuicheBuffer operator()(const MoqtNamespaceDone& message) {
return framer.SerializeNamespaceDone(message);
}
quiche::QuicheBuffer operator()(const MoqtPublishNamespaceCancel& message) {
return framer.SerializePublishNamespaceCancel(message);
}
quiche::QuicheBuffer operator()(const MoqtTrackStatus& message) {
return framer.SerializeTrackStatus(message);
}
quiche::QuicheBuffer operator()(const MoqtGoAway& message) {
return framer.SerializeGoAway(message);
}
quiche::QuicheBuffer operator()(const MoqtSubscribeNamespace& message) {
return framer.SerializeSubscribeNamespace(message);
}
quiche::QuicheBuffer operator()(const MoqtMaxRequestId& message) {
return framer.SerializeMaxRequestId(message);
}
quiche::QuicheBuffer operator()(const MoqtFetch& message) {
return framer.SerializeFetch(message);
}
quiche::QuicheBuffer operator()(const MoqtFetchCancel& message) {
return framer.SerializeFetchCancel(message);
}
quiche::QuicheBuffer operator()(const MoqtFetchOk& message) {
return framer.SerializeFetchOk(message);
}
quiche::QuicheBuffer operator()(const MoqtRequestsBlocked& message) {
return framer.SerializeRequestsBlocked(message);
}
quiche::QuicheBuffer operator()(const MoqtPublish& message) {
return framer.SerializePublish(message);
}
quiche::QuicheBuffer operator()(const MoqtObjectAck& message) {
return framer.SerializeObjectAck(message);
}
MoqtFramer& framer;
bool is_track_status;
};
} // namespace
std::string SerializeGenericMessage(const AnyMoqtControlMessage& frame,
bool use_webtrans) {
MoqtFramer framer(use_webtrans);
return std::string(std::visit(FramingVisitor{framer}, frame).AsStringView());
}
} // namespace moqt::test