diff --git a/ctest/qtest.cpp b/ctest/qtest.cpp index 4d51e0e..bc6563c 100644 --- a/ctest/qtest.cpp +++ b/ctest/qtest.cpp @@ -33,7 +33,8 @@ class QSubscriptionTestDelegate : public qmedia::QSubscriptionDelegate logger->Log("QSubscriptionTestDelegate constructed"); } public: - int prepare(const std::string& sourceId, const std::string& label, const qmedia::manifest::ProfileSet& profileSet, bool& reliable) override { + int prepare(const std::string& sourceId, const std::string& label, const qmedia::manifest::ProfileSet& profileSet, quicr::TransportMode& transportMode) override { + transportMode = quicr::TransportMode::ReliablePerGroup; logger->Log("QSubscriptionTestDelegate::prepare"); return 0; } @@ -96,7 +97,8 @@ class QPublicationTestDelegate : public qmedia::QPublicationDelegate logger->Log("QPublicationTestDelegate constructed"); } public: - int prepare(const std::string& sourceId, const std::string& qualityProfile, bool& reliable) { + int prepare(const std::string& sourceId, const std::string& qualityProfile, quicr::TransportMode& transportMode) { + transportMode = quicr::TransportMode::ReliablePerGroup; logger->Log("QPublicationTestDelegate::prepare"); std::cerr << "pub prepare " << std::endl; return 0; diff --git a/include/qmedia/QController.hpp b/include/qmedia/QController.hpp index bc0b20c..b51bcc2 100644 --- a/include/qmedia/QController.hpp +++ b/include/qmedia/QController.hpp @@ -89,7 +89,7 @@ class QController const quicr::Namespace& quicrNamespace, const quicr::SubscribeIntent intent, const std::string& originUrl, - const bool useReliableTransport, + const quicr::TransportMode transportMode, const std::string& authToken, quicr::bytes&& e2eToken, std::shared_ptr delegate); @@ -104,7 +104,7 @@ class QController quicr::bytes&& payload, const std::vector& priority, const std::vector& expiry, - bool reliableTransport); + const quicr::TransportMode transportMode); std::shared_ptr getSubscriptionDelegate(const SourceId& sourceId, const manifest::ProfileSet& profileSet); @@ -118,7 +118,7 @@ class QController const quicr::Namespace& quicrNamespace, const quicr::SubscribeIntent intent, const std::string& originUrl, - const bool useReliableTransport, + const quicr::TransportMode transportMode, const std::string& authToken, quicr::bytes& e2eToken); @@ -130,7 +130,7 @@ class QController quicr::bytes&& payload, const std::vector& priority, const std::vector& expiry, - bool reliableTransport); + const quicr::TransportMode transportMode); void stopPublication(const quicr::Namespace& quicrNamespace); @@ -145,7 +145,6 @@ class QController std::mutex pubsMutex; const cantina::LoggerPointer logger; - const quicr::TransportMode _def_reliable_mode = quicr::TransportMode::ReliablePerGroup; std::shared_ptr qSubscriberDelegate; std::shared_ptr qPublisherDelegate; diff --git a/include/qmedia/QDelegates.hpp b/include/qmedia/QDelegates.hpp index 557920d..0f99229 100644 --- a/include/qmedia/QDelegates.hpp +++ b/include/qmedia/QDelegates.hpp @@ -19,7 +19,7 @@ class QSubscriptionDelegate virtual int prepare(const std::string& sourceId, const std::string& label, const manifest::ProfileSet& profiles, - bool& reliable) = 0; + quicr::TransportMode& transportMode) = 0; virtual int update(const std::string& sourceId, const std::string& label, const manifest::ProfileSet& profiles) = 0; virtual int subscribedObject(const quicr::Namespace& quicrNamespace, quicr::bytes&& data, std::uint32_t groupId, std::uint16_t objectId) = 0; }; @@ -27,7 +27,7 @@ class QSubscriptionDelegate class QPublicationDelegate { public: - virtual int prepare(const std::string& sourceId, const std::string& qualityProfile, bool& reliable) = 0; + virtual int prepare(const std::string& sourceId, const std::string& qualityProfile, quicr::TransportMode& transportMode) = 0; virtual int update(const std::string& sourceId, const std::string& qualityProfile) = 0; virtual void publish(bool) = 0; }; diff --git a/src/QController.cpp b/src/QController.cpp index 6482890..7733f8b 100644 --- a/src/QController.cpp +++ b/src/QController.cpp @@ -165,7 +165,7 @@ QController::createQuicrSubscriptionDelegate(const std::string& sourceId, const quicr::Namespace& quicrNamespace, const quicr::SubscribeIntent intent, const std::string& originUrl, - const bool useReliableTransport, + const quicr::TransportMode transportMode, const std::string& authToken, quicr::bytes&& e2eToken, std::shared_ptr qDelegate) @@ -177,12 +177,10 @@ QController::createQuicrSubscriptionDelegate(const std::string& sourceId, return nullptr; } - const quicr::TransportMode transport_mode = useReliableTransport ? _def_reliable_mode - : quicr::TransportMode::Unreliable; quicrSubscriptionsMap[quicrNamespace] = SubscriptionDelegate::create(sourceId, quicrNamespace, intent, - transport_mode, + transportMode, originUrl, authToken, std::move(e2eToken), @@ -210,11 +208,8 @@ QController::createQuicrPublicationDelegate(std::shared_ptr& priority, const std::vector& expiry, - bool reliableTransport) + const quicr::TransportMode transportMode) { - const quicr::TransportMode transport_mode = reliableTransport ? _def_reliable_mode - : quicr::TransportMode::Unreliable; - std::lock_guard _(pubsMutex); if (quicrPublicationsMap.contains(quicrNamespace)) { @@ -227,7 +222,7 @@ QController::createQuicrPublicationDelegate(std::shared_ptrsubscribe(client_session, transport_mode); + sub_delegate->subscribe(client_session, transportMode); return 0; } @@ -343,7 +335,7 @@ int QController::startPublication(std::shared_ptr quicr::bytes&& payload, const std::vector& priority, const std::vector& expiry, - bool reliableTransport) + const quicr::TransportMode transportMode) { if (!client_session) @@ -360,19 +352,15 @@ int QController::startPublication(std::shared_ptr std::move(payload), priority, expiry, - reliableTransport); + transportMode); if (!quicrPubDelegate) { LOGGER_ERROR(logger, "Failed to start publication for " << quicrNamespace << ": Delegate was null"); return -1; } - // TODO: hack till we update the manifest to provide transport mode - quicr::TransportMode transport_mode = reliableTransport ? _def_reliable_mode - : quicr::TransportMode::Unreliable; - // TODO: add more intent parameters - max queue size (in time), default ttl, priority - quicrPubDelegate->publishIntent(client_session, transport_mode); + quicrPubDelegate->publishIntent(client_session, transportMode); return 0; } @@ -395,8 +383,8 @@ void QController::processSubscriptions(const std::vector& continue; } - bool reliable = false; - int prepare_error = delegate->prepare(subscription.sourceId, subscription.label, subscription.profileSet, reliable); + auto transportMode = quicr::TransportMode::Unreliable; + int prepare_error = delegate->prepare(subscription.sourceId, subscription.label, subscription.profileSet, transportMode); if (prepare_error != 0) { LOGGER_ERROR(logger, "Error preparing subscription: " << prepare_error); @@ -411,7 +399,7 @@ void QController::processSubscriptions(const std::vector& profile.quicrNamespace, quicr::SubscribeIntent::sync_up, "", - reliable, + transportMode, "", e2eToken); @@ -439,8 +427,8 @@ void QController::processPublications(const std::vector& } // Notify client to prepare for incoming media - bool reliable = false; - int prepare_error = delegate->prepare(publication.sourceId, profile.qualityProfile, reliable); + auto transportMode = quicr::TransportMode::Unreliable; + int prepare_error = delegate->prepare(publication.sourceId, profile.qualityProfile, transportMode); if (prepare_error != 0) { LOGGER_WARNING(logger, @@ -457,7 +445,7 @@ void QController::processPublications(const std::vector& std::move(payload), profile.priorities, profile.expiry, - reliable); + transportMode); // If singleordered, and we've successfully processed 1 delegate, break. if (is_singleordered_publication) break; diff --git a/test/qmedia.cpp b/test/qmedia.cpp index f6e04f5..9ad0362 100644 --- a/test/qmedia.cpp +++ b/test/qmedia.cpp @@ -107,11 +107,11 @@ class QSubscriptionTestDelegate : public qmedia::QSubscriptionDelegate int prepare(const std::string& sourceId, const std::string& label, const qmedia::manifest::ProfileSet& /* profileSet */, - bool& reliable) override + quicr::TransportMode& transportMode) override { collector->sourceId(sourceId); collector->label(label); - reliable = true; // Testing microbursts data, which often results in drops. Use reliable for tests. + transportMode = quicr::TransportMode::ReliablePerGroup; // Testing microbursts data, which often results in drops. Use reliable for tests. // collector->qualityProfile(profileSet); return 0; } @@ -158,9 +158,9 @@ class QPublicationTestDelegate : public qmedia::QPublicationDelegate public: virtual ~QPublicationTestDelegate() = default; - int prepare(const std::string& /* sourceId */, const std::string& /* qualityProfile */, bool& reliable) + int prepare(const std::string& /* sourceId */, const std::string& /* qualityProfile */, quicr::TransportMode& transportMode) { - reliable = true; // Testing microbursts data, which often results in drops. Use reliable for tests. + transportMode = quicr::TransportMode::ReliablePerGroup; // Testing microbursts data, which often results in drops. Use reliable for tests. return 0; }