diff --git a/Cargo.lock b/Cargo.lock index 3a1b48c17..d7e8b2e06 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -800,7 +800,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" dependencies = [ "serde", - "toml 0.9.7", + "toml 0.9.8", ] [[package]] @@ -1090,7 +1090,7 @@ dependencies = [ "serde-untagged", "serde_core", "serde_json", - "toml 0.9.7", + "toml 0.9.8", "winnow", "yaml-rust2", ] @@ -3580,7 +3580,7 @@ dependencies = [ "tokio", "tokio-stream", "toml 0.8.23", - "toml_edit 0.23.6", + "toml_edit 0.23.7", "tracing", "unicode-ident", "unicode-normalization", @@ -4333,7 +4333,7 @@ dependencies = [ "serde_json", "syn 2.0.106", "target-triple", - "toml 0.9.7", + "toml 0.9.8", ] [[package]] @@ -6162,12 +6162,15 @@ dependencies = [ "scuffle-bootstrap", "scuffle-bootstrap-telemetry", "scuffle-context", + "scuffle-rtmp", "scuffle-settings", "scuffle-signal", "scufflecloud-ingest-traits", "serde", "serde_derive", "smart-default", + "tokio", + "tokio-rustls", "tracing", "tracing-subscriber", ] @@ -6175,6 +6178,9 @@ dependencies = [ [[package]] name = "scufflecloud-ingest-traits" version = "0.1.0" +dependencies = [ + "rustls", +] [[package]] name = "scufflecloud-proto" @@ -6404,9 +6410,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" dependencies = [ "serde_core", ] @@ -6856,7 +6862,7 @@ dependencies = [ "serde_derive", "serde_json", "sync_readme_common", - "toml 0.9.7", + "toml 0.9.8", ] [[package]] @@ -7014,7 +7020,7 @@ dependencies = [ "nextest-metadata", "nextest-runner", "serde_json", - "toml_edit 0.23.6", + "toml_edit 0.23.7", "walkdir", ] @@ -7446,14 +7452,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" dependencies = [ "indexmap 2.11.4", "serde_core", - "serde_spanned 1.0.2", - "toml_datetime 0.7.2", + "serde_spanned 1.0.3", + "toml_datetime 0.7.3", "toml_parser", "toml_writer", "winnow", @@ -7470,9 +7476,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" dependencies = [ "serde_core", ] @@ -7493,14 +7499,14 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.6" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ "indexmap 2.11.4", "serde_core", - "serde_spanned 1.0.2", - "toml_datetime 0.7.2", + "serde_spanned 1.0.3", + "toml_datetime 0.7.3", "toml_parser", "toml_writer", "winnow", @@ -7508,9 +7514,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ "winnow", ] @@ -7523,9 +7529,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" [[package]] name = "tonic" @@ -8781,7 +8787,7 @@ dependencies = [ "serde_derive", "serde_json", "sha2", - "toml_edit 0.23.6", + "toml_edit 0.23.7", "tracing", "tracing-subscriber", ] diff --git a/cloud/video/ingest/BUILD.bazel b/cloud/video/ingest/BUILD.bazel index b8251fcb8..71c007390 100644 --- a/cloud/video/ingest/BUILD.bazel +++ b/cloud/video/ingest/BUILD.bazel @@ -9,6 +9,7 @@ deps = [ "//crates/context", "//crates/settings", "//crates/signal", + "//crates/rtmp", "//cloud/video/ingest/traits", ] diff --git a/cloud/video/ingest/Cargo.toml b/cloud/video/ingest/Cargo.toml index 3d49055c1..93cb7fa87 100644 --- a/cloud/video/ingest/Cargo.toml +++ b/cloud/video/ingest/Cargo.toml @@ -17,18 +17,21 @@ path = "bin/standalone/main.rs" unexpected_cfgs = { level = "warn", check-cfg = ['cfg(coverage_nightly)'] } [dependencies] -anyhow = "1.0.98" +anyhow = "1" ingest-traits = { path = "./traits", package = "scufflecloud-ingest-traits" } scuffle-bootstrap = { path = "../../../crates/bootstrap" } scuffle-bootstrap-telemetry = { features = ["opentelemetry-logs", "opentelemetry-traces"], path = "../../../crates/bootstrap-telemetry" } scuffle-context = { path = "../../../crates/context" } +scuffle-rtmp = { path = "../../../crates/rtmp" } scuffle-settings = { features = ["all-formats", "bootstrap"], path = "../../../crates/settings" } scuffle-signal = { features = ["bootstrap"], path = "../../../crates/signal" } -serde = "1.0.219" -serde_derive = "1.0.219" -smart-default = "0.7.1" -tracing = "0.1.41" -tracing-subscriber = { version = "0.3.20", features = ["env-filter"] } +serde = "1" +serde_derive = "1" +smart-default = "0.7" +tokio = "1" +tokio-rustls = "0.26" +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } [package.metadata.sync-readme.badges] docs-rs = false diff --git a/cloud/video/ingest/bin/standalone/config.rs b/cloud/video/ingest/bin/standalone/config.rs index ed6f7d8a5..674b1dd60 100644 --- a/cloud/video/ingest/bin/standalone/config.rs +++ b/cloud/video/ingest/bin/standalone/config.rs @@ -1,4 +1,5 @@ use std::net::SocketAddr; +use std::path::PathBuf; #[derive(serde_derive::Deserialize, smart_default::SmartDefault, Debug, Clone)] #[serde(default)] @@ -7,11 +8,26 @@ pub(crate) struct Config { pub service_name: String, #[default = "info"] pub level: String, + #[default("[::]:1935".parse().unwrap())] + pub rtmp_bind: SocketAddr, + pub rtmps: Option, pub telemetry: Option, } scuffle_settings::bootstrap!(Config); +#[derive(serde_derive::Deserialize, smart_default::SmartDefault, Debug, Clone)] +pub(crate) struct RtmpsConfig { + // https://github.com/obsproject/obs-studio/blob/0b1229632063a13dfd26cf1cd9dd43431d8c68f6/plugins/obs-outputs/librtmp/rtmp.c#L718 + // Yes, RTMPS' default port is 443 + #[default("[::]:443".parse().unwrap())] + pub bind: SocketAddr, + #[default = "rtmps_certs.pem"] + pub cert_chain_path: PathBuf, + #[default = "rtmps_key.pem"] + pub key_path: PathBuf, +} + #[derive(serde_derive::Deserialize, smart_default::SmartDefault, Debug, Clone)] pub(crate) struct TelemetryConfig { #[default("[::1]:4317".parse().unwrap())] diff --git a/cloud/video/ingest/bin/standalone/main.rs b/cloud/video/ingest/bin/standalone/main.rs index 6efeacfe2..c14590d84 100644 --- a/cloud/video/ingest/bin/standalone/main.rs +++ b/cloud/video/ingest/bin/standalone/main.rs @@ -7,9 +7,12 @@ use std::sync::Arc; +use anyhow::Context; use scuffle_bootstrap_telemetry::opentelemetry; use scuffle_bootstrap_telemetry::opentelemetry_sdk::logs::SdkLoggerProvider; use scuffle_bootstrap_telemetry::opentelemetry_sdk::trace::SdkTracerProvider; +use tokio_rustls::rustls::pki_types::pem::PemObject; +use tokio_rustls::rustls::pki_types::{CertificateDer, PrivateKeyDer}; use tracing_subscriber::Layer; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; @@ -18,9 +21,39 @@ mod config; struct Global { config: config::Config, + rtmps: Option, open_telemetry: opentelemetry::OpenTelemetry, } +struct RtmpsGlobal { + bind: std::net::SocketAddr, + rustls_config: Arc, +} + +impl ingest_traits::RtmpConfigInterface for RtmpsGlobal { + fn rtmps_bind(&self) -> std::net::SocketAddr { + self.bind + } + + fn rtmps_rustls_server_config(&self) -> Arc { + self.rustls_config.clone() + } +} + +impl ingest_traits::ConfigInterface for Global { + fn rtmp_bind(&self) -> std::net::SocketAddr { + self.config.rtmp_bind + } +} + +impl ingest_traits::RtmpsInterface for Global { + type RtmpsConfig = RtmpsGlobal; + + fn rtmps_config(&self) -> Option<&Self::RtmpsConfig> { + self.rtmps.as_ref() + } +} + impl ingest_traits::Global for Global {} impl scuffle_signal::SignalConfig for Global {} @@ -54,6 +87,26 @@ impl scuffle_bootstrap::Global for Global { ) .init(); + let rtmps = if let Some(rtmps) = config.rtmps.as_ref() { + let cert_chain = CertificateDer::pem_file_iter(&rtmps.cert_chain_path) + .context("load RTMPS cert chain file")? + .collect::, _>>() + .context("load RTMPS cert chain")?; + let key_der = PrivateKeyDer::from_pem_file(&rtmps.key_path).context("load RTMPS private key")?; + + let rustls_config = tokio_rustls::rustls::ServerConfig::builder() + .with_no_client_auth() + .with_single_cert(cert_chain, key_der) + .context("create RTMPS rustls server config")?; + + Some(RtmpsGlobal { + bind: rtmps.bind, + rustls_config: Arc::new(rustls_config), + }) + } else { + None + }; + let tracer = SdkTracerProvider::default(); opentelemetry::global::set_tracer_provider(tracer.clone()); @@ -61,7 +114,11 @@ impl scuffle_bootstrap::Global for Global { let open_telemetry = opentelemetry::OpenTelemetry::new().with_traces(tracer).with_logs(logger); - Ok(Arc::new(Self { config, open_telemetry })) + Ok(Arc::new(Self { + config, + rtmps, + open_telemetry, + })) } } diff --git a/cloud/video/ingest/src/services.rs b/cloud/video/ingest/src/services.rs index 620c59bbb..e9be6dbf8 100644 --- a/cloud/video/ingest/src/services.rs +++ b/cloud/video/ingest/src/services.rs @@ -1,5 +1,11 @@ use std::sync::Arc; +use anyhow::Context; +use ingest_traits::RtmpConfigInterface; +use scuffle_context::ContextFutExt; + +mod rtmp; + #[derive(Debug)] pub struct IngestSvc { _phantom: std::marker::PhantomData, @@ -14,7 +20,84 @@ impl Default for IngestSvc { } impl scuffle_bootstrap::Service for IngestSvc { - async fn run(self, _global: Arc, _ctx: scuffle_context::Context) -> anyhow::Result<()> { + async fn run(self, global: Arc, ctx: scuffle_context::Context) -> anyhow::Result<()> { + let rtmp = async { + let addr = global.rtmp_bind(); + tracing::info!(addr = %addr, "starting RTMP server"); + + let tcp_listener = tokio::net::TcpListener::bind(addr).await.context("bind TCP listener")?; + + while let Some(connection) = tcp_listener.accept().with_context(&ctx).await { + match connection { + Ok((stream, _addr)) => { + let session = scuffle_rtmp::ServerSession::new(stream, rtmp::Handler).with_context(ctx.clone()); + + // This is bound by the context because we pass it to the session. + tokio::spawn(async move { + if let Err(err) = session.run().await { + tracing::error!(err = %err, "RTMP session error"); + // TODO: what do we do here? + } + }); + } + Err(err) => { + tracing::error!(err = %err, "failed to accept connection"); + // TODO: what do we do here? can this be fatal? + } + } + } + + anyhow::Result::Ok(()) + }; + + let rtmps = async { + if let Some(rtmps) = global.rtmps_config() { + let addr = rtmps.rtmps_bind(); + tracing::info!(addr = %addr, "starting RTMPS server"); + + let tcp_listener = tokio::net::TcpListener::bind(addr).await.context("bind TCP listener")?; + let tls_acceptor = tokio_rustls::TlsAcceptor::from(rtmps.rtmps_rustls_server_config()); + + while let Some(connection) = tcp_listener.accept().with_context(&ctx).await { + match connection { + Ok((stream, _addr)) => { + let ctx = ctx.clone(); + let tls_acceptor = tls_acceptor.clone(); + + tokio::spawn(async move { + match tls_acceptor.accept(stream).with_context(&ctx).await { + Some(Ok(stream)) => { + let session = + scuffle_rtmp::ServerSession::new(stream, rtmp::Handler).with_context(ctx); + + // run is bound by the context because we pass it to the session. + if let Err(err) = session.run().await { + tracing::error!(err = %err, "RTMP session error"); + // TODO: what do we do here? + } + } + Some(Err(err)) => { + tracing::error!(err = %err, "failed to accept TLS connection"); + } + None => {} // context cancelled + } + }); + } + Err(err) => { + tracing::error!(err = %err, "failed to accept connection"); + // TODO: what do we do here? can this be fatal? + } + } + } + } + + anyhow::Result::Ok(()) + }; + + let (rtmp, rtmps): (anyhow::Result<()>, anyhow::Result<()>) = tokio::join!(rtmp, rtmps); + rtmp?; + rtmps?; + Ok(()) } } diff --git a/cloud/video/ingest/src/services/rtmp.rs b/cloud/video/ingest/src/services/rtmp.rs new file mode 100644 index 000000000..50bfe4c5f --- /dev/null +++ b/cloud/video/ingest/src/services/rtmp.rs @@ -0,0 +1,34 @@ +use scuffle_rtmp::session::server::{ServerSessionError, SessionData, SessionHandler}; + +pub(crate) struct Handler; + +impl SessionHandler for Handler { + async fn on_data(&mut self, stream_id: u32, data: SessionData) -> Result<(), ServerSessionError> { + // Handle incoming video/audio/meta data + match data { + SessionData::Amf0 { timestamp, data } => { + tracing::info!(stream_id, timestamp, data_len = data.len(), "received AMF0 metadata"); + } + SessionData::Audio { timestamp, data } => { + tracing::info!(stream_id, timestamp, data_len = data.len(), "received audio data"); + } + SessionData::Video { timestamp, data } => { + tracing::info!(stream_id, timestamp, data_len = data.len(), "received video data"); + } + } + + Ok(()) + } + + async fn on_publish(&mut self, stream_id: u32, app_name: &str, stream_name: &str) -> Result<(), ServerSessionError> { + // Handle the publish event + tracing::info!(stream_id, app_name, stream_name, "stream published"); + Ok(()) + } + + async fn on_unpublish(&mut self, stream_id: u32) -> Result<(), ServerSessionError> { + // Handle the unpublish event + tracing::info!(stream_id, "stream unpublished"); + Ok(()) + } +} diff --git a/cloud/video/ingest/traits/Cargo.toml b/cloud/video/ingest/traits/Cargo.toml index 45ce5bcb0..d4f2a3f9e 100644 --- a/cloud/video/ingest/traits/Cargo.toml +++ b/cloud/video/ingest/traits/Cargo.toml @@ -12,6 +12,7 @@ repository = "https://github.com/scufflecloud/scuffle" unexpected_cfgs = { level = "warn", check-cfg = ['cfg(coverage_nightly)'] } [dependencies] +rustls = { default-features = false, version = "0.23.21" } [package.metadata.sync-readme.badges] docs-rs = false diff --git a/cloud/video/ingest/traits/src/config.rs b/cloud/video/ingest/traits/src/config.rs new file mode 100644 index 000000000..63a210c3b --- /dev/null +++ b/cloud/video/ingest/traits/src/config.rs @@ -0,0 +1,3 @@ +pub trait ConfigInterface: Send + Sync { + fn rtmp_bind(&self) -> std::net::SocketAddr; +} diff --git a/cloud/video/ingest/traits/src/lib.rs b/cloud/video/ingest/traits/src/lib.rs index 25a92cc66..8c54082cb 100644 --- a/cloud/video/ingest/traits/src/lib.rs +++ b/cloud/video/ingest/traits/src/lib.rs @@ -5,4 +5,10 @@ #![deny(unreachable_pub)] #![deny(clippy::mod_module_files)] -pub trait Global: Send + Sync + 'static {} +mod config; +mod rtmps; + +pub use config::*; +pub use rtmps::*; + +pub trait Global: ConfigInterface + RtmpsInterface + Send + Sync + 'static {} diff --git a/cloud/video/ingest/traits/src/rtmps.rs b/cloud/video/ingest/traits/src/rtmps.rs new file mode 100644 index 000000000..b3618596a --- /dev/null +++ b/cloud/video/ingest/traits/src/rtmps.rs @@ -0,0 +1,12 @@ +use std::sync::Arc; + +pub trait RtmpsInterface: Send + Sync { + type RtmpsConfig: RtmpConfigInterface + Send + Sync; + + fn rtmps_config(&self) -> Option<&Self::RtmpsConfig>; +} + +pub trait RtmpConfigInterface: Send + Sync { + fn rtmps_bind(&self) -> std::net::SocketAddr; + fn rtmps_rustls_server_config(&self) -> Arc; +} diff --git a/misc/toolchains/rust.MODULE.bazel b/misc/toolchains/rust.MODULE.bazel index 456aa8199..c1c0deee0 100644 --- a/misc/toolchains/rust.MODULE.bazel +++ b/misc/toolchains/rust.MODULE.bazel @@ -313,8 +313,8 @@ use_repo( "cargo_vendor__tokio-stream-0.1.17", "cargo_vendor__tokio-test-0.4.4", "cargo_vendor__tokio-util-0.7.16", - "cargo_vendor__toml-0.9.7", - "cargo_vendor__toml_edit-0.23.6", + "cargo_vendor__toml-0.9.8", + "cargo_vendor__toml_edit-0.23.7", "cargo_vendor__tonic-0.14.2", "cargo_vendor__tonic-build-0.14.2", "cargo_vendor__tonic-prost-0.14.2", diff --git a/vendor/cargo/BUILD.bazel b/vendor/cargo/BUILD.bazel index 9750540cf..0e2edb5e6 100644 --- a/vendor/cargo/BUILD.bazel +++ b/vendor/cargo/BUILD.bazel @@ -1690,26 +1690,26 @@ transition_alias_opt( ) transition_alias_opt( - name = "toml-0.9.7", - actual = "@cargo_vendor__toml-0.9.7//:toml", + name = "toml-0.9.8", + actual = "@cargo_vendor__toml-0.9.8//:toml", tags = ["manual"], ) transition_alias_opt( name = "toml", - actual = "@cargo_vendor__toml-0.9.7//:toml", + actual = "@cargo_vendor__toml-0.9.8//:toml", tags = ["manual"], ) transition_alias_opt( - name = "toml_edit-0.23.6", - actual = "@cargo_vendor__toml_edit-0.23.6//:toml_edit", + name = "toml_edit-0.23.7", + actual = "@cargo_vendor__toml_edit-0.23.7//:toml_edit", tags = ["manual"], ) transition_alias_opt( name = "toml_edit", - actual = "@cargo_vendor__toml_edit-0.23.6//:toml_edit", + actual = "@cargo_vendor__toml_edit-0.23.7//:toml_edit", tags = ["manual"], ) diff --git a/vendor/cargo/BUILD.cargo_toml-0.22.3.bazel b/vendor/cargo/BUILD.cargo_toml-0.22.3.bazel index 1a8f5c50e..90cb18458 100644 --- a/vendor/cargo/BUILD.cargo_toml-0.22.3.bazel +++ b/vendor/cargo/BUILD.cargo_toml-0.22.3.bazel @@ -62,6 +62,6 @@ rust_library( version = "0.22.3", deps = [ "@cargo_vendor__serde-1.0.228//:serde", - "@cargo_vendor__toml-0.9.7//:toml", + "@cargo_vendor__toml-0.9.8//:toml", ], ) diff --git a/vendor/cargo/BUILD.config-0.15.18.bazel b/vendor/cargo/BUILD.config-0.15.18.bazel index c332cab96..47e5a8be6 100644 --- a/vendor/cargo/BUILD.config-0.15.18.bazel +++ b/vendor/cargo/BUILD.config-0.15.18.bazel @@ -86,7 +86,7 @@ rust_library( "@cargo_vendor__serde-untagged-0.1.9//:serde_untagged", "@cargo_vendor__serde_core-1.0.228//:serde_core", "@cargo_vendor__serde_json-1.0.145//:serde_json", - "@cargo_vendor__toml-0.9.7//:toml", + "@cargo_vendor__toml-0.9.8//:toml", "@cargo_vendor__winnow-0.7.13//:winnow", "@cargo_vendor__yaml-rust2-0.10.4//:yaml_rust2", ], diff --git a/vendor/cargo/BUILD.nextest-runner-0.88.0.bazel b/vendor/cargo/BUILD.nextest-runner-0.88.0.bazel index 63f98af74..bd2e4ccf2 100644 --- a/vendor/cargo/BUILD.nextest-runner-0.88.0.bazel +++ b/vendor/cargo/BUILD.nextest-runner-0.88.0.bazel @@ -117,7 +117,7 @@ rust_library( "@cargo_vendor__tokio-1.47.1//:tokio", "@cargo_vendor__tokio-stream-0.1.17//:tokio_stream", "@cargo_vendor__toml-0.8.23//:toml", - "@cargo_vendor__toml_edit-0.23.6//:toml_edit", + "@cargo_vendor__toml_edit-0.23.7//:toml_edit", "@cargo_vendor__tracing-0.1.41//:tracing", "@cargo_vendor__unicode-ident-1.0.19//:unicode_ident", "@cargo_vendor__unicode-normalization-0.1.24//:unicode_normalization", diff --git a/vendor/cargo/BUILD.serde_spanned-1.0.2.bazel b/vendor/cargo/BUILD.serde_spanned-1.0.3.bazel similarity index 98% rename from vendor/cargo/BUILD.serde_spanned-1.0.2.bazel rename to vendor/cargo/BUILD.serde_spanned-1.0.3.bazel index 547ce4ee4..dc28cbcd0 100644 --- a/vendor/cargo/BUILD.serde_spanned-1.0.2.bazel +++ b/vendor/cargo/BUILD.serde_spanned-1.0.3.bazel @@ -65,7 +65,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.2", + version = "1.0.3", deps = [ "@cargo_vendor__serde_core-1.0.228//:serde_core", ], diff --git a/vendor/cargo/BUILD.tokio-rustls-0.26.2.bazel b/vendor/cargo/BUILD.tokio-rustls-0.26.2.bazel index 4e21cc400..87be2140c 100644 --- a/vendor/cargo/BUILD.tokio-rustls-0.26.2.bazel +++ b/vendor/cargo/BUILD.tokio-rustls-0.26.2.bazel @@ -37,6 +37,7 @@ rust_library( crate_features = [ "aws-lc-rs", "aws_lc_rs", + "default", "logging", "tls12", ], diff --git a/vendor/cargo/BUILD.toml-0.9.7.bazel b/vendor/cargo/BUILD.toml-0.9.8.bazel similarity index 89% rename from vendor/cargo/BUILD.toml-0.9.7.bazel rename to vendor/cargo/BUILD.toml-0.9.8.bazel index f51748617..656046b04 100644 --- a/vendor/cargo/BUILD.toml-0.9.7.bazel +++ b/vendor/cargo/BUILD.toml-0.9.8.bazel @@ -67,14 +67,14 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.9.7", + version = "0.9.8", deps = [ "@cargo_vendor__indexmap-2.11.4//:indexmap", "@cargo_vendor__serde_core-1.0.228//:serde_core", - "@cargo_vendor__serde_spanned-1.0.2//:serde_spanned", - "@cargo_vendor__toml_datetime-0.7.2//:toml_datetime", - "@cargo_vendor__toml_parser-1.0.3//:toml_parser", - "@cargo_vendor__toml_writer-1.0.3//:toml_writer", + "@cargo_vendor__serde_spanned-1.0.3//:serde_spanned", + "@cargo_vendor__toml_datetime-0.7.3//:toml_datetime", + "@cargo_vendor__toml_parser-1.0.4//:toml_parser", + "@cargo_vendor__toml_writer-1.0.4//:toml_writer", "@cargo_vendor__winnow-0.7.13//:winnow", ], ) diff --git a/vendor/cargo/BUILD.toml_datetime-0.7.2.bazel b/vendor/cargo/BUILD.toml_datetime-0.7.3.bazel similarity index 98% rename from vendor/cargo/BUILD.toml_datetime-0.7.2.bazel rename to vendor/cargo/BUILD.toml_datetime-0.7.3.bazel index e9e0434b7..e6d4c7536 100644 --- a/vendor/cargo/BUILD.toml_datetime-0.7.2.bazel +++ b/vendor/cargo/BUILD.toml_datetime-0.7.3.bazel @@ -65,7 +65,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.7.2", + version = "0.7.3", deps = [ "@cargo_vendor__serde_core-1.0.228//:serde_core", ], diff --git a/vendor/cargo/BUILD.toml_edit-0.23.6.bazel b/vendor/cargo/BUILD.toml_edit-0.23.7.bazel similarity index 88% rename from vendor/cargo/BUILD.toml_edit-0.23.6.bazel rename to vendor/cargo/BUILD.toml_edit-0.23.7.bazel index 49345b824..6e8c0d58a 100644 --- a/vendor/cargo/BUILD.toml_edit-0.23.6.bazel +++ b/vendor/cargo/BUILD.toml_edit-0.23.7.bazel @@ -65,14 +65,14 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.23.6", + version = "0.23.7", deps = [ "@cargo_vendor__indexmap-2.11.4//:indexmap", "@cargo_vendor__serde_core-1.0.228//:serde_core", - "@cargo_vendor__serde_spanned-1.0.2//:serde_spanned", - "@cargo_vendor__toml_datetime-0.7.2//:toml_datetime", - "@cargo_vendor__toml_parser-1.0.3//:toml_parser", - "@cargo_vendor__toml_writer-1.0.3//:toml_writer", + "@cargo_vendor__serde_spanned-1.0.3//:serde_spanned", + "@cargo_vendor__toml_datetime-0.7.3//:toml_datetime", + "@cargo_vendor__toml_parser-1.0.4//:toml_parser", + "@cargo_vendor__toml_writer-1.0.4//:toml_writer", "@cargo_vendor__winnow-0.7.13//:winnow", ], ) diff --git a/vendor/cargo/BUILD.toml_parser-1.0.3.bazel b/vendor/cargo/BUILD.toml_parser-1.0.4.bazel similarity index 98% rename from vendor/cargo/BUILD.toml_parser-1.0.3.bazel rename to vendor/cargo/BUILD.toml_parser-1.0.4.bazel index 082b6323d..e2c9e9310 100644 --- a/vendor/cargo/BUILD.toml_parser-1.0.3.bazel +++ b/vendor/cargo/BUILD.toml_parser-1.0.4.bazel @@ -64,7 +64,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.3", + version = "1.0.4", deps = [ "@cargo_vendor__winnow-0.7.13//:winnow", ], diff --git a/vendor/cargo/BUILD.toml_writer-1.0.3.bazel b/vendor/cargo/BUILD.toml_writer-1.0.4.bazel similarity index 98% rename from vendor/cargo/BUILD.toml_writer-1.0.3.bazel rename to vendor/cargo/BUILD.toml_writer-1.0.4.bazel index 4437690b8..5034142e0 100644 --- a/vendor/cargo/BUILD.toml_writer-1.0.3.bazel +++ b/vendor/cargo/BUILD.toml_writer-1.0.4.bazel @@ -64,5 +64,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.3", + version = "1.0.4", ) diff --git a/vendor/cargo/defs.bzl b/vendor/cargo/defs.bzl index ab34926a1..3ae1c8ae1 100644 --- a/vendor/cargo/defs.bzl +++ b/vendor/cargo/defs.bzl @@ -638,12 +638,19 @@ _NORMAL_DEPENDENCIES = { _COMMON_CONDITION: { "anyhow": Label("@cargo_vendor//:anyhow-1.0.99"), "serde": Label("@cargo_vendor//:serde-1.0.228"), + "tokio": Label("@cargo_vendor//:tokio-1.47.1"), + "tokio-rustls": Label("@cargo_vendor//:tokio-rustls-0.26.2"), "tracing": Label("@cargo_vendor//:tracing-0.1.41"), "tracing-subscriber": Label("@cargo_vendor//:tracing-subscriber-0.3.20"), }, }, }, "cloud/video/ingest/traits": { + _REQUIRED_FEATURE: { + _COMMON_CONDITION: { + "rustls": Label("@cargo_vendor//:rustls-0.23.32"), + }, + }, }, "crates/aac": { _REQUIRED_FEATURE: { @@ -1006,7 +1013,7 @@ _NORMAL_DEPENDENCIES = { "serde_json": Label("@cargo_vendor//:serde_json-1.0.145"), "syn": Label("@cargo_vendor//:syn-2.0.106"), "target-triple": Label("@cargo_vendor//:target-triple-0.1.4"), - "toml": Label("@cargo_vendor//:toml-0.9.7"), + "toml": Label("@cargo_vendor//:toml-0.9.8"), }, }, }, @@ -1202,7 +1209,7 @@ _NORMAL_DEPENDENCIES = { "serde": Label("@cargo_vendor//:serde-1.0.228"), "serde_json": Label("@cargo_vendor//:serde_json-1.0.145"), "sha2": Label("@cargo_vendor//:sha2-0.10.9"), - "toml_edit": Label("@cargo_vendor//:toml_edit-0.23.6"), + "toml_edit": Label("@cargo_vendor//:toml_edit-0.23.7"), "tracing": Label("@cargo_vendor//:tracing-0.1.41"), "tracing-subscriber": Label("@cargo_vendor//:tracing-subscriber-0.3.20"), }, @@ -1363,7 +1370,7 @@ _NORMAL_DEPENDENCIES = { "rustdoc-types": Label("@cargo_vendor//:rustdoc-types-0.56.0"), "serde": Label("@cargo_vendor//:serde-1.0.228"), "serde_json": Label("@cargo_vendor//:serde_json-1.0.145"), - "toml": Label("@cargo_vendor//:toml-0.9.7"), + "toml": Label("@cargo_vendor//:toml-0.9.8"), }, }, }, @@ -1407,7 +1414,7 @@ _NORMAL_DEPENDENCIES = { "nextest-metadata": Label("@cargo_vendor//:nextest-metadata-0.12.2"), "nextest-runner": Label("@cargo_vendor//:nextest-runner-0.88.0"), "serde_json": Label("@cargo_vendor//:serde_json-1.0.145"), - "toml_edit": Label("@cargo_vendor//:toml_edit-0.23.6"), + "toml_edit": Label("@cargo_vendor//:toml_edit-0.23.7"), "walkdir": Label("@cargo_vendor//:walkdir-2.5.0"), }, }, @@ -1521,6 +1528,10 @@ _NORMAL_ALIASES = { }, }, "cloud/video/ingest/traits": { + _REQUIRED_FEATURE: { + _COMMON_CONDITION: { + }, + }, }, "crates/aac": { _REQUIRED_FEATURE: { @@ -9810,12 +9821,12 @@ def crate_repositories(): maybe( http_archive, - name = "cargo_vendor__serde_spanned-1.0.2", - sha256 = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee", + name = "cargo_vendor__serde_spanned-1.0.3", + sha256 = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392", type = "tar.gz", - urls = ["https://static.crates.io/crates/serde_spanned/1.0.2/download"], - strip_prefix = "serde_spanned-1.0.2", - build_file = Label("//vendor/cargo:BUILD.serde_spanned-1.0.2.bazel"), + urls = ["https://static.crates.io/crates/serde_spanned/1.0.3/download"], + strip_prefix = "serde_spanned-1.0.3", + build_file = Label("//vendor/cargo:BUILD.serde_spanned-1.0.3.bazel"), ) maybe( @@ -10620,12 +10631,12 @@ def crate_repositories(): maybe( http_archive, - name = "cargo_vendor__toml-0.9.7", - sha256 = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0", + name = "cargo_vendor__toml-0.9.8", + sha256 = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8", type = "tar.gz", - urls = ["https://static.crates.io/crates/toml/0.9.7/download"], - strip_prefix = "toml-0.9.7", - build_file = Label("//vendor/cargo:BUILD.toml-0.9.7.bazel"), + urls = ["https://static.crates.io/crates/toml/0.9.8/download"], + strip_prefix = "toml-0.9.8", + build_file = Label("//vendor/cargo:BUILD.toml-0.9.8.bazel"), ) maybe( @@ -10640,12 +10651,12 @@ def crate_repositories(): maybe( http_archive, - name = "cargo_vendor__toml_datetime-0.7.2", - sha256 = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1", + name = "cargo_vendor__toml_datetime-0.7.3", + sha256 = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533", type = "tar.gz", - urls = ["https://static.crates.io/crates/toml_datetime/0.7.2/download"], - strip_prefix = "toml_datetime-0.7.2", - build_file = Label("//vendor/cargo:BUILD.toml_datetime-0.7.2.bazel"), + urls = ["https://static.crates.io/crates/toml_datetime/0.7.3/download"], + strip_prefix = "toml_datetime-0.7.3", + build_file = Label("//vendor/cargo:BUILD.toml_datetime-0.7.3.bazel"), ) maybe( @@ -10660,22 +10671,22 @@ def crate_repositories(): maybe( http_archive, - name = "cargo_vendor__toml_edit-0.23.6", - sha256 = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b", + name = "cargo_vendor__toml_edit-0.23.7", + sha256 = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d", type = "tar.gz", - urls = ["https://static.crates.io/crates/toml_edit/0.23.6/download"], - strip_prefix = "toml_edit-0.23.6", - build_file = Label("//vendor/cargo:BUILD.toml_edit-0.23.6.bazel"), + urls = ["https://static.crates.io/crates/toml_edit/0.23.7/download"], + strip_prefix = "toml_edit-0.23.7", + build_file = Label("//vendor/cargo:BUILD.toml_edit-0.23.7.bazel"), ) maybe( http_archive, - name = "cargo_vendor__toml_parser-1.0.3", - sha256 = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627", + name = "cargo_vendor__toml_parser-1.0.4", + sha256 = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e", type = "tar.gz", - urls = ["https://static.crates.io/crates/toml_parser/1.0.3/download"], - strip_prefix = "toml_parser-1.0.3", - build_file = Label("//vendor/cargo:BUILD.toml_parser-1.0.3.bazel"), + urls = ["https://static.crates.io/crates/toml_parser/1.0.4/download"], + strip_prefix = "toml_parser-1.0.4", + build_file = Label("//vendor/cargo:BUILD.toml_parser-1.0.4.bazel"), ) maybe( @@ -10690,12 +10701,12 @@ def crate_repositories(): maybe( http_archive, - name = "cargo_vendor__toml_writer-1.0.3", - sha256 = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109", + name = "cargo_vendor__toml_writer-1.0.4", + sha256 = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2", type = "tar.gz", - urls = ["https://static.crates.io/crates/toml_writer/1.0.3/download"], - strip_prefix = "toml_writer-1.0.3", - build_file = Label("//vendor/cargo:BUILD.toml_writer-1.0.3.bazel"), + urls = ["https://static.crates.io/crates/toml_writer/1.0.4/download"], + strip_prefix = "toml_writer-1.0.4", + build_file = Label("//vendor/cargo:BUILD.toml_writer-1.0.4.bazel"), ) maybe( @@ -11962,8 +11973,8 @@ def crate_repositories(): struct(repo = "cargo_vendor__tokio-1.47.1", is_dev_dep = False), struct(repo = "cargo_vendor__tokio-rustls-0.26.2", is_dev_dep = False), struct(repo = "cargo_vendor__tokio-util-0.7.16", is_dev_dep = False), - struct(repo = "cargo_vendor__toml-0.9.7", is_dev_dep = False), - struct(repo = "cargo_vendor__toml_edit-0.23.6", is_dev_dep = False), + struct(repo = "cargo_vendor__toml-0.9.8", is_dev_dep = False), + struct(repo = "cargo_vendor__toml_edit-0.23.7", is_dev_dep = False), struct(repo = "cargo_vendor__tonic-0.14.2", is_dev_dep = False), struct(repo = "cargo_vendor__tonic-build-0.14.2", is_dev_dep = False), struct(repo = "cargo_vendor__tonic-prost-0.14.2", is_dev_dep = False),