[package] name = "str0m" version = "0.23.1" authors = ["Martin Algesten ", "Hugo Tunius ", "Davide Bertola "] description = "WebRTC library in Sans-IO style" license = "MIT OR Apache-2.0" repository = "https://github.com/algesten/str0m" readme = "README.md" keywords = ["webrtc", "streaming", "video", "audio", "media"] categories = ["web-programming", "multimedia", "network-programming"] edition = "2024" exclude = ["/cargo_deny.sh", "/deny.toml", "/run-fuzz.sh"] # MSRV rust-version = "1.85.0" # Notes on OpenSSL # - Vendored (static link source build) ensures version consistency and easier # to build but increases size. # - Non-vendored (dynamic link) uses system libraries, reducing size but may # cause compatibility issues. # Choose based on security and footprint needs. # For large deployments sharing OS images, OS updates can be easier for # security patching than updating statically linked software. [workspace] members = [ "crates/proto", "crates/is", "crates/netem", "crates/_str0m_test", "crypto/aws-lc-rs", "crypto/rust-crypto", "crypto/openssl", "crypto/apple-crypto", "crypto/wincrypto" ] exclude = ["crates/fuzz"] [workspace.dependencies] # Internal crates str0m = { version = "0.23.1", path = ".", default-features = false } str0m-proto = { version = "0.7.0", path = "crates/proto", default-features = false } is = { version = "0.11.0", path = "crates/is", default-features = false } str0m-netem = { version = "0.4.0", path = "crates/netem" } str0m-aws-lc-rs = { version = "0.6.0", path = "crypto/aws-lc-rs" } str0m-rust-crypto = { version = "0.6.0", path = "crypto/rust-crypto" } str0m-openssl = { version = "0.6.0", path = "crypto/openssl" } str0m-apple-crypto = { version = "0.6.0", path = "crypto/apple-crypto" } str0m-wincrypto = { version = "0.8.0", path = "crypto/wincrypto" } _str0m_test = { path = "crates/_str0m_test" } # Core dependencies tracing = "0.1.37" fastrand = "2.0.1" sctp-proto = "0.10.4" combine = "4.6.6" subtle = "2.0.0" arrayvec = "0.7.6" serde = { version = "1.0.152", features = ["derive"] } dimpl = { version = "0.7.1", default-features = false } drv = { version = "0.4.3" } time = "0.3" base64ct = "1" # Proto dependencies openssl = "0.10.78" # IS dependencies crc = "3" hmac = "0.12.1" sha1 = "0.10" # Crypto backend dependencies aws-lc-rs = { version = "1", default-features = false, features = ["aws-lc-sys", "prebuilt-nasm"] } aes-gcm = "0.10" aes = "0.8" ctr = "0.9" p256 = { version = "0.13", features = ["ecdh"] } sha2 = "0.10" openssl-sys = "0.9.80" libc = "0.2" der = "0.7" pkcs8 = { version = "0.10", features = ["pem"] } sec1 = "0.7" spki = "0.7" x509-cert = { version = "0.2", default-features = false } # Dev/test dependencies rouille = "3.6.2" tempfile = "3" url = "2" serde_json = "1.0" tracing-subscriber = { version = "0.3.16", features = ["env-filter", "std"] } systemstat = "0.2.2" pcap-file = "2.0.0" regex = "1.11.1" rand = "0.9.0" [features] default = ["aws-lc-rs", "examples"] aws-lc-rs = ["dep:str0m-aws-lc-rs"] rust-crypto = ["dep:str0m-rust-crypto"] openssl = ["dep:str0m-openssl"] openssl-dimpl = ["dep:str0m-openssl", "str0m-openssl/dimpl"] wincrypto = ["dep:str0m-wincrypto"] wincrypto-dimpl = ["dep:str0m-wincrypto", "str0m-wincrypto/dimpl"] apple-crypto = ["dep:str0m-apple-crypto"] vendored = ["str0m-openssl?/vendored"] unversioned = [] # Redacts personally identifiable information (PII) from logs debug and above pii = ["str0m-proto/pii", "is/pii"] # The examples require TLS for the web server via rouille. # We use rustls instead of ssl to avoid OpenSSL dependency issues on Windows. examples = ["rouille/rustls"] _internal_dont_use_log_stats = [] _internal_test_exports = ["str0m-proto/_internal_test_exports", "is/_internal_test_exports"] # Derives `drv::Input` (drv's memoization cache-key plumbing) on the public # identity types — Mid, Rid, Ssrc, Pt, SessionId, SeqNo, Direction, MediaKind, # Frequency, Codec, CodecSpec, FormatParams, VideoOrientation, and the H265 # profile types — so downstream `#[drv::memo]` queries can take them by value. # Off by default. drv = ["dep:drv"] [dependencies] tracing.workspace = true fastrand.workspace = true sctp-proto.workspace = true combine.workspace = true subtle.workspace = true arrayvec.workspace = true serde.workspace = true time.workspace = true base64ct.workspace = true # DTLS made for str0m (required dependency) dimpl.workspace = true str0m-proto = { workspace = true, features = ["dtls"] } is.workspace = true drv = { workspace = true, optional = true } # Crypto providers str0m-aws-lc-rs = { workspace = true, optional = true } str0m-rust-crypto = { workspace = true, optional = true } str0m-openssl = { workspace = true, optional = true } [target.'cfg(target_vendor = "apple")'.dependencies] str0m-apple-crypto = { workspace = true, optional = true } [target.'cfg(windows)'.dependencies] # Windows Crypto (CNG + SChannel) str0m-wincrypto = { workspace = true, optional = true } [dev-dependencies] rouille.workspace = true str0m-rust-crypto.workspace = true tempfile.workspace = true url.workspace = true serde_json.workspace = true tracing-subscriber.workspace = true systemstat.workspace = true pcap-file.workspace = true regex.workspace = true rand.workspace = true # Package rename not supported with workspace inheritance netem = { package = "str0m-netem", version = "0.4.0", path = "crates/netem" } # dummy package that enables "_internal_test_exports" _str0m_test = { path = "crates/_str0m_test" } [[example]] name = "chat" required-features = ["examples"] [[example]] name = "http-post" required-features = ["examples"]