Skip to content

Commit 1ee07e7

Browse files
Fix zenoh integration (eclipse-uprotocol#13)
* Fix zenoh integration * Add license info to cover zenoh dependencies * Remove inactive declarations from deny.toml
1 parent b613d30 commit 1ee07e7

File tree

6 files changed

+120
-62
lines changed

6 files changed

+120
-62
lines changed

Cargo.lock

Lines changed: 4 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deny.toml

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,29 @@
1414
# Config file for cargo deny
1515
# For all options see https://github.com/EmbarkStudios/cargo-deny/blob/main/deny.template.toml
1616

17+
[advisories]
18+
ignore = ["RUSTSEC-2023-0071"]
19+
1720
[bans]
1821
multiple-versions = "allow"
1922

2023
# If you add a license in the following section also consider changing about.toml
2124
[licenses]
22-
allow = ["Apache-2.0", "EPL-1.0", "EPL-2.0", "MIT"]
23-
#private = { ignore = true }
24-
exceptions = [{ name = "unicode-ident", allow = ["Unicode-3.0"] }]
25-
26-
# THIS IS ONLY TEMPORARY, UNTIL up-transport-socket-rust MERGES INITIAL PR AND PROPERLY DECLARES ITS LICENSE
27-
[licenses.private]
28-
ignore = true
29-
ignore-sources = [
30-
"https://github.com/eclipse-uprotocol/up-transport-socket.git",
25+
allow = [
26+
"Apache-2.0",
27+
"BSD-2-Clause",
28+
"BSD-3-Clause",
29+
"EPL-2.0",
30+
"ISC",
31+
"MIT",
32+
"MPL-2.0",
33+
"Unicode-3.0",
34+
"Zlib",
3135
]
36+
exceptions = [{ name = "ring", allow = ["OpenSSL"] }]
37+
#private = { ignore = true }
3238

33-
# TEMPORARY until this can be pulled from crates.io releases
34-
[sources]
35-
allow-git = ["https://github.com/eclipse-uprotocol/up-transport-mqtt5-rust.git"]
39+
[[licenses.clarify]]
40+
name = "ring"
41+
expression = "MIT AND ISC AND OpenSSL"
42+
license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }]

up-subscription-cli/Cargo.toml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ license = false
2828
eula = false
2929

3030
[features]
31-
default = ["mqtt5"]
31+
default = ["zenoh"]
3232
socket = ["dep:up-transport-socket-rust"]
3333
mqtt5 = ["dep:up-transport-mqtt5"]
34-
zenoh = ["dep:up-transport-zenoh"]
34+
zenoh = ["dep:up-transport-zenoh", "dep:serde_json"]
3535

3636
[dependencies]
3737
async-trait = { workspace = true }
@@ -41,13 +41,14 @@ env_logger = { workspace = true }
4141
futures = { workspace = true }
4242
log = { workspace = true }
4343
protobuf = { workspace = true }
44+
serde_json = { version = "1.0.138", optional = true }
4445
tokio = { workspace = true }
4546
up-rust = { workspace = true }
4647
up-subscription = { workspace = true }
4748
up-transport-mqtt5 = { git = "https://github.com/eclipse-uprotocol/up-transport-mqtt5-rust.git", rev = "8c15c38ecfa54e74eb1ee5570b1cc68ca34d0b8c", optional = true }
48-
# up-transport-mqtt5 = { version = "0.4.0", optional = true }
49+
#up-transport-mqtt5 = { version = "0.2.0", optional = true }
4950
up-transport-socket-rust = { git = "https://github.com/eclipse-uprotocol/up-transport-socket.git", rev = "78ac7ff6acba7090a79fc36b2ddca49bd93e7188", optional = true }
50-
up-transport-zenoh = { version = "0.4.0", optional = true }
51+
up-transport-zenoh = { version = "0.5.0", optional = true }
5152

5253
[target.'cfg(unix)'.dependencies]
5354
daemonize = { version = "0.5" }

up-subscription-cli/src/main.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ use daemonize::Daemonize;
2626
#[cfg(feature = "mqtt5")]
2727
use up_transport_mqtt5::MqttClientOptions;
2828

29+
#[cfg(feature = "zenoh")]
30+
use crate::transport::zenoh::ZenohArgs;
31+
2932
mod transport;
3033
#[cfg(feature = "mqtt5")]
3134
use transport::get_mqtt5_transport;
@@ -105,7 +108,11 @@ pub(crate) struct Args {
105108

106109
#[cfg(feature = "mqtt5")]
107110
#[command(flatten)]
108-
mqtt_client_options: MqttClientOptions,
111+
mqtt_args: MqttClientOptions,
112+
113+
#[cfg(feature = "zenoh")]
114+
#[command(flatten)]
115+
zenoh_args: ZenohArgs,
109116
}
110117

