diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 58f061f0..fd2bcf0f 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -35,8 +35,19 @@ jobs: if: matrix.os == 'macos-latest' - name: Install Packages (Ubuntu) - run: sudo apt-get install -y clang-tidy + run: | + sudo apt-get install -y clang-tidy + if: matrix.os == 'ubuntu-latest' + + # Work around https://github.com/actions/runner-images/issues/8659 + - name: "[Ubuntu] Remove GCC 13 from runner image" if: matrix.os == 'ubuntu-latest' + shell: bash + run: | + echo "TEMPORARY WORKAROUND FOR GITHUB RUNNER BUG #8659\n\nRemoving GCC 13 as it breaks Clang14" + sudo rm -f /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-jammy.list + sudo apt-get update + sudo apt-get install -y --allow-downgrades libc6=2.35-0ubuntu3.4 libc6-dev=2.35-0ubuntu3.4 libstdc++6=12.3.0-1ubuntu1~22.04 libgcc-s1=12.3.0-1ubuntu1~22.04 - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. diff --git a/dependencies/qname b/dependencies/qname index d93e27ba..0f525bfa 160000 --- a/dependencies/qname +++ b/dependencies/qname @@ -1 +1 @@ -Subproject commit d93e27baac72d35b5788b7d1eea06ec62dcb3b4a +Subproject commit 0f525bfa67cde7df5c110dc90f6b7d9422f249e8 diff --git a/dependencies/transport b/dependencies/transport index faafe61a..ffc9bd95 160000 --- a/dependencies/transport +++ b/dependencies/transport @@ -1 +1 @@ -Subproject commit faafe61a178c67ccbee483389660c9c1b6e207c9 +Subproject commit ffc9bd954d4759cbbe40edd845b34385b47f4717 diff --git a/include/quicr/quicr_client.h b/include/quicr/quicr_client.h index 18cb7a62..462ae243 100644 --- a/include/quicr/quicr_client.h +++ b/include/quicr/quicr_client.h @@ -92,13 +92,16 @@ class Client * @param payload : Opaque payload to be forwarded to Origin * @param use_reliable_transport : Indicates to use reliable for matching * published objects + * @param priority : Identifies the relative priority for the stream if reliable + * */ bool publishIntent(std::shared_ptr pub_delegate, const quicr::Namespace& quicr_namespace, const std::string& origin_url, const std::string& auth_token, bytes&& payload, - bool use_reliable_transport = false); + bool use_reliable_transport = false, + uint8_t priority = 1); /** * @brief Stop publishing on the given QUICR namespace diff --git a/include/quicr/quicr_client_session.h b/include/quicr/quicr_client_session.h index 7b338159..2dae6dc1 100644 --- a/include/quicr/quicr_client_session.h +++ b/include/quicr/quicr_client_session.h @@ -68,13 +68,15 @@ class ClientSession * Origin * @param use_reliable_transport : Indicates to use reliable for matching * published objects + * @param priority : Identifies the relative priority for the stream if reliable */ virtual bool publishIntent(std::shared_ptr pub_delegate, const quicr::Namespace& quicr_namespace, const std::string& origin_url, const std::string& auth_token, bytes&& payload, - bool use_reliable_transport) = 0; + bool use_reliable_transport, + uint8_t priority) = 0; /** * @brief Stop publishing on the given QUICR namespace diff --git a/src/quicr_client.cpp b/src/quicr_client.cpp index 3a37c2bd..90d19fa5 100644 --- a/src/quicr_client.cpp +++ b/src/quicr_client.cpp @@ -60,14 +60,16 @@ Client::publishIntent(std::shared_ptr pub_delegate, const std::string& origin_url, const std::string& auth_token, bytes&& payload, - bool use_reliable_transport) + bool use_reliable_transport, + uint8_t priority) { return client_session->publishIntent(std::move(pub_delegate), quicr_namespace, origin_url, auth_token, std::move(payload), - use_reliable_transport); + use_reliable_transport, + priority); } void diff --git a/src/quicr_client_raw_session.cpp b/src/quicr_client_raw_session.cpp index 166d2b4b..93f963ac 100644 --- a/src/quicr_client_raw_session.cpp +++ b/src/quicr_client_raw_session.cpp @@ -250,7 +250,8 @@ ClientRawSession::publishIntent(std::shared_ptr pub_delegate, const std::string& /* origin_url */, const std::string& /* auth_token */, bytes&& payload, - bool use_reliable_transport) + bool use_reliable_transport, + uint8_t priority) { if (pub_delegates.contains(quicr_namespace)) { return true; @@ -261,7 +262,8 @@ ClientRawSession::publishIntent(std::shared_ptr pub_delegate, const auto& context_id = transport_context_id.value(); auto stream_id = transport_dgram_stream_id.value(); if (use_reliable_transport) { - stream_id = transport->createStream(context_id, true); + stream_id = transport->createStream(context_id, true, priority); + logger->debug << "Set stream: " << stream_id << " to priority: " << static_cast(priority) << std::flush; } publish_state[quicr_namespace] = { diff --git a/src/quicr_client_raw_session.h b/src/quicr_client_raw_session.h index 22c5a640..82e23f2f 100644 --- a/src/quicr_client_raw_session.h +++ b/src/quicr_client_raw_session.h @@ -98,14 +98,16 @@ class ClientRawSession * @param payload : Opaque payload to be forwarded to the * Origin * @param use_reliable_transport : Indicates to use reliable for matching - * published objects + * published objects + * @param priority : Identifies the relative priority for the stream if reliable */ bool publishIntent(std::shared_ptr pub_delegate, const quicr::Namespace& quicr_namespace, const std::string& origin_url, const std::string& auth_token, bytes&& payload, - bool use_reliable_transport) override; + bool use_reliable_transport, + uint8_t priority) override; /** * @brief Stop publishing on the given QUICR namespace