From a49aa205b1705b4ee82d7e0d4fbbcbaed730585e Mon Sep 17 00:00:00 2001
From: ValMobBIllich
Date: Wed, 23 Apr 2025 14:39:51 +0200
Subject: [PATCH] Added configurable streamer implementation and release
pipeline
- Added configurable streamer with MQTT and Zenoh support
- Implemented CI/CD pipeline for container builds
- Added example implementations and configurations
- Reorganized project structure and utilities
- Updated build system and documentation
---
.github/actions/setup-rust-cross/action.yaml | 28 +
.github/workflows/containerize-and-push.yaml | 160 ++
Cargo.lock | 1480 +++++++++++++----
Cargo.toml | 47 +-
Cross.toml | 20 +
configurable-streamer/CONFIG.json5 | 64 +
configurable-streamer/Cargo.toml | 39 +
configurable-streamer/Dockerfile.amd | 23 +
configurable-streamer/Dockerfile.arm | 23 +
configurable-streamer/MQTT_CONFIG.json5 | 14 +
configurable-streamer/README.md | 124 ++
configurable-streamer/ZENOH_CONFIG.json5 | 25 +
configurable-streamer/src/config.rs | 93 ++
configurable-streamer/src/main.rs | 191 +++
configurable-streamer/subscription_data.json | 4 +
example-streamer-implementations/Cargo.toml | 8 +-
.../DEFAULT_CONFIG.json5 | 1 +
.../ZENOH_CONFIG.json5 | 12 +-
.../src/bin/config/mod.rs | 1 +
.../src/bin/zenoh_mqtt.rs | 138 --
example-streamer-uses/src/bin/mqtt_client.rs | 36 +-
.../src/bin/mqtt_publisher.rs | 36 +-
example-streamer-uses/src/bin/mqtt_service.rs | 36 +-
.../src/bin/mqtt_subscriber.rs | 36 +-
example-streamer-uses/src/bin/zenoh_client.rs | 4 +-
.../src/bin/zenoh_publisher.rs | 4 +-
.../src/bin/zenoh_service.rs | 4 +-
.../src/bin/zenoh_subscriber.rs | 4 +-
.../vsomeip-configs/someip_client.json | 13 +-
.../vsomeip-configs/someip_publisher.json | 13 +-
.../vsomeip-configs/someip_service.json | 13 +-
.../vsomeip-configs/someip_subscriber.json | 13 +-
up-linux-streamer-plugin/Cargo.toml | 17 +-
up-streamer/src/ustreamer.rs | 26 +-
.../tests/single_local_single_remote.rs | 2 +-
utils/hello-world-protos/Cargo.toml | 2 +-
utils/hello-world-protos/build.rs | 2 +-
.../src/up_client_foo.rs | 81 +-
utils/mosquitto/docker-compose.yaml | 2 +-
39 files changed, 2163 insertions(+), 676 deletions(-)
create mode 100644 .github/actions/setup-rust-cross/action.yaml
create mode 100644 .github/workflows/containerize-and-push.yaml
create mode 100644 Cross.toml
create mode 100644 configurable-streamer/CONFIG.json5
create mode 100644 configurable-streamer/Cargo.toml
create mode 100644 configurable-streamer/Dockerfile.amd
create mode 100644 configurable-streamer/Dockerfile.arm
create mode 100644 configurable-streamer/MQTT_CONFIG.json5
create mode 100644 configurable-streamer/README.md
create mode 100644 configurable-streamer/ZENOH_CONFIG.json5
create mode 100644 configurable-streamer/src/config.rs
create mode 100644 configurable-streamer/src/main.rs
create mode 100644 configurable-streamer/subscription_data.json
delete mode 100644 example-streamer-implementations/src/bin/zenoh_mqtt.rs
diff --git a/.github/actions/setup-rust-cross/action.yaml b/.github/actions/setup-rust-cross/action.yaml
new file mode 100644
index 00000000..d8598ffe
--- /dev/null
+++ b/.github/actions/setup-rust-cross/action.yaml
@@ -0,0 +1,28 @@
+# ********************************************************************************
+# Copyright (c) 2025 Contributors to the Eclipse Foundation
+#
+# See the NOTICE file(s) distributed with this work for additional
+# information regarding copyright ownership.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Apache License Version 2.0 which is available at
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# SPDX-License-Identifier: Apache-2.0
+# *******************************************************************************/
+
+name: "Setup Rust and Cross"
+description: "Installs Rust and the Cross crate"
+runs:
+ using: "composite"
+ steps:
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ profile: minimal
+ override: true
+
+ - name: Install Cross
+ shell: bash
+ run: cargo install cross --git https://github.com/cross-rs/cross
diff --git a/.github/workflows/containerize-and-push.yaml b/.github/workflows/containerize-and-push.yaml
new file mode 100644
index 00000000..b21cbaf5
--- /dev/null
+++ b/.github/workflows/containerize-and-push.yaml
@@ -0,0 +1,160 @@
+# ********************************************************************************
+# Copyright (c) 2025 Contributors to the Eclipse Foundation
+#
+# See the NOTICE file(s) distributed with this work for additional
+# information regarding copyright ownership.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Apache License Version 2.0 which is available at
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# SPDX-License-Identifier: Apache-2.0
+# *******************************************************************************/
+
+name: Containerize uStreamer and Push to Container Registry
+
+on:
+ workflow_dispatch:
+
+env:
+ REGISTRY: ghcr.io
+ IMAGE_NAME: ${{ github.repository }}/configurable-streamer
+
+jobs:
+ setup:
+ runs-on: ubuntu-latest
+ outputs:
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
+ steps:
+ - name: Extract metadata and create tag
+ id: meta
+ uses: docker/metadata-action@v5
+ with:
+ images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
+ tags: |
+ type=ref,event=branch
+ type=ref,event=tag
+ type=ref,event=pr
+
+ build-arm64:
+ needs: setup
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+ outputs:
+ digest: ${{ steps.build_and_push.outputs.digest }}
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Docker buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Login to the Container registry
+ uses: docker/login-action@v3
+ with:
+ registry: ${{ env.REGISTRY }}
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Install Rust and Cross
+ uses: ./.github/actions/setup-rust-cross
+
+ - name: Cross Build for arm64
+ working-directory: configurable-streamer
+ run: |
+ cross build --target aarch64-unknown-linux-musl --release
+
+ - name: Fix Registry and Repository names
+ shell: bash
+ run: |
+ echo "REGISTRY=$(echo $REGISTRY | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
+ echo "IMAGE_NAME=$(echo $IMAGE_NAME | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
+
+ - name: Build and push Docker image for arm64
+ id: build_and_push
+ uses: docker/build-push-action@v5
+ with:
+ context: .
+ file: "configurable-streamer/Dockerfile.arm"
+ push: true
+ platforms: linux/arm64
+ tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:arm64-${{ github.sha }}
+ labels: ${{ needs.setup.outputs.labels }}
+
+ build-amd64:
+ needs: setup
+ runs-on: ubuntu-latest
+ outputs:
+ digest: ${{ steps.build_and_push.outputs.digest }}
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Docker buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Login to the Container registry
+ uses: docker/login-action@v3
+ with:
+ registry: ${{ env.REGISTRY }}
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Install Rust and Cross
+ uses: ./.github/actions/setup-rust-cross
+
+ - name: Cross Build for amd64
+ working-directory: configurable-streamer
+ run: |
+ cross build --target x86_64-unknown-linux-musl --release
+
+ - name: Fix Registry and Repository names
+ shell: bash
+ run: |
+ echo "REGISTRY=$(echo $REGISTRY | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
+ echo "IMAGE_NAME=$(echo $IMAGE_NAME | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
+
+ - name: Build and push Docker image for amd64
+ id: build_and_push
+ uses: docker/build-push-action@v5
+ with:
+ context: .
+ file: "configurable-streamer/Dockerfile.amd"
+ push: true
+ platforms: linux/amd64
+ tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:amd64-${{ github.sha }}
+ labels: ${{ needs.setup.outputs.labels }}
+
+ create-manifest:
+ needs: [setup, build-arm64, build-amd64]
+ runs-on: ubuntu-latest
+ permissions:
+ packages: write
+ steps:
+ - name: Login to the Container registry
+ uses: docker/login-action@v3
+ with:
+ registry: ${{ env.REGISTRY }}
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Fix Registry and Repository names
+ shell: bash
+ run: |
+ echo "REGISTRY=$(echo $REGISTRY | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
+ echo "IMAGE_NAME=$(echo $IMAGE_NAME | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
+
+ - name: Create and push manifest
+ shell: bash
+ run: |
+ for tag in ${{ needs.setup.outputs.tags }}; do
+ docker buildx imagetools create -t $tag \
+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:amd64-${{ github.sha }} \
+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:arm64-${{ github.sha }}
+ done
diff --git a/Cargo.lock b/Cargo.lock
index 01f869f9..1051518c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -35,7 +35,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
- "getrandom",
+ "getrandom 0.2.15",
"once_cell",
"version_check",
"zerocopy",
@@ -139,6 +139,12 @@ dependencies = [
"syn 1.0.109",
]
+[[package]]
+name = "arc-swap"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
+
[[package]]
name = "array-init"
version = "2.1.0"
@@ -157,7 +163,7 @@ dependencies = [
"nom",
"num-traits",
"rusticata-macros",
- "thiserror",
+ "thiserror 1.0.69",
"time",
]
@@ -169,7 +175,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
"synstructure",
]
@@ -181,7 +187,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -393,7 +399,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -451,7 +457,7 @@ dependencies = [
"regex",
"rustc-hash 1.1.0",
"shlex",
- "syn 2.0.86",
+ "syn 2.0.87",
"which",
]
@@ -464,7 +470,7 @@ dependencies = [
"autocxx-engine",
"env_logger 0.9.3",
"indexmap 1.9.3",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -491,9 +497,9 @@ dependencies = [
"rustversion",
"serde_json",
"strum_macros",
- "syn 2.0.86",
+ "syn 2.0.87",
"tempfile",
- "thiserror",
+ "thiserror 1.0.69",
"version_check",
]
@@ -507,7 +513,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -524,8 +530,41 @@ dependencies = [
"quote",
"serde",
"serde_json",
- "syn 2.0.86",
- "thiserror",
+ "syn 2.0.87",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "aws-lc-rs"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b756939cb2f8dc900aa6dcd505e6e2428e9cae7ff7b028c49e3946efa70878"
+dependencies = [
+ "aws-lc-sys",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-lc-sys"
+version = "0.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa9b6986f250236c27e5a204062434a773a13243d2ffc2955f37bdba4c5c6a1"
+dependencies = [
+ "bindgen",
+ "cc",
+ "cmake",
+ "dunce",
+ "fs_extra",
+]
+
+[[package]]
+name = "backon"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd0b50b1b78dbadd44ab18b3c794e496f3a139abb9fbc27d9c94c4eebbb96496"
+dependencies = [
+ "fastrand 2.1.1",
+ "tokio",
]
[[package]]
@@ -576,6 +615,29 @@ version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7"
+[[package]]
+name = "bindgen"
+version = "0.69.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088"
+dependencies = [
+ "bitflags 2.6.0",
+ "cexpr",
+ "clang-sys",
+ "itertools 0.10.5",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash 1.1.0",
+ "shlex",
+ "syn 2.0.87",
+ "which",
+]
+
[[package]]
name = "bitflags"
version = "1.3.2"
@@ -613,6 +675,56 @@ dependencies = [
"piper",
]
+[[package]]
+name = "bollard"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ccca1260af6a459d75994ad5acc1651bcabcbdbc41467cc9786519ab854c30"
+dependencies = [
+ "base64 0.22.1",
+ "bollard-stubs",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "hex",
+ "home",
+ "http",
+ "http-body-util",
+ "hyper",
+ "hyper-named-pipe",
+ "hyper-rustls",
+ "hyper-util",
+ "hyperlocal",
+ "log",
+ "pin-project-lite",
+ "rustls",
+ "rustls-native-certs 0.8.1",
+ "rustls-pemfile",
+ "rustls-pki-types",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_repr",
+ "serde_urlencoded",
+ "thiserror 2.0.12",
+ "tokio",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "winapi",
+]
+
+[[package]]
+name = "bollard-stubs"
+version = "1.47.1-rc.27.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f179cfbddb6e77a5472703d4b30436bff32929c0aa8a9008ecf23d1d3cdd0da"
+dependencies = [
+ "serde",
+ "serde_repr",
+ "serde_with",
+]
+
[[package]]
name = "bumpalo"
version = "3.16.0"
@@ -627,9 +739,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
-version = "1.8.0"
+version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da"
+checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
[[package]]
name = "cache-padded"
@@ -639,10 +751,12 @@ checksum = "981520c98f422fcc584dc1a95c334e6953900b9106bc47a9839b81790009eb21"
[[package]]
name = "cc"
-version = "1.1.31"
+version = "1.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f"
+checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362"
dependencies = [
+ "jobserver",
+ "libc",
"shlex",
]
@@ -683,6 +797,7 @@ dependencies = [
"iana-time-zone",
"js-sys",
"num-traits",
+ "serde",
"wasm-bindgen",
"windows-targets 0.52.6",
]
@@ -739,7 +854,7 @@ dependencies = [
"heck 0.5.0",
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -792,6 +907,27 @@ dependencies = [
"crossbeam-utils",
]
+[[package]]
+name = "configurable-streamer"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "clap",
+ "env_logger 0.10.2",
+ "hello-world-protos",
+ "json5",
+ "log",
+ "protobuf",
+ "serde",
+ "tokio",
+ "up-rust",
+ "up-streamer",
+ "up-transport-mqtt5",
+ "up-transport-zenoh",
+ "usubscription-static-file",
+ "zenoh",
+]
+
[[package]]
name = "const-oid"
version = "0.9.6"
@@ -828,6 +964,16 @@ dependencies = [
"libc",
]
+[[package]]
+name = "core-foundation"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
[[package]]
name = "core-foundation-sys"
version = "0.8.7"
@@ -911,7 +1057,7 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -923,7 +1069,7 @@ dependencies = [
"codespan-reporting",
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -940,7 +1086,42 @@ checksum = "a1719100f31492cd6adeeab9a0f46cdbc846e615fdb66d7b398aa46ec7fdd06f"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.87",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 2.0.87",
]
[[package]]
@@ -981,26 +1162,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
dependencies = [
"powerfmt",
-]
-
-[[package]]
-name = "derive_more"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
-dependencies = [
- "derive_more-impl",
-]
-
-[[package]]
-name = "derive_more-impl"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.86",
+ "serde",
]
[[package]]
@@ -1044,9 +1206,26 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
+]
+
+[[package]]
+name = "docker_credential"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31951f49556e34d90ed28342e1df7e1cb7a229c4cab0aecc627b5d91edd41d07"
+dependencies = [
+ "base64 0.21.7",
+ "serde",
+ "serde_json",
]
+[[package]]
+name = "dunce"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
+
[[package]]
name = "dyn-clone"
version = "1.0.17"
@@ -1102,12 +1281,23 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
-version = "0.3.9"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
+checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
dependencies = [
"libc",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "etcetera"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
+dependencies = [
+ "cfg-if",
+ "home",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1184,6 +1374,18 @@ version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6"
+[[package]]
+name = "filetime"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "libredox",
+ "windows-sys 0.59.0",
+]
+
[[package]]
name = "fixedbitset"
version = "0.4.2"
@@ -1208,6 +1410,12 @@ version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+[[package]]
+name = "foldhash"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+
[[package]]
name = "foreign-types"
version = "0.3.2"
@@ -1232,6 +1440,12 @@ dependencies = [
"percent-encoding",
]
+[[package]]
+name = "fs_extra"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
+
[[package]]
name = "futures"
version = "0.3.31"
@@ -1316,7 +1530,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -1374,10 +1588,22 @@ dependencies = [
"cfg-if",
"js-sys",
"libc",
- "wasi",
+ "wasi 0.11.0+wasi-snapshot-preview1",
"wasm-bindgen",
]
+[[package]]
+name = "getrandom"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi",
+ "wasi 0.14.2+wasi-0.2.4",
+]
+
[[package]]
name = "gimli"
version = "0.31.1"
@@ -1401,7 +1627,7 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -1459,9 +1685,14 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.15.0"
+version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb"
+checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
+dependencies = [
+ "allocator-api2",
+ "equivalent",
+ "foldhash",
+]
[[package]]
name = "heck"
@@ -1507,6 +1738,12 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
[[package]]
name = "hmac"
version = "0.12.1"
@@ -1565,6 +1802,12 @@ version = "1.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
[[package]]
name = "humantime"
version = "2.1.0"
@@ -1584,6 +1827,7 @@ dependencies = [
"http",
"http-body",
"httparse",
+ "httpdate",
"itoa",
"pin-project-lite",
"smallvec",
@@ -1591,6 +1835,21 @@ dependencies = [
"want",
]
+[[package]]
+name = "hyper-named-pipe"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278"
+dependencies = [
+ "hex",
+ "hyper",
+ "hyper-util",
+ "pin-project-lite",
+ "tokio",
+ "tower-service",
+ "winapi",
+]
+
[[package]]
name = "hyper-rustls"
version = "0.27.3"
@@ -1643,6 +1902,21 @@ dependencies = [
"tracing",
]
+[[package]]
+name = "hyperlocal"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "986c5ce3b994526b3cd75578e62554abd09f0899d6206de48b3e96ab34ccc8c7"
+dependencies = [
+ "hex",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "pin-project-lite",
+ "tokio",
+ "tower-service",
+]
+
[[package]]
name = "iana-time-zone"
version = "0.1.61"
@@ -1667,47 +1941,183 @@ dependencies = [
]
[[package]]
-name = "idna"
-version = "0.5.0"
+name = "icu_collections"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
dependencies = [
- "unicode-bidi",
- "unicode-normalization",
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+ "zerovec",
]
[[package]]
-name = "indexmap"
-version = "1.9.3"
+name = "icu_locid"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
dependencies = [
- "autocfg",
- "hashbrown 0.12.3",
- "serde",
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
]
[[package]]
-name = "indexmap"
-version = "2.6.0"
+name = "icu_locid_transform"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
+checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
dependencies = [
- "equivalent",
- "hashbrown 0.15.0",
+ "displaydoc",
+ "icu_locid",
+ "icu_locid_transform_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
]
[[package]]
-name = "indoc"
-version = "1.0.9"
+name = "icu_locid_transform_data"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306"
+checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d"
[[package]]
-name = "inout"
-version = "0.1.3"
+name = "icu_normalizer"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "utf16_iter",
+ "utf8_iter",
+ "write16",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7"
+
+[[package]]
+name = "icu_properties"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locid_transform",
+ "icu_properties_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2"
+
+[[package]]
+name = "icu_provider"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_provider_macros",
+ "stable_deref_trait",
+ "tinystr",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_provider_macros"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
+dependencies = [
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.15.2",
+ "serde",
+]
+
+[[package]]
+name = "indoc"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306"
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
dependencies = [
"generic-array",
]
@@ -1831,7 +2241,7 @@ dependencies = [
"combine",
"jni-sys",
"log",
- "thiserror",
+ "thiserror 1.0.69",
"walkdir",
]
@@ -1841,12 +2251,23 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+[[package]]
+name = "jobserver"
+version = "0.1.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
+dependencies = [
+ "getrandom 0.3.2",
+ "libc",
+]
+
[[package]]
name = "js-sys"
-version = "0.3.72"
+version = "0.3.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
dependencies = [
+ "once_cell",
"wasm-bindgen",
]
@@ -1905,9 +2326,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
-version = "0.2.161"
+version = "0.2.172"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1"
+checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
[[package]]
name = "libloading"
@@ -1933,6 +2354,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
dependencies = [
"bitflags 2.6.0",
"libc",
+ "redox_syscall 0.5.7",
]
[[package]]
@@ -1956,6 +2378,18 @@ version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+[[package]]
+name = "linux-raw-sys"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
+
+[[package]]
+name = "litemap"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856"
+
[[package]]
name = "lock_api"
version = "0.4.12"
@@ -2022,7 +2456,7 @@ dependencies = [
"supports-unicode",
"terminal_size",
"textwrap",
- "thiserror",
+ "thiserror 1.0.69",
"unicode-width",
]
@@ -2034,7 +2468,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -2066,7 +2500,7 @@ checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
dependencies = [
"hermit-abi 0.3.9",
"libc",
- "wasi",
+ "wasi 0.11.0+wasi-snapshot-preview1",
"windows-sys 0.52.0",
]
@@ -2085,7 +2519,7 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
dependencies = [
- "getrandom",
+ "getrandom 0.2.15",
]
[[package]]
@@ -2100,7 +2534,7 @@ dependencies = [
"openssl-probe",
"openssl-sys",
"schannel",
- "security-framework",
+ "security-framework 2.11.1",
"security-framework-sys",
"tempfile",
]
@@ -2133,6 +2567,15 @@ dependencies = [
"minimal-lexical",
]
+[[package]]
+name = "nonempty-collections"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7f301452dbaf00f14ca0c8204e46cf0c9a96f53543ac72cefa9b4d91c19e0ac"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "nu-ansi-term"
version = "0.46.0"
@@ -2263,7 +2706,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -2320,9 +2763,9 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
[[package]]
name = "paho-mqtt"
-version = "0.12.5"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8367868d51cef74c28da328ed8f60529ddd3f04dca1867dd825fcc3085a4308"
+checksum = "852a41a43e1fab8cc7d263fa2e475da52aed2b06314424b819cade0cfb085cf9"
dependencies = [
"async-channel 1.9.0",
"crossbeam-channel",
@@ -2331,14 +2774,14 @@ dependencies = [
"libc",
"log",
"paho-mqtt-sys",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
name = "paho-mqtt-sys"
-version = "0.9.0"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e482419d847af4ec43c07eed70f5f94f87dc712d267aecc91ab940944ab6bf4"
+checksum = "2d5b7bbfa661422a3e92fb8a9494ae0ced1fd8962dfdaa948a875f61796a533a"
dependencies = [
"cmake",
"openssl-sys",
@@ -2351,26 +2794,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
[[package]]
-name = "parking_lot"
-version = "0.12.3"
+name = "parse-display"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+checksum = "914a1c2265c98e2446911282c6ac86d8524f495792c38c5bd884f80499c7538a"
dependencies = [
- "lock_api",
- "parking_lot_core",
+ "parse-display-derive",
+ "regex",
+ "regex-syntax 0.8.5",
]
[[package]]
-name = "parking_lot_core"
-version = "0.9.10"
+name = "parse-display-derive"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+checksum = "2ae7800a4c974efd12df917266338e79a7a74415173caf7e70aa0a0707345281"
dependencies = [
- "cfg-if",
- "libc",
- "redox_syscall",
- "smallvec",
- "windows-targets 0.52.6",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "regex-syntax 0.8.5",
+ "structmeta",
+ "syn 2.0.87",
]
[[package]]
@@ -2407,7 +2852,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442"
dependencies = [
"memchr",
- "thiserror",
+ "thiserror 1.0.69",
"ucd-trie",
]
@@ -2431,7 +2876,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -2485,7 +2930,7 @@ dependencies = [
"phf_shared",
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -2632,7 +3077,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033"
dependencies = [
"proc-macro2",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -2670,21 +3115,21 @@ dependencies = [
[[package]]
name = "protobuf"
-version = "3.7.1"
+version = "3.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3a7c64d9bf75b1b8d981124c14c179074e8caa7dfe7b6a12e6222ddcd0c8f72"
+checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4"
dependencies = [
"bytes",
"once_cell",
"protobuf-support",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
name = "protobuf-codegen"
-version = "3.7.1"
+version = "3.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e26b833f144769a30e04b1db0146b2aaa53fd2fd83acf10a6b5f996606c18144"
+checksum = "5d3976825c0014bbd2f3b34f0001876604fe87e0c86cd8fa54251530f1544ace"
dependencies = [
"anyhow",
"once_cell",
@@ -2692,14 +3137,14 @@ dependencies = [
"protobuf-parse",
"regex",
"tempfile",
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
name = "protobuf-parse"
-version = "3.7.1"
+version = "3.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "322330e133eab455718444b4e033ebfac7c6528972c784fcde28d2cc783c6257"
+checksum = "b4aeaa1f2460f1d348eeaeed86aea999ce98c1bded6f089ff8514c9d9dbdc973"
dependencies = [
"anyhow",
"indexmap 2.6.0",
@@ -2707,17 +3152,17 @@ dependencies = [
"protobuf",
"protobuf-support",
"tempfile",
- "thiserror",
+ "thiserror 1.0.69",
"which",
]
[[package]]
name = "protobuf-support"
-version = "3.7.1"
+version = "3.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b088fd20b938a875ea00843b6faf48579462630015c3788d397ad6a786663252"
+checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6"
dependencies = [
- "thiserror",
+ "thiserror 1.0.69",
]
[[package]]
@@ -2790,7 +3235,7 @@ dependencies = [
"rustc-hash 2.0.0",
"rustls",
"socket2 0.5.7",
- "thiserror",
+ "thiserror 1.0.69",
"tokio",
"tracing",
]
@@ -2808,7 +3253,7 @@ dependencies = [
"rustls",
"rustls-platform-verifier",
"slab",
- "thiserror",
+ "thiserror 1.0.69",
"tinyvec",
"tracing",
]
@@ -2836,6 +3281,12 @@ dependencies = [
"proc-macro2",
]
+[[package]]
+name = "r-efi"
+version = "5.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
+
[[package]]
name = "rand"
version = "0.8.5"
@@ -2863,7 +3314,7 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
- "getrandom",
+ "getrandom 0.2.15",
]
[[package]]
@@ -2886,6 +3337,15 @@ dependencies = [
"crossbeam-utils",
]
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
[[package]]
name = "redox_syscall"
version = "0.5.7"
@@ -2901,9 +3361,29 @@ version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
dependencies = [
- "getrandom",
+ "getrandom 0.2.15",
"libredox",
- "thiserror",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
]
[[package]]
@@ -2952,9 +3432,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "reqwest"
-version = "0.12.9"
+version = "0.12.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f"
+checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -2986,6 +3466,7 @@ dependencies = [
"system-configuration",
"tokio",
"tokio-native-tls",
+ "tower",
"tower-service",
"url",
"wasm-bindgen",
@@ -2996,15 +3477,14 @@ dependencies = [
[[package]]
name = "ring"
-version = "0.17.8"
+version = "0.17.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
+checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
dependencies = [
"cc",
"cfg-if",
- "getrandom",
+ "getrandom 0.2.15",
"libc",
- "spin",
"untrusted",
"windows-sys 0.52.0",
]
@@ -3114,12 +3594,26 @@ dependencies = [
"windows-sys 0.52.0",
]
+[[package]]
+name = "rustix"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
+dependencies = [
+ "bitflags 2.6.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.9.4",
+ "windows-sys 0.59.0",
+]
+
[[package]]
name = "rustls"
-version = "0.23.16"
+version = "0.23.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e"
+checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395"
dependencies = [
+ "aws-lc-rs",
"log",
"once_cell",
"ring",
@@ -3139,7 +3633,19 @@ dependencies = [
"rustls-pemfile",
"rustls-pki-types",
"schannel",
- "security-framework",
+ "security-framework 2.11.1",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3"
+dependencies = [
+ "openssl-probe",
+ "rustls-pki-types",
+ "schannel",
+ "security-framework 3.2.0",
]
[[package]]
@@ -3163,16 +3669,16 @@ version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490"
dependencies = [
- "core-foundation",
+ "core-foundation 0.9.4",
"core-foundation-sys",
"jni",
"log",
"once_cell",
"rustls",
- "rustls-native-certs",
+ "rustls-native-certs 0.7.3",
"rustls-platform-verifier-android",
"rustls-webpki",
- "security-framework",
+ "security-framework 2.11.1",
"security-framework-sys",
"webpki-roots",
"winapi",
@@ -3190,6 +3696,7 @@ version = "0.102.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
dependencies = [
+ "aws-lc-rs",
"ring",
"rustls-pki-types",
"untrusted",
@@ -3247,7 +3754,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -3279,18 +3786,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
dependencies = [
"bitflags 2.6.0",
- "core-foundation",
+ "core-foundation 0.9.4",
"core-foundation-sys",
"libc",
"num-bigint",
"security-framework-sys",
]
+[[package]]
+name = "security-framework"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316"
+dependencies = [
+ "bitflags 2.6.0",
+ "core-foundation 0.10.0",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
[[package]]
name = "security-framework-sys"
-version = "2.12.0"
+version = "2.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6"
+checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
dependencies = [
"core-foundation-sys",
"libc",
@@ -3319,7 +3839,7 @@ checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -3330,7 +3850,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -3345,6 +3865,17 @@ dependencies = [
"serde",
]
+[[package]]
+name = "serde_repr"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
+]
+
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
@@ -3357,6 +3888,36 @@ dependencies = [
"serde",
]
+[[package]]
+name = "serde_with"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa"
+dependencies = [
+ "base64 0.22.1",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.6.0",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_with_macros",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
+]
+
[[package]]
name = "serde_yaml"
version = "0.9.34+deprecated"
@@ -3511,6 +4072,12 @@ dependencies = [
"der",
]
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
[[package]]
name = "static_assertions"
version = "1.1.0"
@@ -3523,6 +4090,29 @@ version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+[[package]]
+name = "structmeta"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e1575d8d40908d70f6fd05537266b90ae71b15dbbe7a8b7dffa2b759306d329"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "structmeta-derive",
+ "syn 2.0.87",
+]
+
+[[package]]
+name = "structmeta-derive"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
+]
+
[[package]]
name = "strum_macros"
version = "0.24.3"
@@ -3599,9 +4189,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.86"
+version = "2.0.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e89275301d38033efb81a6e60e3497e734dfcc62571f2854bf4b16690398824c"
+checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
dependencies = [
"proc-macro2",
"quote",
@@ -3625,7 +4215,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -3635,7 +4225,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
dependencies = [
"bitflags 2.6.0",
- "core-foundation",
+ "core-foundation 0.9.4",
"system-configuration-sys",
]
@@ -3651,14 +4241,14 @@ dependencies = [
[[package]]
name = "tempfile"
-version = "3.13.0"
+version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b"
+checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf"
dependencies = [
- "cfg-if",
"fastrand 2.1.1",
+ "getrandom 0.3.2",
"once_cell",
- "rustix 0.38.38",
+ "rustix 1.0.5",
"windows-sys 0.59.0",
]
@@ -3681,6 +4271,35 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "testcontainers"
+version = "0.23.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a4f01f39bb10fc2a5ab23eb0d888b1e2bb168c157f61a1b98e6c501c639c74"
+dependencies = [
+ "async-trait",
+ "bollard",
+ "bollard-stubs",
+ "bytes",
+ "docker_credential",
+ "either",
+ "etcetera",
+ "futures",
+ "log",
+ "memchr",
+ "parse-display",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "thiserror 2.0.12",
+ "tokio",
+ "tokio-stream",
+ "tokio-tar",
+ "tokio-util",
+ "url",
+]
+
[[package]]
name = "textwrap"
version = "0.15.2"
@@ -3694,22 +4313,42 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.66"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+dependencies = [
+ "thiserror-impl 1.0.69",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+dependencies = [
+ "thiserror-impl 2.0.12",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d171f59dbaa811dbbb1aee1e73db92ec2b122911a48e1390dfe327a821ddede"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
- "thiserror-impl",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.66"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b08be0f17bd307950653ce45db00cd31200d82b624b36e181337d9c7d92765b5"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -3754,8 +4393,18 @@ dependencies = [
]
[[package]]
-name = "tinyvec"
-version = "1.8.0"
+name = "tinystr"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
+dependencies = [
+ "displaydoc",
+ "zerovec",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
dependencies = [
@@ -3770,13 +4419,13 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tls-listener"
-version = "0.10.2"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f1d8809f604e448c7bc53a5a0e4c2a0a20ba44cb1fb407314c8eeccb92127f9"
+checksum = "ab41256c16d6fc2b3021545f20bf77a73200b18bd54040ac656dddfca6205bfa"
dependencies = [
"futures-util",
"pin-project-lite",
- "thiserror",
+ "thiserror 2.0.12",
"tokio",
"tokio-rustls",
]
@@ -3792,17 +4441,15 @@ dependencies = [
[[package]]
name = "tokio"
-version = "1.41.0"
+version = "1.44.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb"
+checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
dependencies = [
"backtrace",
"bytes",
"libc",
"mio",
- "parking_lot",
"pin-project-lite",
- "signal-hook-registry",
"socket2 0.5.7",
"tokio-macros",
"tracing",
@@ -3820,13 +4467,13 @@ dependencies = [
[[package]]
name = "tokio-macros"
-version = "2.4.0"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
+checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -3841,15 +4488,40 @@ dependencies = [
[[package]]
name = "tokio-rustls"
-version = "0.26.0"
+version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4"
+checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
dependencies = [
"rustls",
- "rustls-pki-types",
"tokio",
]
+[[package]]
+name = "tokio-stream"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-tar"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5714c010ca3e5c27114c1cdeb9d14641ace49874aa5626d7149e47aedace75"
+dependencies = [
+ "filetime",
+ "futures-core",
+ "libc",
+ "redox_syscall 0.3.5",
+ "tokio",
+ "tokio-stream",
+ "xattr",
+]
+
[[package]]
name = "tokio-tungstenite"
version = "0.24.0"
@@ -3877,6 +4549,27 @@ dependencies = [
"tokio",
]
+[[package]]
+name = "tower"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
[[package]]
name = "tower-service"
version = "0.3.3"
@@ -3903,7 +4596,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
@@ -3978,7 +4671,7 @@ dependencies = [
"log",
"rand",
"sha1",
- "thiserror",
+ "thiserror 1.0.69",
"utf-8",
]
@@ -4018,12 +4711,6 @@ dependencies = [
"spin",
]
-[[package]]
-name = "unicode-bidi"
-version = "0.3.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893"
-
[[package]]
name = "unicode-ident"
version = "1.0.13"
@@ -4036,15 +4723,6 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
-[[package]]
-name = "unicode-normalization"
-version = "0.1.24"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
-dependencies = [
- "tinyvec",
-]
-
[[package]]
name = "unicode-width"
version = "0.1.14"
@@ -4096,7 +4774,6 @@ dependencies = [
"tokio",
"up-rust",
"up-streamer",
- "up-transport-mqtt5",
"up-transport-vsomeip",
"up-transport-zenoh",
"usubscription-static-file",
@@ -4125,14 +4802,13 @@ dependencies = [
"zenoh-plugin-trait",
"zenoh-result",
"zenoh-util",
- "zenoh_backend_traits",
]
[[package]]
name = "up-rust"
-version = "0.3.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30118ab07c7ca420e2196bbc0f6f380b3100928d03ec1cd960f9220472f48f1a"
+checksum = "616da735a2c488128e67d5ce16113f4303c83a5dbeb7c281ae893da281df2a57"
dependencies = [
"async-trait",
"bytes",
@@ -4141,7 +4817,7 @@ dependencies = [
"protobuf-codegen",
"protoc-bin-vendored",
"rand",
- "thiserror",
+ "thiserror 1.0.69",
"tokio",
"tracing",
"uriparse",
@@ -4172,33 +4848,27 @@ dependencies = [
[[package]]
name = "up-transport-mqtt5"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43adade571c38ed57b35440a5e524f642f440be19b3f3a5dd79924e0419ce01b"
+version = "0.3.0-SNAPSHOT"
+source = "git+https://github.com/eclipse-uprotocol/up-transport-mqtt5-rust#78382e6c6676331ed217678bbbeb8bce8fba0c05"
dependencies = [
"async-channel 1.9.0",
"async-trait",
+ "backon",
"bytes",
- "env_logger 0.10.2",
+ "clap",
"futures",
"log",
"paho-mqtt",
"protobuf",
- "rand",
- "regex",
- "serde",
- "serde_json",
+ "testcontainers",
"tokio",
- "tokio-macros",
"up-rust",
- "url",
- "uuid",
]
[[package]]
name = "up-transport-vsomeip"
-version = "0.3.0"
-source = "git+https://github.com/PLeVasseur/up-client-vsomeip-rust?branch=add-build-script_update-up-rust-version#ed295aba9e979ff7cf59b3d085586677e43c75f5"
+version = "0.4.1"
+source = "git+https://github.com/eclipse-uprotocol/up-transport-vsomeip-rust#cb0151394966a4ed5047b246da62c4a9352a90a4"
dependencies = [
"async-trait",
"bimap",
@@ -4212,6 +4882,7 @@ dependencies = [
"protobuf",
"serde",
"serde_json",
+ "tempfile",
"tokio",
"up-rust",
"vsomeip-proc-macro",
@@ -4220,20 +4891,24 @@ dependencies = [
[[package]]
name = "up-transport-zenoh"
-version = "0.4.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1dba40062ff410f59a9a34a51a9288c8ad92454e4199725264f4f9eaeb604fd9"
+checksum = "5b136a2120532bb9d3a426e3575a0cf998cd4c06c5ab0a5dc54ae64363917820"
dependencies = [
"anyhow",
"async-trait",
"bytes",
+ "hashbrown 0.15.2",
"lazy_static",
"protobuf",
+ "ring",
+ "rustls",
"serde_json",
"tokio",
"tracing",
"tracing-subscriber",
"up-rust",
+ "url",
"zenoh",
]
@@ -4249,13 +4924,14 @@ dependencies = [
[[package]]
name = "url"
-version = "2.5.2"
+version = "2.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
+checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
+ "serde",
]
[[package]]
@@ -4276,6 +4952,18 @@ version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+[[package]]
+name = "utf16_iter"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
[[package]]
name = "utf8parse"
version = "0.2.2"
@@ -4288,7 +4976,7 @@ version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a"
dependencies = [
- "getrandom",
+ "getrandom 0.2.15",
]
[[package]]
@@ -4363,19 +5051,19 @@ checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
[[package]]
name = "vsomeip-proc-macro"
-version = "0.1.0"
-source = "git+https://github.com/PLeVasseur/up-client-vsomeip-rust?branch=add-build-script_update-up-rust-version#ed295aba9e979ff7cf59b3d085586677e43c75f5"
+version = "0.4.1"
+source = "git+https://github.com/eclipse-uprotocol/up-transport-vsomeip-rust#cb0151394966a4ed5047b246da62c4a9352a90a4"
dependencies = [
"proc-macro2",
"quote",
"rayon",
- "syn 2.0.86",
+ "syn 2.0.87",
]
[[package]]
name = "vsomeip-sys"
-version = "0.3.0"
-source = "git+https://github.com/PLeVasseur/up-client-vsomeip-rust?branch=add-build-script_update-up-rust-version#ed295aba9e979ff7cf59b3d085586677e43c75f5"
+version = "0.4.1"
+source = "git+https://github.com/eclipse-uprotocol/up-transport-vsomeip-rust#cb0151394966a4ed5047b246da62c4a9352a90a4"
dependencies = [
"autocxx",
"autocxx-build",
@@ -4420,29 +5108,38 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+[[package]]
+name = "wasi"
+version = "0.14.2+wasi-0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
+dependencies = [
+ "wit-bindgen-rt",
+]
+
[[package]]
name = "wasm-bindgen"
-version = "0.2.95"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
dependencies = [
"cfg-if",
"once_cell",
+ "rustversion",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.95"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
dependencies = [
"bumpalo",
"log",
- "once_cell",
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
"wasm-bindgen-shared",
]
@@ -4460,9 +5157,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.95"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -4470,22 +5167,25 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.95"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.95"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
[[package]]
name = "web-sys"
@@ -4558,34 +5258,39 @@ dependencies = [
"windows-targets 0.52.6",
]
+[[package]]
+name = "windows-link"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
+
[[package]]
name = "windows-registry"
-version = "0.2.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0"
+checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3"
dependencies = [
"windows-result",
"windows-strings",
- "windows-targets 0.52.6",
+ "windows-targets 0.53.0",
]
[[package]]
name = "windows-result"
-version = "0.2.0"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
+checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
dependencies = [
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
name = "windows-strings"
-version = "0.1.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
+checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319"
dependencies = [
- "windows-result",
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
@@ -4639,13 +5344,29 @@ dependencies = [
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
- "windows_i686_gnullvm",
+ "windows_i686_gnullvm 0.52.6",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
+[[package]]
+name = "windows-targets"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b"
+dependencies = [
+ "windows_aarch64_gnullvm 0.53.0",
+ "windows_aarch64_msvc 0.53.0",
+ "windows_i686_gnu 0.53.0",
+ "windows_i686_gnullvm 0.53.0",
+ "windows_i686_msvc 0.53.0",
+ "windows_x86_64_gnu 0.53.0",
+ "windows_x86_64_gnullvm 0.53.0",
+ "windows_x86_64_msvc 0.53.0",
+]
+
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.5"
@@ -4658,6 +5379,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
+
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
@@ -4670,6 +5397,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
+
[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
@@ -4682,12 +5415,24 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+[[package]]
+name = "windows_i686_gnu"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
+
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
+
[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
@@ -4700,6 +5445,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+[[package]]
+name = "windows_i686_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
@@ -4712,6 +5463,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
+
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
@@ -4724,6 +5481,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
+
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"
@@ -4736,6 +5499,33 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
+
+[[package]]
+name = "wit-bindgen-rt"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
+dependencies = [
+ "bitflags 2.6.0",
+]
+
+[[package]]
+name = "write16"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
+
+[[package]]
+name = "writeable"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
+
[[package]]
name = "x509-parser"
version = "0.16.0"
@@ -4749,17 +5539,52 @@ dependencies = [
"nom",
"oid-registry",
"rusticata-macros",
- "thiserror",
+ "thiserror 1.0.69",
"time",
]
+[[package]]
+name = "xattr"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e"
+dependencies = [
+ "libc",
+ "rustix 1.0.5",
+]
+
+[[package]]
+name = "yoke"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
+dependencies = [
+ "serde",
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
+ "synstructure",
+]
+
[[package]]
name = "zenoh"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b28b1ce69136eba7567e5ea5c9f37aa0c7cced2673bdc3c1dd7c3c1a2ecb0d21"
+checksum = "de466449fe7737d3049886acdb0f5da0ab6258808f7036d8d85f69f681383913"
dependencies = [
"ahash",
+ "arc-swap",
"async-trait",
"bytes",
"flume",
@@ -4768,11 +5593,13 @@ dependencies = [
"itertools 0.13.0",
"json5",
"lazy_static",
+ "nonempty-collections",
"once_cell",
"paste",
"petgraph",
"phf",
"rand",
+ "ref-cast",
"rustc_version",
"serde",
"serde_json",
@@ -4802,18 +5629,18 @@ dependencies = [
[[package]]
name = "zenoh-buffers"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "592504c9854fbc781b9a389cd7225b5878b8dd0cb9a12f15546c8d4eeba9a802"
+checksum = "2abb97af455247c76ee504b36a96b8d8f30cd70ebcd620c542d754b6566bb258"
dependencies = [
"zenoh-collections",
]
[[package]]
name = "zenoh-codec"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfb0ce6e9104408c6a23e100a69b16b8e5713f904e061b14ac994fef8df6baba"
+checksum = "64c34b28cec0ba3885552f9ed4c9350bc062edc5772517753bae7f0b5673cb5d"
dependencies = [
"tracing",
"uhlc",
@@ -4823,26 +5650,29 @@ dependencies = [
[[package]]
name = "zenoh-collections"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccb27c67033ffda0171506658802fda8dc22e62bcb094b49be86c04f84d8bdab"
+checksum = "3495825c18663b7731ce4140ce35ca28cf2dc92cba1e7f164ea68bd1097ed935"
[[package]]
name = "zenoh-config"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "15d3ddf489ec055bc7498d66f6bb2cce8278314fbadb40aa34a37bc0125f494f"
+checksum = "99c04601c096f0571022b4d50a16c5f4a2218faa63b46e0d73f84d0c109210f7"
dependencies = [
"json5",
+ "nonempty-collections",
"num_cpus",
"secrecy",
"serde",
"serde_json",
+ "serde_with",
"serde_yaml",
"tracing",
"uhlc",
"validated_struct",
"zenoh-core",
+ "zenoh-keyexpr",
"zenoh-macros",
"zenoh-protocol",
"zenoh-result",
@@ -4851,9 +5681,9 @@ dependencies = [
[[package]]
name = "zenoh-core"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f3d36d0b828f429cfba005519de8941319a4ca3e0b21c7ede3cf8812e1e5518"
+checksum = "6dc29d0ffc588b20eab1f3078f42034b572d7ae2c0a50cc3995807c12b5a7ed9"
dependencies = [
"lazy_static",
"tokio",
@@ -4863,9 +5693,9 @@ dependencies = [
[[package]]
name = "zenoh-crypto"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f82ea1bb77132325e7fae5d698cfa5dddd4d6e46e94fc73409e31e65a557d7d"
+checksum = "4151a98c653b7c4576fe5a4feb1c26d9328c675abf77df2a4dfa80347b8e25d0"
dependencies = [
"aes",
"hmac",
@@ -4877,10 +5707,11 @@ dependencies = [
[[package]]
name = "zenoh-keyexpr"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9adcce6a97d03855e2f2e7e5fafb9659d65c47eebc4dc6049ded397874ff634e"
+checksum = "6cfd9842578fddeb8cc2acf48751872ca6284578e4b0433c77cd3b7c7f42d271"
dependencies = [
+ "getrandom 0.2.15",
"hashbrown 0.14.5",
"keyed-set",
"rand",
@@ -4892,9 +5723,9 @@ dependencies = [
[[package]]
name = "zenoh-link"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73741cc9d89411d9b9e969cbad3a6e494684f3a79e200caebdad62beb3cb13fe"
+checksum = "b478ec81c33f1ac45292e2790d774b872afa21408249147e595eb126a46fdd17"
dependencies = [
"zenoh-config",
"zenoh-link-commons",
@@ -4910,9 +5741,9 @@ dependencies = [
[[package]]
name = "zenoh-link-commons"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c74d63df6a0dda46f207699fafea4b832151b288451ce58eab7a56c8a07694d"
+checksum = "d5d8e854693ee711a62feb3d031f44bf6255ba1f93f6feea7615a4fc473ec82c"
dependencies = [
"async-trait",
"flume",
@@ -4920,6 +5751,7 @@ dependencies = [
"rustls",
"rustls-webpki",
"serde",
+ "time",
"tokio",
"tokio-util",
"tracing",
@@ -4934,9 +5766,9 @@ dependencies = [
[[package]]
name = "zenoh-link-quic"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9727ec46732859c14717fba67977ef94b866510e714db1270c2f56e19bd80dad"
+checksum = "66d55f81d71d9eada2b21eb976f41f67919c18539d8b92e248561f459674cb0a"
dependencies = [
"async-trait",
"base64 0.22.1",
@@ -4946,6 +5778,7 @@ dependencies = [
"rustls-pki-types",
"rustls-webpki",
"secrecy",
+ "time",
"tokio",
"tokio-util",
"tracing",
@@ -4956,31 +5789,32 @@ dependencies = [
"zenoh-link-commons",
"zenoh-protocol",
"zenoh-result",
+ "zenoh-util",
]
[[package]]
name = "zenoh-link-tcp"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "394d7bd1a098ef102f58b13305f88ce1ffba007c6fe1df2c6d9c4bb350fcb5cb"
+checksum = "ba5b12406ce60cfedaeeadb3eb19ce67ef35296cfc92fd3b253d3516288c2a90"
dependencies = [
"async-trait",
"socket2 0.5.7",
"tokio",
"tokio-util",
"tracing",
+ "zenoh-config",
"zenoh-core",
"zenoh-link-commons",
"zenoh-protocol",
"zenoh-result",
- "zenoh-util",
]
[[package]]
name = "zenoh-link-tls"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9521f53cf61a41b654e976d33cfddb2e94dc0289ecba4cfa39bfb843824f767"
+checksum = "464965c87df8c371577cb686cd12eb52b10ff4d304b82529bd198bedd6c01747"
dependencies = [
"async-trait",
"base64 0.22.1",
@@ -4990,6 +5824,7 @@ dependencies = [
"rustls-webpki",
"secrecy",
"socket2 0.5.7",
+ "time",
"tls-listener",
"tokio",
"tokio-rustls",
@@ -5007,9 +5842,9 @@ dependencies = [
[[package]]
name = "zenoh-link-udp"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3bd6e9814f1f0f7db6e02f8d196106e356e55e2d5814d1bc8f211910e6fb1459"
+checksum = "9d0f99553453daa4a20571a0599aa17a08773c18dc5caba3ef2e622dca2be063"
dependencies = [
"async-trait",
"socket2 0.5.7",
@@ -5027,9 +5862,9 @@ dependencies = [
[[package]]
name = "zenoh-link-unixsock_stream"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aef73ad8357bf0c42abdb057686200bfd6c3fb4646ed07c13f6c18b363f1a0b6"
+checksum = "5c30c79e68b506538c8267ad4a738f256f6a578ceb24bfd04aafb1acc163a5d3"
dependencies = [
"async-trait",
"nix",
@@ -5046,9 +5881,9 @@ dependencies = [
[[package]]
name = "zenoh-link-ws"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f178df5cff946bc8ef81015df8d3106d19b027e9aff11db8aa2eee1a802cc05"
+checksum = "ee436bc5f7ffb04e855bff48e2df1937feb1f059637748c762c21508407d32e1"
dependencies = [
"async-trait",
"futures-util",
@@ -5067,21 +5902,21 @@ dependencies = [
[[package]]
name = "zenoh-macros"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "528dc367e8de7e84d35d37d21998cf9a45360b0f8bffb4f9e5135bed45fd347f"
+checksum = "213359841968c343319c545612a5457d0a119e7416e5e740e4668f117298ed9a"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
"zenoh-keyexpr",
]
[[package]]
name = "zenoh-plugin-trait"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a24cfd2508d900adad7c88617541b8d4a2ad581c15c307db798b6362554642fe"
+checksum = "2cad96c9c65b2c61a34198c574986d75a6ba1802adb727df538a34de9c492ae3"
dependencies = [
"git-version",
"libloading",
@@ -5096,9 +5931,9 @@ dependencies = [
[[package]]
name = "zenoh-protocol"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c342042f4e7ed51718803f48ce49d9dc2e1a8060f1ed7f94c21e781c01dac9d9"
+checksum = "7d3d55219c672dccc1b14d8dc255cb29d927f3da453de9f1057924541ea304e9"
dependencies = [
"const_format",
"rand",
@@ -5111,33 +5946,35 @@ dependencies = [
[[package]]
name = "zenoh-result"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05f79737b88aafb33bbb0ea83821c9048e20702f3de7cce8822adac25f100aa7"
+checksum = "df0acb62f1b9d51401a38a736c2d20bb2a3c9bec462573f7dd562b93661d0179"
dependencies = [
"anyhow",
]
[[package]]
name = "zenoh-runtime"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30608ef77db6ba23df63901e3359299875474ff812c3d678b0101c88892cd3de"
+checksum = "bf2ba23f9579eebf03a4c91d6013634e7c54899fc7d3d2387bc960d32a12fcad"
dependencies = [
"lazy_static",
"ron",
"serde",
"tokio",
+ "tracing",
"zenoh-macros",
"zenoh-result",
]
[[package]]
name = "zenoh-sync"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef62536159fcfb7eb51d22b69894d884abea5ce0bf6241cc2c3f9880f486060b"
+checksum = "612ae417edc4d25df8ba20e22dd9a68961eb1d9fde289aee77e4402f8fbde014"
dependencies = [
+ "arc-swap",
"event-listener 5.3.1",
"futures",
"tokio",
@@ -5148,9 +5985,9 @@ dependencies = [
[[package]]
name = "zenoh-task"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06d0efd5f0f70acc408a9bddeac526f91c85e2e42dc2c0d7c29a72bc9e26d6ca"
+checksum = "b35052c34d4c1c0b552795f02ec42a8ed60884744dde9ce661d93c36db0847da"
dependencies = [
"futures",
"tokio",
@@ -5162,9 +5999,9 @@ dependencies = [
[[package]]
name = "zenoh-transport"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3bc2a24c34c01775bd0601043dcd75de245eb3af35ce8eff96e0d9126e019812"
+checksum = "32289c6655efc953ddd9f0b931c603684f008977cf37487f7274613b4d7fec08"
dependencies = [
"async-trait",
"crossbeam-utils",
@@ -5196,9 +6033,9 @@ dependencies = [
[[package]]
name = "zenoh-util"
-version = "1.0.1"
+version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afe24db564df9094e521441b556bfc73f359ae5d7b537a0b03257387404f561d"
+checksum = "895e2d7a0dd4fa0a4cb94c1050620d5a71dcde4cdfb7a1c63ec179c19faaa326"
dependencies = [
"async-trait",
"const_format",
@@ -5220,24 +6057,6 @@ dependencies = [
"zenoh-result",
]
-[[package]]
-name = "zenoh_backend_traits"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "812669d74a7200281a6b16e99e1f8b1fa166530982a506cc61dfba523a734b32"
-dependencies = [
- "async-trait",
- "const_format",
- "derive_more",
- "either",
- "schemars",
- "serde_json",
- "zenoh",
- "zenoh-plugin-trait",
- "zenoh-result",
- "zenoh-util",
-]
-
[[package]]
name = "zerocopy"
version = "0.7.35"
@@ -5256,7 +6075,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.86",
+ "syn 2.0.87",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
+ "synstructure",
]
[[package]]
@@ -5264,3 +6104,25 @@ name = "zeroize"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
+
+[[package]]
+name = "zerovec"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
+]
diff --git a/Cargo.toml b/Cargo.toml
index d4a78c9b..b55bdfa5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -15,11 +15,16 @@ members = [
"example-streamer-uses",
"utils/hello-world-protos",
"utils/integration-test-utils",
- "example-streamer-implementations", "up-linux-streamer-plugin",
- "up-streamer", "subscription-cache", "utils/usubscription-static-file"]
+ "example-streamer-implementations",
+ "configurable-streamer",
+ "up-linux-streamer-plugin",
+ "up-streamer",
+ "subscription-cache",
+ "utils/usubscription-static-file",
+]
[workspace.package]
-rust-version = "1.76.0"
+rust-version = "1.82.0"
version = "0.1.0"
repository = "https://github.com/eclipse-uprotocol/up-streamer-rust"
homepage = "https://github.com/eclipse-uprotocol"
@@ -35,22 +40,32 @@ env_logger = { version = "0.10.1" }
futures = { version = "0.3.30" }
lazy_static = { version = "1.5.0" }
log = { version = "0.4.20" }
-json5 = { version = "0.4.1" }
+json5 = { version = "0.4.1" }
serde = { version = "1.0.154", features = ["derive"] }
serde_json = { version = "1.0.94" }
uuid = { version = "1.7.0" }
-tokio = { version = "1.35.1", default-features = false, features = ["rt", "rt-multi-thread", "sync", "time"] }
-protobuf = { version = "3.3", features = ["with-bytes"] }
-up-rust = { version = "0.3.0", default-features = false }
-up-transport-zenoh = { version = "0.4.0" }
-up-transport-vsomeip = { version = "0.4.1", default-features = false }
-up-transport-mqtt5 = { version = "0.2.0" }
-zenoh = { version = "1.0.0", features = ["default", "plugins"] }
-zenoh-core = { version = "1.0.0" }
-zenoh-plugin-trait = { version = "1.0.0" }
-zenoh-result = { version = "1.0.0" }
-zenoh-util = { version = "1.0.0" }
-zenoh_backend_traits = { version = "1.0.0" }
+tokio = { version = "1.44", default-features = false, features = [
+ "rt",
+ "rt-multi-thread",
+ "sync",
+ "time",
+ "macros",
+] }
+protobuf = { version = "3.7.2", features = ["with-bytes"] }
+up-rust = { version = "0.5.0", default-features = false }
+up-transport-zenoh = { version = "0.6.0", features = ["zenoh-unstable"] }
+up-transport-vsomeip = { git = "https://github.com/eclipse-uprotocol/up-transport-vsomeip-rust", default-features = false }
+up-transport-mqtt5 = { git = "https://github.com/eclipse-uprotocol/up-transport-mqtt5-rust" }
+zenoh = { version = "1.2.1", features = [
+ "default",
+ "plugins",
+ "unstable",
+ "internal",
+] }
+zenoh-core = { version = "1.2.1" }
+zenoh-plugin-trait = { version = "1.2.1" }
+zenoh-result = { version = "1.2.1" }
+zenoh-util = { version = "1.2.1" }
[profile.dev]
debug = true
diff --git a/Cross.toml b/Cross.toml
new file mode 100644
index 00000000..16d4f905
--- /dev/null
+++ b/Cross.toml
@@ -0,0 +1,20 @@
+# ********************************************************************************
+# Copyright (c) 2025 Contributors to the Eclipse Foundation
+#
+# See the NOTICE file(s) distributed with this work for additional
+# information regarding copyright ownership.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Apache License Version 2.0 which is available at
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# SPDX-License-Identifier: Apache-2.0
+# *******************************************************************************/
+
+[build.env]
+# This overrides the CMake toolchain file that Cross natively wants to use,
+# since it causes problems with the vendored OpenSSL version that Paho wants to use
+passthrough = [
+ "CMAKE_TOOLCHAIN_FILE_aarch64_unknown_linux_musl",
+ "CMAKE_TOOLCHAIN_FILE_x86_64_unknown_linux_musl",
+]
diff --git a/configurable-streamer/CONFIG.json5 b/configurable-streamer/CONFIG.json5
new file mode 100644
index 00000000..32512938
--- /dev/null
+++ b/configurable-streamer/CONFIG.json5
@@ -0,0 +1,64 @@
+{
+ up_streamer_config: {
+ // The message queue size of each route between endpoints within the UStreamer
+ // Lower numbers mean that some messages will be dropped
+ message_queue_size: 10000
+ },
+ streamer_uuri: {
+ // Determines the authority_name of the host device
+ // Used when initializing host transport
+ authority: "authority_B",
+ // Determines the ue_id of the streamer
+ // Used when initializing host transport
+ ue_id: 78,
+ // Determines the ue_version_major of the streamer
+ // Used when initializing host transport
+ ue_version_major: 1
+ },
+ usubscription_config: {
+ // Lists the path to the subscription file when using static file
+ file_path: "subscription_data.json"
+ },
+ transports: {
+ zenoh: {
+ // Path to the zenoh config file
+ config_file: "ZENOH_CONFIG.json5",
+ // List of endpoints that use the zenoh transport
+ endpoints: [
+ {
+ // Authority of the entity that the endpoint represents
+ authority: "authority_B",
+ // Identifier of the endpoint
+ endpoint: "endpoint_zenoh_1",
+ // List of identifiers of all other endpoints that messages should be forwarded to
+ forwarding: [
+ "endpoint_mqtt_1",
+ "endpoint_zenoh_2"
+ ]
+ },
+ {
+ authority: "authority_C",
+ // Make sure that each endpoint has a unique identifier or the streamer will not start
+ endpoint: "endpoint_zenoh_2",
+ // All endpoint identifiers listed here must also be defined in this config
+ forwarding: [
+ "endpoint_zenoh_1",
+ ]
+ }
+ ]
+ },
+ mqtt: {
+ // Same as for the zenoh section but for all MQTT5 based endpoints
+ config_file: "MQTT_CONFIG.json5",
+ endpoints: [
+ {
+ authority: "authority_A",
+ endpoint: "endpoint_mqtt_1",
+ forwarding: [
+ "endpoint_zenoh_1",
+ ]
+ },
+ ]
+ },
+ }
+}
diff --git a/configurable-streamer/Cargo.toml b/configurable-streamer/Cargo.toml
new file mode 100644
index 00000000..77655a4b
--- /dev/null
+++ b/configurable-streamer/Cargo.toml
@@ -0,0 +1,39 @@
+# Copyright (c) 2024 Contributors to the Eclipse Foundation
+#
+# See the NOTICE file(s) distributed with this work for additional
+# information regarding copyright ownership.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Apache License Version 2.0 which is available at
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# SPDX-License-Identifier: Apache-2.0
+
+[package]
+name = "configurable-streamer"
+rust-version.workspace = true
+version.workspace = true
+repository.workspace = true
+homepage.workspace = true
+edition.workspace = true
+keywords.workspace = true
+license.workspace = true
+
+[dependencies]
+async-trait = { workspace = true }
+clap = { workspace = true }
+env_logger = { workspace = true }
+log = { workspace = true }
+json5 = { workspace = true }
+protobuf = { workspace = true }
+serde = { workspace = true }
+tokio = { workspace = true }
+up-rust = { workspace = true }
+up-streamer = { path = "../up-streamer" }
+up-transport-zenoh = { workspace = true }
+up-transport-mqtt5 = { workspace = true }
+zenoh = { workspace = true }
+usubscription-static-file = { path = "../utils/usubscription-static-file" }
+
+[dev-dependencies]
+hello-world-protos = { path = "../utils/hello-world-protos" }
diff --git a/configurable-streamer/Dockerfile.amd b/configurable-streamer/Dockerfile.amd
new file mode 100644
index 00000000..489b0371
--- /dev/null
+++ b/configurable-streamer/Dockerfile.amd
@@ -0,0 +1,23 @@
+# ********************************************************************************
+# Copyright (c) 2025 Contributors to the Eclipse Foundation
+#
+# See the NOTICE file(s) distributed with this work for additional
+# information regarding copyright ownership.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Apache License Version 2.0 which is available at
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# SPDX-License-Identifier: Apache-2.0
+# *******************************************************************************/
+
+FROM scratch
+
+WORKDIR /app
+
+COPY target/x86_64-unknown-linux-musl/release/configurable-streamer /app/configurable-streamer
+
+EXPOSE 7447
+EXPOSE 1883
+
+CMD ["./configurable-streamer", "--config", "config/CONFIG.json5"]
diff --git a/configurable-streamer/Dockerfile.arm b/configurable-streamer/Dockerfile.arm
new file mode 100644
index 00000000..79bb4453
--- /dev/null
+++ b/configurable-streamer/Dockerfile.arm
@@ -0,0 +1,23 @@
+# ********************************************************************************
+# Copyright (c) 2025 Contributors to the Eclipse Foundation
+#
+# See the NOTICE file(s) distributed with this work for additional
+# information regarding copyright ownership.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Apache License Version 2.0 which is available at
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# SPDX-License-Identifier: Apache-2.0
+# *******************************************************************************/
+
+FROM scratch
+
+WORKDIR /app
+
+COPY target/aarch64-unknown-linux-musl/release/configurable-streamer /app/configurable-streamer
+
+EXPOSE 7447
+EXPOSE 1883
+
+CMD ["./configurable-streamer", "--config", "config/CONFIG.json5"]
diff --git a/configurable-streamer/MQTT_CONFIG.json5 b/configurable-streamer/MQTT_CONFIG.json5
new file mode 100644
index 00000000..c0fe80af
--- /dev/null
+++ b/configurable-streamer/MQTT_CONFIG.json5
@@ -0,0 +1,14 @@
+{
+ // The URL of the MQTT broker (the provided mosquitto broker runs on locahost but docker networks might complicate that)
+ hostname: "localhost",
+ // The port of the broker (unencrypted MQTT like the provided mosquitto broker typically uses 1883, encrypted uses 8883)
+ port: 1883,
+ // How many messages the broker should buffer for this connections
+ max_buffered_messages: 100,
+ // How many individual topic subscriptions are supported through this connection
+ max_subscriptions: 100,
+ // How long the connection should stay open for
+ session_expiry_interval: 3600,
+ // The username that the mqtt client gives the broker when connecting (usually not important)
+ username: "user"
+}
diff --git a/configurable-streamer/README.md b/configurable-streamer/README.md
new file mode 100644
index 00000000..67f2a54b
--- /dev/null
+++ b/configurable-streamer/README.md
@@ -0,0 +1,124 @@
+# configurable-streamer
+
+This is a standalone implementation of a uStreamer.
+It is implemented to dynamically link between any number of uEntities that use a mix of either Zenoh or MQTT5.
+
+## Supported Setups
+
+Here are the setups that can be built with these streamers and different entities with the Zenoh and MQTT transports.
+Run the streamer with:
+
+```bash
+cargo run -- --config="CONFIG.json5"
+```
+
+The setups that include SOME/IP entities are currently not supported by the configurable streamer. To run those please refer to the "example-streamer-implementations" folder and the zenoh_someip streamer binary found there!
+
+### Client-Service Setups
+
+In a setup with one client and one service, the service runs in the background while the client periodically makes requests to it.
+Once the server receives a request it will respond with a reply.
+The request message contains information on a "sink" (the URI of the service entity which it tries to reach) and a source (the URI of the client so that the service knows where to send the response to).
+
+For a single setup you can choose either:
+- a Zenoh Client and an MQTT Service (A cars' software requesting information from the cloud)
+- an MQTT Client and a Zenoh Service (A backend service trying to pull telemetry data from a running car)
+- a Zenoh Client and a SOME/IP Service (The infotainment system requesting some mechatronics sensor data)
+- or a SOME/IP Client and a Zenoh Service (A mechatronics component asking the infotainment system for input)
+
+### Publish-Subscribe Setups
+
+This setup is more straight forward and consists of one publisher broadcasting messages to a topic and a subscriber who listens to the topic.
+Messages that the publisher sends contain a "topic" that the message will be available on. There is no response expected so publish messages do not contain the publishers URI.
+The subscriber listens to one or multiple topics via a filter.
+
+For this setup you can also choose:
+- a Zenoh Publisher and an MQTT Subscriber (A backend service getting live data from a car)
+- an MQTT Publisher and a Zenoh Subscriber (A car getting over the air traffic information)
+- a Zenoh Publisher and a SOME/IP Subscriber (An autoedge app pushing some configurations to a mechatronics component)
+- or a SOME/IP Publisher and a Zenoh Subscriber (An infotainment app getting live data from a sensor)
+
+### Notification setups
+
+There are currently no example entities for notification type messages. These do not exist for SOME/IP but do exist for Zenoh and MQTT. It should be relatively straight forward to implement the yourself if your system needs them!
+
+## Understanding the Configuration Files
+
+Reference the `CONFIG.json5` configuration file to understand the basic configuration options for the Streamer.
+
+The `ZENOH_CONFIG.json5` file is used to set Zenoh configurations. By default, it is only used to set listening endpoints, but can be used with more configurations according to [Zenoh's page on it](https://zenoh.io/docs/manual/configuration/#configuration-files).
+
+The 'static_subscriptions.json' is only needed when you set up a publish-subscribe system and can be ignored for a client-service system.
+Make sure that the UURI of each pub-sub entity is present at least as a key in this json file!
+
+The 'vsomeip-config/point_to_point.json' is a configuration file only needed for SOME/IP implementations. The list of "services" must include the UEntity IDs of all entities running on the host-protocol (in the reference implementations that means all components running with the Zenoh transport)! The term service in this context comes from SOME/IP and should not be confused with UService entity.
+
+## Running the Streamer in an example service mesh
+
+### Running the uStreamer binary
+
+To run one of the basic examples and see two entities with different transports communicate, you'll need to first run the streamer (see above) to bridge between the two transports in a terminal. This implementation should work out of the box with the given examples and the "CONFIG.json5".
+
+First run an MQTT broker for example by running:
+
+```bash
+mosquitto -d
+```
+
+Run the streamer with the default configuration file from here (the example-streamer-implementation folder):
+
+```bash
+cargo run -- --config="DEFAULT_CONFIG.json5"
+```
+
+This starts the streamer which should now be idle. As soon as a client tries to connect with the streamer, the connection will be logged.
+The streamer is set to have Zenoh as its "host protocol" or "host transport". This means that the streamer lives in the same component as the Zenoh transport, and shares its authority.
+In this setup "authority_B" is the authority of the Zenoh component (in this example the ECU), "authority_A" is the authority of the MQTT component (i.e. the cloud).
+
+### Running the Entities in a zenoh - MQTT5 setup
+
+Execute the following command from the project root directory to start two of the example UEntities:
+
+```bash
+cargo run --bin --features=
+```
+
+Depending on the setup you want to test, chose any of these combinations for your two UEntities:
+
+| Entity 1 | Entity 2 |
+| --------------- | ------------- |
+| mqtt_client | zenoh_service |
+| mqtt_service | zenoh_client |
+| mqtt_publisher | zenoh_subscriber |
+| mqtt_subscriber | zenoh_publisher |
+
+The service and client will run forever. Every second a new request message is sent from the client via zenoh. That Zenoh message is caught and routed over MQTT to the service. The response to the request makes the same journey in reverse.
+
+### Running the Entities in a zenoh - SOME/IP setup
+
+Execute the following command from the project root directory to start one of the Entities:
+
+```bash
+cargo run -p example-streamer-uses --bin
+```
+
+Depending on the setup you want to test, chose any of these examples:
+
+| Entity 1 | Entity 2 |
+| --------------- | ------------- |
+| someip_client | zenoh_service |
+| someip_service | zenoh_client |
+| someip_publisher | zenoh_subscriber |
+| someip_subscriber | zenoh_publisher |
+
+The two entities will run forever and exchange messages between each other.
+
+## Going forward from here
+
+If you have familiarized yourself with the streamer to this point you should be able to continue by yourself.
+If the two reference implementations are not enough for your system you can consider the following next steps:
+
+- Create a streamer between SOME/IP and MQTT (mind that SOME/IP cannot act as the host-transport)
+- Run a streamer that can forward messages between all three transports
+- Implement your own custom or proprietary UTransport and connect it to one of the three officially supported ones
+- Try out a system with your own UEntities. Between MQTT and Zenoh its also possible to send notification type messages
diff --git a/configurable-streamer/ZENOH_CONFIG.json5 b/configurable-streamer/ZENOH_CONFIG.json5
new file mode 100644
index 00000000..3c305bfe
--- /dev/null
+++ b/configurable-streamer/ZENOH_CONFIG.json5
@@ -0,0 +1,25 @@
+// This zenoh config is a slimmed down version.
+// For a full config example with more details check
+// https://github.com/eclipse-zenoh/zenoh/blob/main/DEFAULT_CONFIG.json5
+{
+ mode: "router",
+ connect: {
+ endpoints: ["tcp/0.0.0.0:7447"],
+ },
+ scouting: {
+ multicast: {
+ enabled: false,
+ },
+ gossip: {
+ enabled: true,
+ },
+ },
+ routing: {
+ router: {
+ peers_failover_brokering: true,
+ },
+ peer: {
+ mode: "peer_to_peer",
+ },
+ },
+}
diff --git a/configurable-streamer/src/config.rs b/configurable-streamer/src/config.rs
new file mode 100644
index 00000000..1475e964
--- /dev/null
+++ b/configurable-streamer/src/config.rs
@@ -0,0 +1,93 @@
+/********************************************************************************
+ * Copyright (c) 2025 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Apache License Version 2.0 which is available at
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ ********************************************************************************/
+
+use serde::{Deserialize, Serialize};
+
+#[derive(Deserialize, Serialize, Debug, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct Config {
+ pub(crate) up_streamer_config: UpStreamerConfig,
+ pub(crate) streamer_uuri: StreamerUuri,
+ pub(crate) usubscription_config: USubscriptionConfig,
+ pub(crate) transports: Transports,
+}
+
+#[derive(Deserialize, Serialize, Debug, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct UpStreamerConfig {
+ pub(crate) message_queue_size: u16,
+}
+
+#[derive(Deserialize, Serialize, Debug, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct StreamerUuri {
+ pub(crate) authority: String,
+ pub(crate) ue_id: u32,
+ pub(crate) ue_version_major: u8,
+}
+
+#[derive(Deserialize, Serialize, Debug, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct USubscriptionConfig {
+ pub(crate) file_path: String,
+}
+
+#[derive(Deserialize, Serialize, Debug, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct Transports {
+ pub(crate) zenoh: ZenohTransport,
+ pub(crate) mqtt: MqttTransport,
+}
+
+#[derive(Deserialize, Serialize, Debug, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct ZenohTransport {
+ pub(crate) config_file: String,
+ pub(crate) endpoints: Vec,
+}
+
+#[derive(Deserialize, Serialize, Debug, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct MqttTransport {
+ pub(crate) config_file: String,
+ pub(crate) endpoints: Vec,
+ #[serde(skip)]
+ pub(crate) mqtt_details: Option,
+}
+
+#[derive(Deserialize, Serialize, Debug, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct EndpointConfig {
+ pub(crate) authority: String,
+ pub(crate) endpoint: String,
+ pub(crate) forwarding: Vec,
+}
+
+#[derive(Deserialize, Serialize, Debug, Clone)]
+#[serde(deny_unknown_fields)]
+pub struct MqttConfigDetails {
+ pub(crate) hostname: String,
+ pub(crate) port: u16,
+ pub(crate) max_buffered_messages: i32,
+ pub(crate) max_subscriptions: i32,
+ pub(crate) session_expiry_interval: i32,
+ pub(crate) username: String,
+}
+
+impl MqttTransport {
+ pub fn load_mqtt_details(&mut self) -> Result<(), Box> {
+ let config_contents = std::fs::read_to_string(&self.config_file)?;
+ self.mqtt_details = Some(json5::from_str(&config_contents)?);
+ Ok(())
+ }
+}
diff --git a/configurable-streamer/src/main.rs b/configurable-streamer/src/main.rs
new file mode 100644
index 00000000..4ccedc3c
--- /dev/null
+++ b/configurable-streamer/src/main.rs
@@ -0,0 +1,191 @@
+/********************************************************************************
+ * Copyright (c) 2024 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Apache License Version 2.0 which is available at
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ ********************************************************************************/
+
+mod config;
+
+use crate::config::Config;
+use clap::Parser;
+use log::info;
+use std::io::Read;
+use std::sync::Arc;
+use std::thread;
+use std::{collections::HashMap, fs::File};
+use up_rust::{UCode, UStatus, UTransport, UUri};
+use up_streamer::{Endpoint, UStreamer};
+use up_transport_mqtt5::{Mqtt5Transport, Mqtt5TransportOptions, MqttClientOptions};
+use up_transport_zenoh::UPTransportZenoh;
+use usubscription_static_file::USubscriptionStaticFile;
+use zenoh::config::Config as ZenohConfig;
+
+#[derive(Parser)]
+#[command()]
+struct StreamerArgs {
+ #[arg(short, long, value_name = "FILE")]
+ config: String,
+}
+
+#[tokio::main]
+async fn main() -> Result<(), UStatus> {
+ env_logger::init();
+
+ info!("Started up-linux-streamer-configurable");
+
+ // Get the config file.
+ let args = StreamerArgs::parse();
+ let mut file = File::open(args.config)
+ .map_err(|e| UStatus::fail_with_code(UCode::NOT_FOUND, format!("File not found: {e:?}")))?;
+ let mut contents = String::new();
+ file.read_to_string(&mut contents).map_err(|e| {
+ UStatus::fail_with_code(
+ UCode::INTERNAL,
+ format!("Unable to read config file: {e:?}"),
+ )
+ })?;
+
+ let mut config: Config = json5::from_str(&contents).map_err(|e| {
+ UStatus::fail_with_code(
+ UCode::INTERNAL,
+ format!("Unable to parse config file: {e:?}"),
+ )
+ })?;
+ config.transports.mqtt.load_mqtt_details().unwrap();
+
+ let subscription_path = config.usubscription_config.file_path;
+ let usubscription = Arc::new(USubscriptionStaticFile::new(subscription_path));
+
+ // Start the streamer instance.
+ let mut streamer = UStreamer::new(
+ "up-streamer",
+ config.up_streamer_config.message_queue_size,
+ usubscription,
+ )
+ .expect("Failed to create uStreamer");
+
+ let mut endpoints: HashMap = HashMap::new();
+
+ // build the zenoh transport
+ let zenoh_config = ZenohConfig::from_file(config.transports.zenoh.config_file).unwrap();
+ let uri = UUri::try_from_parts(
+ &config.streamer_uuri.authority,
+ config.streamer_uuri.ue_id,
+ config.streamer_uuri.ue_version_major,
+ 0,
+ )
+ .unwrap();
+ let zenoh_transport: Arc = Arc::new(
+ UPTransportZenoh::new(zenoh_config, uri)
+ .await
+ .expect("Unable to initialize Zenoh UTransport"),
+ );
+
+ // build the mqtt5 transport
+ let mqtt_client_options = MqttClientOptions {
+ broker_uri: config
+ .transports
+ .mqtt
+ .mqtt_details
+ .clone()
+ .unwrap()
+ .hostname
+ + ":"
+ + &config
+ .transports
+ .mqtt
+ .mqtt_details
+ .unwrap()
+ .port
+ .to_string(),
+ ..Default::default()
+ };
+ let mqtt_transport_options = Mqtt5TransportOptions {
+ mqtt_client_options,
+ ..Default::default()
+ };
+ let mqtt5_transport = Mqtt5Transport::new(
+ mqtt_transport_options,
+ config.streamer_uuri.authority.clone(),
+ )
+ .await?;
+ mqtt5_transport.connect().await?;
+ let mqtt5_transport: Arc = Arc::new(mqtt5_transport);
+
+ // build all zenoh endpoints
+ for zenoh_endpoint_config in config.transports.zenoh.endpoints.clone() {
+ let endpoint = Endpoint::new(
+ &zenoh_endpoint_config.endpoint,
+ &zenoh_endpoint_config.authority,
+ zenoh_transport.clone(),
+ );
+ if endpoints
+ .insert(zenoh_endpoint_config.endpoint.clone(), endpoint)
+ .is_some()
+ {
+ return Err(UStatus::fail_with_code(
+ UCode::INVALID_ARGUMENT,
+ format!(
+ "Duplicate endpoint name found: {}",
+ zenoh_endpoint_config.endpoint
+ ),
+ ));
+ }
+ }
+
+ // build all mqtt endpoints
+ for mqtt_endpoint_config in config.transports.mqtt.endpoints.clone() {
+ let endpoint = Endpoint::new(
+ &mqtt_endpoint_config.endpoint,
+ &mqtt_endpoint_config.authority,
+ mqtt5_transport.clone(),
+ );
+ if endpoints
+ .insert(mqtt_endpoint_config.endpoint.clone(), endpoint)
+ .is_some()
+ {
+ return Err(UStatus::fail_with_code(
+ UCode::INVALID_ARGUMENT,
+ format!(
+ "Duplicate endpoint name found: {}",
+ mqtt_endpoint_config.endpoint
+ ),
+ ));
+ }
+ }
+
+ // set up the endpoint forwarding for zenoh
+ for zenoh_endpoint in config.transports.zenoh.endpoints {
+ for forwarding in zenoh_endpoint.forwarding {
+ let left_endpoint = endpoints.get(&zenoh_endpoint.endpoint).unwrap();
+ let right_endpoint = endpoints.get(&forwarding).unwrap();
+ streamer
+ .add_forwarding_rule(left_endpoint.to_owned(), right_endpoint.to_owned())
+ .await
+ .expect("Could not add forwarding rule from {zenoh.endpoint} to {forwarding}");
+ }
+ }
+
+ // set up the endpoint forwarding for mqtt
+ for mqtt5_endpoint in config.transports.mqtt.endpoints {
+ for forwarding in mqtt5_endpoint.forwarding {
+ let left_endpoint = endpoints.get(&mqtt5_endpoint.endpoint).unwrap();
+ let right_endpoint = endpoints.get(&forwarding).unwrap();
+ streamer
+ .add_forwarding_rule(left_endpoint.to_owned(), right_endpoint.to_owned())
+ .await
+ .expect("Could not add forwarding rule from {mqtt.endpoint} to {forwarding}");
+ }
+ }
+
+ thread::park();
+
+ Ok(())
+}
diff --git a/configurable-streamer/subscription_data.json b/configurable-streamer/subscription_data.json
new file mode 100644
index 00000000..ca03eaa2
--- /dev/null
+++ b/configurable-streamer/subscription_data.json
@@ -0,0 +1,4 @@
+{
+ "//authority_B/3039/1/8001": ["//authority_A/5678/1/1234"],
+ "//authority_A/5BA0/1/8001": ["//authority_B/5678/1/1234"]
+}
diff --git a/example-streamer-implementations/Cargo.toml b/example-streamer-implementations/Cargo.toml
index 8c0ad367..bccc4f93 100644
--- a/example-streamer-implementations/Cargo.toml
+++ b/example-streamer-implementations/Cargo.toml
@@ -23,14 +23,9 @@ license.workspace = true
name = "zenoh_someip"
required-features = ["zenoh-transport", "vsomeip-transport"]
-[[bin]]
-name = "zenoh_mqtt"
-required-features = ["zenoh-transport", "mqtt-transport"]
-
[features]
default = []
zenoh-transport = ["up-transport-zenoh", "zenoh"]
-mqtt-transport = ["up-transport-mqtt5"]
vsomeip-transport = ["up-transport-vsomeip"]
bundled-vsomeip = ["up-transport-vsomeip/bundled"]
@@ -48,9 +43,8 @@ up-rust = { workspace = true }
up-streamer = { path = "../up-streamer" }
up-transport-zenoh = { workspace = true, optional = true }
up-transport-vsomeip = { workspace = true, optional = true }
-up-transport-mqtt5 = { workspace = true, optional = true }
zenoh = { workspace = true, optional = true }
-usubscription-static-file = {path = "../utils/usubscription-static-file"}
+usubscription-static-file = { path = "../utils/usubscription-static-file" }
[dev-dependencies]
hello-world-protos = { path = "../utils/hello-world-protos" }
diff --git a/example-streamer-implementations/DEFAULT_CONFIG.json5 b/example-streamer-implementations/DEFAULT_CONFIG.json5
index 473a6f9a..c70ac220 100644
--- a/example-streamer-implementations/DEFAULT_CONFIG.json5
+++ b/example-streamer-implementations/DEFAULT_CONFIG.json5
@@ -33,6 +33,7 @@
transport: "Zenoh",
},
mqtt_config: {
+ authority: "authority_A",
// The URL of the MQTT broker (the provided mosquitto broker runs on locahost but docker networks might complicate that)
hostname: "localhost",
// The port of the broker (unencrypted MQTT like the provided mosquitto broker typically uses 1883, encrypted uses 8883)
diff --git a/example-streamer-implementations/ZENOH_CONFIG.json5 b/example-streamer-implementations/ZENOH_CONFIG.json5
index 5cbcc0e1..ed2219ab 100644
--- a/example-streamer-implementations/ZENOH_CONFIG.json5
+++ b/example-streamer-implementations/ZENOH_CONFIG.json5
@@ -129,7 +129,7 @@
// /// This option does not make LowLatency transport mandatory, the actual implementation of transport
// /// used will depend on Establish procedure and other party's settings
// ///
-// /// NOTE: Currently, the LowLatency transport doesn't preserve QoS prioritization.
+// /// NOTE: Currently, the LowLatency transport doesn't preserve QoS prioritization.
// /// NOTE: Due to the note above, 'lowlatency' is incompatible with 'qos' option, so in order to
// /// enable 'lowlatency' you need to explicitly disable 'qos'.
// lowlatency: false,
@@ -138,19 +138,19 @@
// enabled: true,
// },
// /// Enables compression on unicast communications.
-// /// Compression capabilities are negotiated during session establishment.
+// /// Compression capabilities are negotiated during session establishment.
// /// If both Zenoh nodes support compression, then compression is activated.
// compression: {
// enabled: false,
// },
-// },
+// },
// multicast: {
-// /// Enables QoS on multicast communication.
+// /// Enables QoS on multicast communication.
// /// Default to false for Zenoh-to-Zenoh-Pico out-of-the-box compatibility.
// qos: {
// enabled: false,
// },
-// /// Enables compression on multicast communication.
+// /// Enables compression on multicast communication.
// /// Default to false for Zenoh-to-Zenoh-Pico out-of-the-box compatibility.
// compression: {
// enabled: false,
@@ -416,4 +416,4 @@
// }
// },
-}
\ No newline at end of file
+}
diff --git a/example-streamer-implementations/src/bin/config/mod.rs b/example-streamer-implementations/src/bin/config/mod.rs
index f97557ad..01600b05 100644
--- a/example-streamer-implementations/src/bin/config/mod.rs
+++ b/example-streamer-implementations/src/bin/config/mod.rs
@@ -69,6 +69,7 @@ pub struct SomeipConfig {
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(deny_unknown_fields)]
pub struct MqttConfig {
+ pub(crate) authority: String,
pub(crate) hostname: String,
pub(crate) port: u16,
pub(crate) max_buffered_messages: i32,
diff --git a/example-streamer-implementations/src/bin/zenoh_mqtt.rs b/example-streamer-implementations/src/bin/zenoh_mqtt.rs
deleted file mode 100644
index 2943fc71..00000000
--- a/example-streamer-implementations/src/bin/zenoh_mqtt.rs
+++ /dev/null
@@ -1,138 +0,0 @@
-/********************************************************************************
- * Copyright (c) 2024 Contributors to the Eclipse Foundation
- *
- * See the NOTICE file(s) distributed with this work for additional
- * information regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Apache License Version 2.0 which is available at
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * SPDX-License-Identifier: Apache-2.0
- ********************************************************************************/
-
-mod config;
-
-use crate::config::Config;
-use clap::Parser;
-use log::{info, trace};
-use std::fs::File;
-use std::io::Read;
-use std::sync::Arc;
-use std::thread;
-use up_rust::{UCode, UStatus, UTransport, UUri, UUID};
-use up_streamer::{Endpoint, UStreamer};
-use up_transport_mqtt5::{MqttConfig, MqttProtocol, UPClientMqtt, UPClientMqttType};
-use up_transport_zenoh::UPTransportZenoh;
-use usubscription_static_file::USubscriptionStaticFile;
-use zenoh::config::Config as ZenohConfig;
-
-#[derive(Parser)]
-#[command()]
-struct StreamerArgs {
- #[arg(short, long, value_name = "FILE")]
- config: String,
-}
-
-#[tokio::main]
-async fn main() -> Result<(), UStatus> {
- env_logger::init();
-
- info!("Started up-linux-streamer-mqtt-zenoh");
-
- // Get the config file.
- let args = StreamerArgs::parse();
- let mut file = File::open(args.config)
- .map_err(|e| UStatus::fail_with_code(UCode::NOT_FOUND, format!("File not found: {e:?}")))?;
- let mut contents = String::new();
- file.read_to_string(&mut contents).map_err(|e| {
- UStatus::fail_with_code(
- UCode::INTERNAL,
- format!("Unable to read config file: {e:?}"),
- )
- })?;
-
- let config: Config = json5::from_str(&contents).map_err(|e| {
- UStatus::fail_with_code(
- UCode::INTERNAL,
- format!("Unable to parse config file: {e:?}"),
- )
- })?;
-
- let subscription_path = config.usubscription_config.file_path;
- let usubscription = Arc::new(USubscriptionStaticFile::new(subscription_path));
-
- // Start the streamer instance.
- let mut streamer = UStreamer::new(
- "up-streamer",
- config.up_streamer_config.message_queue_size,
- usubscription,
- )
- .expect("Failed to create uStreamer");
-
- // In this implementation we define that the streamer lives in the same ecu component as the zenoh entity and so shares its authority name but with a different service ID.
- let streamer_uuri = UUri::try_from_parts(
- &config.streamer_uuri.authority,
- config.streamer_uuri.ue_id,
- config.streamer_uuri.ue_version_major,
- 0,
- )
- .expect("Unable to form streamer_uuri");
-
- trace!("streamer_uuri: {streamer_uuri:#?}");
- let zenoh_config = ZenohConfig::from_file(config.zenoh_transport_config.config_file).unwrap();
-
- let zenoh_transport: Arc = Arc::new(
- UPTransportZenoh::new(zenoh_config, streamer_uuri)
- .await
- .expect("Unable to initialize Zenoh UTransport"),
- );
-
- // Because the streamer runs on the ecu side in this implementation, we call the zenoh endpoint the "host".
- let zenoh_endpoint = Endpoint::new(
- "host_endpoint",
- &config.streamer_uuri.authority,
- zenoh_transport.clone(),
- );
-
- let mqtt_config = MqttConfig {
- mqtt_protocol: MqttProtocol::Mqtt,
- mqtt_hostname: config.mqtt_config.hostname,
- mqtt_port: config.mqtt_config.port,
- max_buffered_messages: config.mqtt_config.max_buffered_messages,
- max_subscriptions: config.mqtt_config.max_subscriptions,
- session_expiry_interval: config.mqtt_config.session_expiry_interval,
- ssl_options: None,
- username: config.mqtt_config.username,
- };
-
- let mqtt_transport: Arc = Arc::new(
- UPClientMqtt::new(
- mqtt_config,
- UUID::build(),
- "cloud".to_string(),
- UPClientMqttType::Device,
- )
- .await
- .expect("Could not create mqtt transport."),
- );
-
- // In this implementation, the mqtt entity runs in the cloud and has its own authority.
- let mqtt_endpoint = Endpoint::new("cloud_endpoint", "authority_A", mqtt_transport.clone());
-
- // Here we tell the streamer to forward any zenoh messages to the mqtt endpoint
- streamer
- .add_forwarding_rule(zenoh_endpoint.clone(), mqtt_endpoint.clone())
- .await
- .expect("Could not add zenoh -> mqtt forwarding rule");
-
- // And here we set up the forwarding in the other direction.
- streamer
- .add_forwarding_rule(mqtt_endpoint.clone(), zenoh_endpoint.clone())
- .await
- .expect("Could not add mqtt -> zenoh forwarding rule");
-
- thread::park();
-
- Ok(())
-}
diff --git a/example-streamer-uses/src/bin/mqtt_client.rs b/example-streamer-uses/src/bin/mqtt_client.rs
index 46d2f218..1251a280 100644
--- a/example-streamer-uses/src/bin/mqtt_client.rs
+++ b/example-streamer-uses/src/bin/mqtt_client.rs
@@ -18,8 +18,8 @@ use hello_world_protos::hello_world_service::HelloRequest;
use log::info;
use std::sync::Arc;
use std::time::Duration;
-use up_rust::{UListener, UMessageBuilder, UStatus, UTransport, UUri, UUID};
-use up_transport_mqtt5::{MqttConfig, UPClientMqtt, UPClientMqttType};
+use up_rust::{UListener, UMessageBuilder, UStatus, UTransport, UUri};
+use up_transport_mqtt5::{Mqtt5Transport, Mqtt5TransportOptions, MqttClientOptions};
const SERVICE_AUTHORITY: &str = "authority_B";
const SERVICE_UE_ID: u32 = 0x1236;
@@ -56,29 +56,19 @@ async fn main() -> Result<(), UStatus> {
)
.unwrap();
- let ssl_options = None;
-
- let mqtt_config = MqttConfig {
- mqtt_protocol: up_transport_mqtt5::MqttProtocol::Mqtt,
- mqtt_port: 1883,
- mqtt_hostname: "localhost".to_string(),
- max_buffered_messages: 100,
- max_subscriptions: 100,
- session_expiry_interval: 3600,
- ssl_options,
- username: "user".to_string(),
+ let mqtt_client_options = MqttClientOptions {
+ broker_uri: "localhost:1883".to_string(),
+ ..Default::default()
+ };
+ let mqtt_transport_options = Mqtt5TransportOptions {
+ mqtt_client_options,
+ ..Default::default()
};
+ let mqtt5_transport =
+ Mqtt5Transport::new(mqtt_transport_options, CLIENT_AUTHORITY.to_string()).await?;
+ mqtt5_transport.connect().await?;
- let client: Arc = Arc::new(
- UPClientMqtt::new(
- mqtt_config,
- UUID::build(),
- CLIENT_AUTHORITY.to_string(),
- UPClientMqttType::Device,
- )
- .await
- .expect("Could not create mqtt transport."),
- );
+ let client: Arc = Arc::new(mqtt5_transport);
let service_response_listener: Arc = Arc::new(ServiceResponseListener);
client
diff --git a/example-streamer-uses/src/bin/mqtt_publisher.rs b/example-streamer-uses/src/bin/mqtt_publisher.rs
index 4618fca1..87220ca5 100644
--- a/example-streamer-uses/src/bin/mqtt_publisher.rs
+++ b/example-streamer-uses/src/bin/mqtt_publisher.rs
@@ -18,8 +18,8 @@ use hello_world_protos::timeofday::TimeOfDay;
use log::info;
use std::sync::Arc;
use std::time::Duration;
-use up_rust::{UMessageBuilder, UStatus, UTransport, UUri, UUID};
-use up_transport_mqtt5::{MqttConfig, UPClientMqtt, UPClientMqttType};
+use up_rust::{UMessageBuilder, UStatus, UTransport, UUri};
+use up_transport_mqtt5::{Mqtt5Transport, Mqtt5TransportOptions, MqttClientOptions};
const PUB_TOPIC_AUTHORITY: &str = "authority_A";
const PUB_TOPIC_UE_ID: u32 = 0x5BA0;
@@ -41,29 +41,19 @@ async fn main() -> Result<(), UStatus> {
)
.unwrap();
- let ssl_options = None;
-
- let mqtt_config = MqttConfig {
- mqtt_protocol: up_transport_mqtt5::MqttProtocol::Mqtt,
- mqtt_port: 1883,
- mqtt_hostname: "localhost".to_string(),
- max_buffered_messages: 100,
- max_subscriptions: 100,
- session_expiry_interval: 3600,
- ssl_options,
- username: "user".to_string(),
+ let mqtt_client_options = MqttClientOptions {
+ broker_uri: "localhost:1883".to_string(),
+ ..Default::default()
+ };
+ let mqtt_transport_options = Mqtt5TransportOptions {
+ mqtt_client_options,
+ ..Default::default()
};
+ let mqtt5_transport =
+ Mqtt5Transport::new(mqtt_transport_options, PUB_TOPIC_AUTHORITY.to_string()).await?;
+ mqtt5_transport.connect().await?;
- let publisher: Arc = Arc::new(
- UPClientMqtt::new(
- mqtt_config,
- UUID::build(),
- PUB_TOPIC_AUTHORITY.to_string(),
- UPClientMqttType::Device,
- )
- .await
- .expect("Could not create mqtt transport."),
- );
+ let publisher: Arc = Arc::new(mqtt5_transport);
loop {
tokio::time::sleep(Duration::from_millis(1000)).await;
diff --git a/example-streamer-uses/src/bin/mqtt_service.rs b/example-streamer-uses/src/bin/mqtt_service.rs
index 38b43108..bd9dc01a 100644
--- a/example-streamer-uses/src/bin/mqtt_service.rs
+++ b/example-streamer-uses/src/bin/mqtt_service.rs
@@ -17,8 +17,8 @@ use common::ServiceRequestResponder;
use log::info;
use std::sync::Arc;
use std::thread;
-use up_rust::{UListener, UStatus, UTransport, UUri, UUID};
-use up_transport_mqtt5::{MqttConfig, UPClientMqtt, UPClientMqttType};
+use up_rust::{UListener, UStatus, UTransport, UUri};
+use up_transport_mqtt5::{Mqtt5Transport, Mqtt5TransportOptions, MqttClientOptions};
const SERVICE_AUTHORITY: &str = "authority_A";
const SERVICE_UE_ID: u32 = 0x4321;
@@ -42,29 +42,19 @@ async fn main() -> Result<(), UStatus> {
)
.unwrap();
- let ssl_options = None;
-
- let mqtt_config = MqttConfig {
- mqtt_protocol: up_transport_mqtt5::MqttProtocol::Mqtt,
- mqtt_port: 1883,
- mqtt_hostname: "localhost".to_string(),
- max_buffered_messages: 100,
- max_subscriptions: 100,
- session_expiry_interval: 3600,
- ssl_options,
- username: "user".to_string(),
+ let mqtt_client_options = MqttClientOptions {
+ broker_uri: "localhost:1883".to_string(),
+ ..Default::default()
+ };
+ let mqtt_transport_options = Mqtt5TransportOptions {
+ mqtt_client_options,
+ ..Default::default()
};
+ let mqtt5_transport =
+ Mqtt5Transport::new(mqtt_transport_options, SERVICE_AUTHORITY.to_string()).await?;
+ mqtt5_transport.connect().await?;
- let service: Arc = Arc::new(
- UPClientMqtt::new(
- mqtt_config,
- UUID::build(),
- SERVICE_AUTHORITY.to_string(),
- UPClientMqttType::Device, // Todo: make sure that UPClientMqttType::Cloud also works
- )
- .await
- .expect("Could not create mqtt transport."),
- );
+ let service: Arc = Arc::new(mqtt5_transport);
let service_request_responder: Arc =
Arc::new(ServiceRequestResponder::new(service.clone()));
diff --git a/example-streamer-uses/src/bin/mqtt_subscriber.rs b/example-streamer-uses/src/bin/mqtt_subscriber.rs
index 5d28fb1d..e217e61f 100644
--- a/example-streamer-uses/src/bin/mqtt_subscriber.rs
+++ b/example-streamer-uses/src/bin/mqtt_subscriber.rs
@@ -17,8 +17,8 @@ use common::PublishReceiver;
use log::info;
use std::sync::Arc;
use std::thread;
-use up_rust::{UListener, UStatus, UTransport, UUri, UUID};
-use up_transport_mqtt5::{MqttConfig, UPClientMqtt, UPClientMqttType};
+use up_rust::{UListener, UStatus, UTransport, UUri};
+use up_transport_mqtt5::{Mqtt5Transport, Mqtt5TransportOptions, MqttClientOptions};
const PUB_TOPIC_AUTHORITY: &str = "authority_B";
const PUB_TOPIC_UE_ID: u32 = 0x3039;
@@ -42,29 +42,19 @@ async fn main() -> Result<(), UStatus> {
)
.unwrap();
- let ssl_options = None;
-
- let mqtt_config = MqttConfig {
- mqtt_protocol: up_transport_mqtt5::MqttProtocol::Mqtt,
- mqtt_port: 1883,
- mqtt_hostname: "localhost".to_string(),
- max_buffered_messages: 100,
- max_subscriptions: 100,
- session_expiry_interval: 3600,
- ssl_options,
- username: "user".to_string(),
+ let mqtt_client_options = MqttClientOptions {
+ broker_uri: "localhost:1883".to_string(),
+ ..Default::default()
+ };
+ let mqtt_transport_options = Mqtt5TransportOptions {
+ mqtt_client_options,
+ ..Default::default()
};
+ let mqtt5_transport =
+ Mqtt5Transport::new(mqtt_transport_options, SUB_TOPIC_AUTHORITY.to_string()).await?;
+ mqtt5_transport.connect().await?;
- let subscriber: Arc = Arc::new(
- UPClientMqtt::new(
- mqtt_config,
- UUID::build(),
- SUB_TOPIC_AUTHORITY.to_string(),
- UPClientMqttType::Device,
- )
- .await
- .expect("Could not create mqtt transport."),
- );
+ let subscriber: Arc = Arc::new(mqtt5_transport);
let publish_receiver: Arc = Arc::new(PublishReceiver);
subscriber
diff --git a/example-streamer-uses/src/bin/zenoh_client.rs b/example-streamer-uses/src/bin/zenoh_client.rs
index 3a185d2b..4c9e21d1 100644
--- a/example-streamer-uses/src/bin/zenoh_client.rs
+++ b/example-streamer-uses/src/bin/zenoh_client.rs
@@ -50,7 +50,7 @@ fn client_uuri() -> UUri {
#[command(version, about, long_about = None)]
struct Args {
/// The endpoint for Zenoh client to connect to
- #[arg(short, long, default_value = "tcp/0.0.0.0:7445")]
+ #[arg(short, long, default_value = "tcp/127.0.0.1:7447")]
endpoint: String,
}
@@ -71,7 +71,7 @@ async fn main() -> Result<(), UStatus> {
// Add the IPv4 endpoint to the Zenoh configuration
zenoh_config
- .listen
+ .connect
.endpoints
.set(vec![ipv4_endpoint])
.expect("Unable to set Zenoh Config");
diff --git a/example-streamer-uses/src/bin/zenoh_publisher.rs b/example-streamer-uses/src/bin/zenoh_publisher.rs
index 81eab92d..52922130 100644
--- a/example-streamer-uses/src/bin/zenoh_publisher.rs
+++ b/example-streamer-uses/src/bin/zenoh_publisher.rs
@@ -42,7 +42,7 @@ fn publisher_uuri() -> UUri {
#[command(version, about, long_about = None)]
struct Args {
/// The endpoint for Zenoh client to connect to
- #[arg(short, long, default_value = "tcp/0.0.0.0:7444")]
+ #[arg(short, long, default_value = "tcp/127.0.0.1:7447")]
endpoint: String,
}
@@ -63,7 +63,7 @@ async fn main() -> Result<(), UStatus> {
// Add the IPv4 endpoint to the Zenoh configuration
zenoh_config
- .listen
+ .connect
.endpoints
.set(vec![ipv4_endpoint])
.expect("Unable to set Zenoh Config");
diff --git a/example-streamer-uses/src/bin/zenoh_service.rs b/example-streamer-uses/src/bin/zenoh_service.rs
index b1f6e15b..c4504805 100644
--- a/example-streamer-uses/src/bin/zenoh_service.rs
+++ b/example-streamer-uses/src/bin/zenoh_service.rs
@@ -42,7 +42,7 @@ fn service_uuri() -> UUri {
#[command(version, about, long_about = None)]
struct Args {
/// The endpoint for Zenoh client to connect to
- #[arg(short, long, default_value = "tcp/0.0.0.0:7443")]
+ #[arg(short, long, default_value = "tcp/localhost:7447")]
endpoint: String,
}
@@ -63,7 +63,7 @@ async fn main() -> Result<(), UStatus> {
// Add the IPv4 endpoint to the Zenoh configuration
zenoh_config
- .listen
+ .connect
.endpoints
.set(vec![ipv4_endpoint])
.expect("Unable to set Zenoh Config");
diff --git a/example-streamer-uses/src/bin/zenoh_subscriber.rs b/example-streamer-uses/src/bin/zenoh_subscriber.rs
index 243808a3..d41fe3fa 100644
--- a/example-streamer-uses/src/bin/zenoh_subscriber.rs
+++ b/example-streamer-uses/src/bin/zenoh_subscriber.rs
@@ -46,7 +46,7 @@ fn subscriber_uuri() -> UUri {
#[command(version, about, long_about = None)]
struct Args {
/// The endpoint for Zenoh client to connect to
- #[arg(short, long, default_value = "tcp/0.0.0.0:7442")]
+ #[arg(short, long, default_value = "tcp/127.0.0.1:7447")]
endpoint: String,
}
@@ -67,7 +67,7 @@ async fn main() -> Result<(), UStatus> {
// Add the IPv4 endpoint to the Zenoh configuration
zenoh_config
- .listen
+ .connect
.endpoints
.set(vec![ipv4_endpoint])
.expect("Unable to set Zenoh Config");
diff --git a/example-streamer-uses/vsomeip-configs/someip_client.json b/example-streamer-uses/vsomeip-configs/someip_client.json
index b5f4ce44..fdf8aaa5 100644
--- a/example-streamer-uses/vsomeip-configs/someip_client.json
+++ b/example-streamer-uses/vsomeip-configs/someip_client.json
@@ -1,9 +1,8 @@
{
- "applications" :
- [
- {
- "name" : "0x5678",
- "id" : "0x5678"
- }
- ]
+ "applications": [
+ {
+ "name": "0x5678",
+ "id": "0x5678"
+ }
+ ]
}
diff --git a/example-streamer-uses/vsomeip-configs/someip_publisher.json b/example-streamer-uses/vsomeip-configs/someip_publisher.json
index 4ed3ddbe..27ed6113 100644
--- a/example-streamer-uses/vsomeip-configs/someip_publisher.json
+++ b/example-streamer-uses/vsomeip-configs/someip_publisher.json
@@ -1,9 +1,8 @@
{
- "applications" :
- [
- {
- "name" : "0x1237",
- "id" : "0x1237"
- }
- ]
+ "applications": [
+ {
+ "name": "0x1237",
+ "id": "0x1237"
+ }
+ ]
}
diff --git a/example-streamer-uses/vsomeip-configs/someip_service.json b/example-streamer-uses/vsomeip-configs/someip_service.json
index 8f840b13..e2bad4ed 100644
--- a/example-streamer-uses/vsomeip-configs/someip_service.json
+++ b/example-streamer-uses/vsomeip-configs/someip_service.json
@@ -1,9 +1,8 @@
{
- "applications" :
- [
- {
- "name" : "0x4321",
- "id" : "0x4321"
- }
- ]
+ "applications": [
+ {
+ "name": "0x4321",
+ "id": "0x4321"
+ }
+ ]
}
diff --git a/example-streamer-uses/vsomeip-configs/someip_subscriber.json b/example-streamer-uses/vsomeip-configs/someip_subscriber.json
index 8f840b13..e2bad4ed 100644
--- a/example-streamer-uses/vsomeip-configs/someip_subscriber.json
+++ b/example-streamer-uses/vsomeip-configs/someip_subscriber.json
@@ -1,9 +1,8 @@
{
- "applications" :
- [
- {
- "name" : "0x4321",
- "id" : "0x4321"
- }
- ]
+ "applications": [
+ {
+ "name": "0x4321",
+ "id": "0x4321"
+ }
+ ]
}
diff --git a/up-linux-streamer-plugin/Cargo.toml b/up-linux-streamer-plugin/Cargo.toml
index bddb08d5..7304835a 100644
--- a/up-linux-streamer-plugin/Cargo.toml
+++ b/up-linux-streamer-plugin/Cargo.toml
@@ -21,8 +21,14 @@ license.workspace = true
[features]
default = ["dynamic_plugin"]
-zenoh-transport = ["up-transport-zenoh", "zenoh", "zenoh-core", "zenoh-plugin-trait",
- "zenoh-result", "zenoh-util", "zenoh_backend_traits"]
+zenoh-transport = [
+ "up-transport-zenoh",
+ "zenoh",
+ "zenoh-core",
+ "zenoh-plugin-trait",
+ "zenoh-result",
+ "zenoh-util",
+]
vsomeip-transport = ["up-transport-vsomeip"]
bundled-vsomeip = ["up-transport-vsomeip/bundled"]
dynamic_plugin = []
@@ -47,13 +53,14 @@ serde = { version = "1.0.154" }
serde_json = { version = "1.0.94" }
tokio = { version = "1.35.1", default-features = false }
up-rust = { workspace = true }
-up-transport-zenoh = { workspace = true, optional = true, features = ["zenoh-unstable"] }
+up-transport-zenoh = { workspace = true, optional = true, features = [
+ "zenoh-unstable",
+] }
up-transport-vsomeip = { workspace = true, optional = true }
up-streamer = { path = "../up-streamer" }
-usubscription-static-file = {path = "../utils/usubscription-static-file"}
+usubscription-static-file = { path = "../utils/usubscription-static-file" }
zenoh = { workspace = true, optional = true }
zenoh-core = { workspace = true, optional = true }
zenoh-plugin-trait = { workspace = true, optional = true }
zenoh-result = { workspace = true, optional = true }
zenoh-util = { workspace = true, optional = true }
-zenoh_backend_traits = { workspace = true, optional = true }
diff --git a/up-streamer/src/ustreamer.rs b/up-streamer/src/ustreamer.rs
index a601d451..ccc410e2 100644
--- a/up-streamer/src/ustreamer.rs
+++ b/up-streamer/src/ustreamer.rs
@@ -50,9 +50,13 @@ lazy_static! {
}
fn uauthority_to_uuri(authority_name: &str) -> UUri {
+ // let mut uuri = UUri::any();
+ // uuri.authority_name = authority_name.to_string();
+ // uuri
+
UUri {
authority_name: authority_name.to_string(),
- ue_id: 0x0000_FFFF, // any instance, any service
+ ue_id: 0xFFFF_FFFF, // any instance, any service
ue_version_major: 0xFF, // any
resource_id: 0xFFFF, // any
..Default::default()
@@ -190,6 +194,7 @@ impl ForwardingListeners {
pub async fn insert(
&self,
in_transport: Arc,
+ in_authority: &str,
out_authority: &str,
forwarding_id: &str,
out_sender: Sender>,
@@ -219,9 +224,10 @@ impl ForwardingListeners {
// Perform async registration and fetching
uuris_to_backpedal.insert((UUri::any(), Some(uauthority_to_uuri(out_authority))));
+
if let Err(err) = in_transport
.register_listener(
- &UUri::any(),
+ &uauthority_to_uuri(in_authority),
Some(&uauthority_to_uuri(out_authority)),
forwarding_listener.clone(),
)
@@ -271,9 +277,20 @@ impl ForwardingListeners {
};
for subscriber in subscribers {
+ let source_uri = UUri::try_from_parts(
+ in_authority,
+ subscriber.topic.ue_id,
+ subscriber.topic.uentity_major_version(),
+ subscriber.topic.resource_id(),
+ )
+ .unwrap();
+ info!(
+ "in authority: {}, out authority: {}, source URI filter: {:?}",
+ in_authority, out_authority, source_uri
+ );
uuris_to_backpedal.insert((subscriber.topic.clone(), None));
if let Err(err) = in_transport
- .register_listener(&subscriber.topic, None, forwarding_listener.clone())
+ .register_listener(&source_uri, None, forwarding_listener.clone())
.await
{
warn!(
@@ -567,7 +584,7 @@ impl UStreamer {
///
/// * name - Used to uniquely identify this UStreamer in logs
/// * message_queue_size - Determines size of channel used to communicate between `ForwardingListener`
- /// and the worker tasks for each currently endpointd `UTransport`
+ /// and the worker tasks for each currently endpointd `UTransport`
/// * usubscription - Subscription service which will be used to store subscription info for topics.
pub fn new(
name: &str,
@@ -722,6 +739,7 @@ impl UStreamer {
.forwarding_listeners
.insert(
r#in.transport.clone(),
+ &r#in.authority,
&out.authority,
&Self::forwarding_id(&r#in, &out),
out_sender,
diff --git a/up-streamer/tests/single_local_single_remote.rs b/up-streamer/tests/single_local_single_remote.rs
index 0ec9fa45..53b299e7 100644
--- a/up-streamer/tests/single_local_single_remote.rs
+++ b/up-streamer/tests/single_local_single_remote.rs
@@ -33,7 +33,7 @@ use up_rust::{UListener, UTransport};
use up_streamer::{Endpoint, UStreamer};
use usubscription_static_file::USubscriptionStaticFile;
-const DURATION_TO_RUN_CLIENTS: u128 = 1_000;
+const DURATION_TO_RUN_CLIENTS: u128 = 10;
const SENT_MESSAGE_VEC_CAPACITY: usize = 10_000;
#[tokio::test(flavor = "multi_thread")]
diff --git a/utils/hello-world-protos/Cargo.toml b/utils/hello-world-protos/Cargo.toml
index 6004a282..7b335839 100644
--- a/utils/hello-world-protos/Cargo.toml
+++ b/utils/hello-world-protos/Cargo.toml
@@ -23,4 +23,4 @@ protobuf = { workspace = true }
[build-dependencies]
protobuf-codegen = { version = "3.3" }
protoc-bin-vendored = { version = "3.0" }
-reqwest = { version = "0.12", features = ["blocking"] }
+reqwest = { version = "0.12.14", features = ["blocking"] }
diff --git a/utils/hello-world-protos/build.rs b/utils/hello-world-protos/build.rs
index a31951fe..3cb54949 100644
--- a/utils/hello-world-protos/build.rs
+++ b/utils/hello-world-protos/build.rs
@@ -46,7 +46,7 @@ fn get_and_build_protos(
let mut proto_files = Vec::new();
for url in urls {
- let file_name = url.split('/').last().unwrap();
+ let file_name = url.split('/').next_back().unwrap();
let mut file_path_buf = PathBuf::from(&proto_folder);
// Check if the URL is from googleapis to determine the correct path
diff --git a/utils/integration-test-utils/src/up_client_foo.rs b/utils/integration-test-utils/src/up_client_foo.rs
index 28158898..c6f8a159 100644
--- a/utils/integration-test-utils/src/up_client_foo.rs
+++ b/utils/integration-test-utils/src/up_client_foo.rs
@@ -243,65 +243,28 @@ impl UTransport for UPClientFoo {
self.name, source_filter, sink_filter
);
- let sink_for_specific = {
- if let Some(sink) = sink_filter {
- sink.authority_name != "*"
- } else {
- false
- }
- };
-
- return if source_filter.authority_name == "*" && sink_for_specific {
- let sink_authority = sink_filter.unwrap().clone().authority_name;
- let mut authority_listeners = self.authority_listeners.lock().await;
- let authority = sink_authority;
- debug!(
- "{}: registering authority listener on authority: {}",
- &self.name, authority
- );
- let authority_listeners = authority_listeners.entry(authority.clone()).or_default();
- let comparable_listener = ComparableListener::new(listener);
- let inserted = authority_listeners.insert(comparable_listener);
-
- match inserted {
- true => {
- debug!("{}: successfully registered authority listener for: authority: {}", &self.name, authority);
-
- Ok(())
- },
- false => Err(UStatus::fail_with_code(
- UCode::ALREADY_EXISTS,
- format!("{}: UUri and listener already registered! failed to register authority listener for: authority: {}", &self.name, authority)
- )),
- }
- } else {
- debug!(
- "{}: registering regular listener for: source: {:?} sink: {:?}",
- &self.name, source_filter, sink_filter
- );
-
- let mut listeners = self.listeners.lock().await;
- let topic_listeners = listeners
- .entry((source_filter.clone(), sink_filter.cloned()))
- .or_default();
- let comparable_listener = ComparableListener::new(listener);
- let inserted = topic_listeners.insert(comparable_listener);
-
- match inserted {
- true => {
- debug!(
- "{}: successfully registered regular listener for: source: {:?} sink: {:?}",
- &self.name, source_filter, sink_filter
- );
-
- Ok(())
- }
- false => Err(UStatus::fail_with_code(
- UCode::ALREADY_EXISTS,
- "UUri and listener already registered!",
- )),
- }
- };
+ let sink_authority = sink_filter.unwrap().clone().authority_name;
+ let mut authority_listeners = self.authority_listeners.lock().await;
+ let authority = sink_authority;
+ debug!(
+ "{}: registering authority listener on authority: {}",
+ &self.name, authority
+ );
+ let authority_listeners = authority_listeners.entry(authority.clone()).or_default();
+ let comparable_listener = ComparableListener::new(listener);
+ let inserted = authority_listeners.insert(comparable_listener);
+
+ match inserted {
+ true => {
+ debug!("{}: successfully registered authority listener for: authority: {}", &self.name, authority);
+
+ Ok(())
+ },
+ false => Err(UStatus::fail_with_code(
+ UCode::ALREADY_EXISTS,
+ format!("{}: UUri and listener already registered! failed to register authority listener for: authority: {}", &self.name, authority)
+ )),
+ }
}
async fn unregister_listener(
diff --git a/utils/mosquitto/docker-compose.yaml b/utils/mosquitto/docker-compose.yaml
index 09e6afd5..85b0e020 100644
--- a/utils/mosquitto/docker-compose.yaml
+++ b/utils/mosquitto/docker-compose.yaml
@@ -3,6 +3,6 @@ services:
image: eclipse-mosquitto:2.0
volumes:
# read-only prevents the container changing file owners on the host
- - ./mosquitto.conf:/mosquitto/config/mosquitto.conf:ro
+ - ./mosquitto.config:/mosquitto/config/mosquitto.conf:ro
ports:
- 1883:1883