111118
#[tokio::main]
@@ -134,7 +141,7 @@ async fn main() {
134141
let transport: Option<Arc<dyn UTransport>> = match args.transport {
135142
#[cfg(feature = "mqtt5")]
136143
Transport::Mqtt5 => Some(
137-
get_mqtt5_transport(_config.clone(), args.mqtt_client_options)
144+
get_mqtt5_transport(_config.clone(), args.mqtt_args)
138145
.await
139146
.inspect_err(|e| panic!("Error setting up MQTT5 transport: {}", e.get_message()))
140147
.unwrap(),
@@ -148,7 +155,7 @@ async fn main() {
148155
),
149156
#[cfg(feature = "zenoh")]
150157
Transport::Zenoh => Some(
151-
get_zenoh_transport(_config.clone())
158+
get_zenoh_transport(_config.clone(), args.zenoh_args)
152159
.await
153160
.inspect_err(|e| panic!("Error setting up Zenoh transport: {}", e.get_message()))
154161
.unwrap(),

up-subscription-cli/src/transport/mqtt5.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ use up_transport_mqtt5::{Mqtt5Transport, MqttClientOptions, TransportMode};
1818

1919
pub(crate) async fn get_mqtt5_transport(
2020
uri_provider: Arc<dyn LocalUriProvider>,
21-
client_options: MqttClientOptions,
21+
mqtt5_args: MqttClientOptions,
2222
) -> Result<Arc<dyn UTransport>, UStatus> {
2323
Ok(Mqtt5Transport::new(
2424
TransportMode::InVehicle,
25-
client_options,
25+
mqtt5_args,
2626
uri_provider.get_authority(),
2727
)
2828
.await

up-subscription-cli/src/transport/zenoh.rs

Lines changed: 80 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,94 @@
1111
* SPDX-License-Identifier: Apache-2.0
1212
********************************************************************************/
1313

14+
use serde_json::json;
1415
use std::sync::Arc;
16+
use up_transport_zenoh::{zenoh_config, UPTransportZenoh};
1517

1618
use up_rust::{LocalUriProvider, UStatus, UTransport};
1719

18-
pub(crate) async fn get_zenoh_transport(
19-
_uri_provider: Arc<dyn LocalUriProvider>,
20-
) -> Result<Arc<dyn UTransport>, UStatus> {
21-
// UPTransportZenoh::try_init_log_from_env();
20+
#[derive(clap::ValueEnum, Clone, Copy, PartialEq, Eq, Hash, Debug)]
21+
pub(crate) enum WhatAmIType {
22+
Peer,
23+
Client,
24+
Router,
25+
}
2226

23-
// // Load the config from file path
24-
// // Config Examples: https://github.com/eclipse-zenoh/zenoh/blob/0.10.1-rc/DEFAULT_CONFIG.json5
25-
// // zenoh_config::Config::from_file(path).unwrap()
27+
impl WhatAmIType {
28+
const fn to_str(self) -> &'static str {
29+
match self {
30+
Self::Peer => "peer",
31+
Self::Client => "client",
32+
Self::Router => "router",
33+
}
34+
}
35+
}
36+
37+
#[derive(clap::Parser, Clone, PartialEq, Eq, Hash, Debug)]
38+
pub(crate) struct ZenohArgs {
39+
#[arg(short, long)]
40+
/// A configuration file.
41+
config: Option<String>,
42+
#[arg(short, long)]
43+
/// The Zenoh session mode [default: peer].
44+
mode: Option<WhatAmIType>,
45+
#[arg(short = 'e', long)]
46+
/// Endpoints to connect to.
47+
connect: Vec<String>,
48+
#[arg(short, long)]
49+
/// Endpoints to listen on.
50+
listen: Vec<String>,
51+
#[arg(long)]
52+
/// Disable the multicast-based scouting mechanism.
53+
no_multicast_scouting: bool,
54+
}
2655

27-
// // Loat the default config struct
28-
// let mut zenoh_cfg = zenoh_config::Config::default();
56+
pub fn get_zenoh_config(args: ZenohArgs) -> zenoh_config::Config {
57+
// Load the config from file path
58+
let mut zenoh_cfg = match &args.config {
59+
Some(path) => zenoh_config::Config::from_file(path).unwrap(),
60+
None => zenoh_config::Config::default(),
61+
};
2962

30-
// // You can choose from Router, Peer, Client
31-
// zenoh_cfg.insert_json5("mode", "Peer").unwrap();
63+
// You can choose from Router, Peer, Client
64+
if let Some(mode) = args.mode {
65+
zenoh_cfg
66+
.insert_json5("mode", &json!(mode.to_str()).to_string())
67+
.unwrap();
68+
}
3269

33-
// let transport = Arc::new(
34-
// UPTransportZenoh::new(zenoh_cfg, uri_provider.get_source_uri().to_string())
35-
// .await
36-
// .unwrap(),
37-
// );
70+
// Set connection address
71+
if !args.connect.is_empty() {
72+
zenoh_cfg
73+
.insert_json5("connect/endpoints", &json!(args.connect).to_string())
74+
.unwrap();
75+
}
3876

39-
// Some(transport)
77+
// Set listener address
78+
if !args.listen.is_empty() {
79+
zenoh_cfg
80+
.insert_json5("listen/endpoints", &json!(args.listen).to_string())
81+
.unwrap();
82+
}
4083

41-
todo!()
84+
// Set multicast configuration
85+
if args.no_multicast_scouting {
86+
zenoh_cfg
87+
.insert_json5("scouting/multicast/enabled", &json!(false).to_string())
88+
.unwrap();
89+
}
90+
91+
zenoh_cfg
92+
}
93+
94+
pub(crate) async fn get_zenoh_transport(
95+
uri_provider: Arc<dyn LocalUriProvider>,
96+
zenoh_args: ZenohArgs,
97+
) -> Result<Arc<dyn UTransport>, UStatus> {
98+
UPTransportZenoh::try_init_log_from_env();
99+
Ok(
100+
UPTransportZenoh::new(get_zenoh_config(zenoh_args), uri_provider.get_source_uri())
101+
.await
102+
.map(Arc::new)?,
103+
)
42104
}

0 commit comments

Comments
 (0)