[package] name = "moq-quic" description = "Sans-IO QUIC state machine for MoQ, forked from quinn-proto" repository = "https://github.com/moq-dev/moq" license = "MIT OR Apache-2.0" version = "0.1.0" edition = "2024" rust-version.workspace = true keywords = ["quic"] categories = ["network-programming", "asynchronous"] [package.metadata.docs.rs] features = ["rustls-aws-lc-rs", "ring"] [package.metadata.cargo-shear] # Enables the `web` feature on wasm32-unknown-unknown; never named in code. ignored = ["rustls-pki-types"] [features] default = ["ring"] aws-lc-rs = ["dep:aws-lc-rs", "aws-lc-rs?/aws-lc-sys", "aws-lc-rs?/prebuilt-nasm", "dep:rustls", "rustls/aws-lc-rs"] # Enable rustls with the aws-lc-rs crypto provider. rustls-aws-lc-rs = ["aws-lc-rs"] ring = ["dep:ring", "dep:rustls", "rustls/ring"] # Enable qlog support qlog = ["dep:qlog"] # The sans-IO QMux connection, which runs the stream state machine over a reliable, ordered # transport. Driven by the `qmux` crate. mux = [] # Internal (PRIVATE!) features used to aid testing. # Don't rely on these whatsoever. They may disappear at any time. __rustls-post-quantum-test = [] # Exposes the `fuzz/` harness's target bodies, and the plaintext crypto the connection # target and the benches run on, through the hidden `fuzz` module. ring keys the endpoint's # reset and token secrets. Off by default and hidden from the docs. fuzz = ["dep:arbitrary", "ring"] [dependencies] arbitrary = { version = "1.5", features = ["derive"], optional = true } aws-lc-rs = { version = "1.9", default-features = false, optional = true } bytes = { workspace = true } fastbloom = { version = "0.17", default-features = false } indexmap = { workspace = true } lru-slab = "0.1.2" # Without the runtime, which is meant for dev-dependencies; a driver brings its own. moq-clock = { version = "0.11.0", path = "../moq-clock", default-features = false } moq-congestion = { workspace = true } qlog = { version = "0.18", optional = true } rand = { workspace = true } ring = { version = "0.17", optional = true } rustc-hash = { workspace = true } rustls = { version = "0.23.5", default-features = false, features = ["std"], optional = true } slab = { workspace = true } thiserror = { workspace = true } tinyvec = { version = "1.1", features = ["alloc"] } tracing = { version = "0.1.10", default-features = false, features = ["std"] } # Feature flags & dependencies for wasm # wasm-bindgen is assumed for a wasm*-*-unknown target [target.'cfg(all(target_family = "wasm", target_os = "unknown"))'.dependencies] getrandom = { version = "0.4", default-features = false, features = ["wasm_js"] } ring = { version = "0.17", features = ["wasm32_unknown_unknown_js"], optional = true } # only added as dependency to enforce the `web` feature for this target rustls-pki-types = { version = "1.7", features = ["web"] } [dev-dependencies] arbitrary = { version = "1.5", features = ["derive"] } assert_matches = "1.1" criterion = { package = "bench-harness", path = "../bench-harness" } hex-literal = "1" # The tests and benches read time through the runtime, as the drivers do. moq-clock = { path = "../moq-clock", features = ["sim"] } # The tests seed BBR3's probe phases. moq-congestion = { workspace = true, features = ["testing"] } # The mux module's tests run in the default merge gate. moq-quic = { path = ".", features = ["mux"] } proptest = { workspace = true } rand_pcg = { workspace = true } rcgen = { workspace = true, features = ["pem", "ring"] } tracing-subscriber = { version = "0.3.0", default-features = false, features = ["env-filter", "fmt", "ansi", "time", "local-time"] } wasm-bindgen-test = "0.3.45" [target.'cfg(not(target_family = "wasm"))'.dev-dependencies] cpu-time = "1.0.0" # Writes the generated fuzzer corpus to disk. Needs the `fuzz` feature, so a default # `--all-targets` build skips it rather than failing to find the module. [[example]] name = "fuzz-seeds" path = "examples/fuzz-seeds.rs" required-features = ["fuzz"] # The benches run on the hidden `fuzz` module's plaintext crypto. [[bench]] name = "streams" harness = false required-features = ["fuzz"] [[bench]] name = "receive" harness = false required-features = ["fuzz"] [[bench]] name = "endpoint" harness = false required-features = ["fuzz"] [[bench]] name = "wire" harness = false required-features = ["fuzz"] [[bench]] name = "sent_packets" harness = false required-features = ["fuzz"] [lints] workspace = true