[package] name = "hudsucker" version = "0.23.0" edition = "2021" rust-version = "1.75.0" description = "MITM HTTP/S proxy" documentation = "https://docs.rs/hudsucker" readme = "README.md" homepage = "https://github.com/omjadas/hudsucker" repository = "https://github.com/omjadas/hudsucker" license = "MIT OR Apache-2.0" keywords = ["http", "proxy"] categories = ["network-programming"] exclude = [".github/"] [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] [dependencies] async-compression = { version = "0.4.0", features = ["tokio", "brotli", "gzip", "zlib", "zstd"], optional = true } bstr = "1.0.0" futures = "0.3.11" http = "1.1.0" http-body-util = "0.1.0" hyper = "1.1.0" hyper-rustls = { version = "0.27.0", default-features = false, features = ["http1", "logging", "tls12", "webpki-tokio"], optional = true } hyper-tls = { version = "0.6.0", optional = true } hyper-tungstenite = "0.15.0" hyper-util = { version="0.1.3", features = ["client-legacy", "server", "http1"] } moka = { version = "0.12.0", features = ["future"], optional = true } openssl = { version = "0.10.46", optional = true } rand = { version = "0.8.0", optional = true } rcgen = { version = "0.13.0", features = ["x509-parser"], optional = true } thiserror = "1.0.30" time = { version = "0.3.35", optional = true } tokio = { version = "1.24.2", features = ["macros", "rt"] } tokio-graceful = "0.1.6" tokio-native-tls = { version = "0.3.1", optional = true } tokio-rustls = { version = "0.26.0", features = ["logging", "tls12"] } tokio-tungstenite = "0.24.0" tokio-util = { version = "0.7.1", features = ["io"], optional = true } tracing = { version = "0.1.35", features = ["log"] } [dev-dependencies] async-http-proxy = { version = "1.2.5", features = ["runtime-tokio"] } criterion = { version = "0.5.0", features = ["async_tokio"] } reqwest = "0.12.0" rustls-native-certs = "0.8.0" rustls-pemfile = "2.0.0" tokio = { version = "1.24.2", features = ["full"] } tokio-native-tls = "0.3.1" tracing-subscriber = "0.3.8" x509-parser = "0.16.0" [features] decoder = ["dep:async-compression", "dep:tokio-util", "tokio/io-util"] default = ["decoder", "rcgen-ca", "rustls-client"] full = ["decoder", "http2", "native-tls-client", "openssl-ca", "rcgen-ca", "rustls-client"] http2 = ["hyper-util/http2", "hyper-rustls?/http2"] native-tls-client = ["dep:hyper-tls", "dep:tokio-native-tls", "tokio-tungstenite/native-tls"] openssl-ca = ["dep:openssl", "dep:moka"] rcgen-ca = ["dep:rcgen", "dep:moka", "dep:time", "dep:rand"] rustls-client = ["dep:hyper-rustls", "tokio-tungstenite/rustls-tls-webpki-roots"] [[example]] name = "log" required-features = ["rcgen-ca", "rustls-client"] [[example]] name = "noop" required-features = ["rcgen-ca", "rustls-client"] [[example]] name = "openssl" required-features = ["openssl-ca", "rustls-client"] [[test]] name = "openssl_ca" required-features = ["decoder", "openssl-ca", "native-tls-client", "rustls-client"] [[test]] name = "rcgen_ca" required-features = ["decoder", "rcgen-ca", "native-tls-client", "rustls-client"] [[test]] name = "websocket" required-features = ["decoder", "rcgen-ca", "native-tls-client", "rustls-client"] [[bench]] name = "certificate_authorities" harness = false required-features = ["openssl-ca", "rcgen-ca"] [[bench]] name = "decoder" harness = false required-features = ["decoder"] [[bench]] name = "proxy" harness = false required-features = ["rcgen-ca", "rustls-client"] [profile.bench] lto = true debug = true codegen-units = 1