rustpbx 0.4.2

A SIP PBX implementation in Rust
Documentation
[package]
name = "rustpbx"
version = "0.4.2"
edition = "2024"
default-run = "rustpbx"
authors = ["jinti<shenjindi@fourz.cn>"]
description = "A SIP PBX implementation in Rust"
license = "MIT"
repository = "https://github.com/restsend/rustpbx"
readme = "README.md"
keywords = ["sip", "voip", "telephony", "pbx", "webrtc"]
categories = ["network-programming", "multimedia"]
exclude = [
    "src/addons/cc",
    "src/addons/cc/**",
    "src/addons/wholesale",
    "src/addons/wholesale/**",
    "src/addons/endpoint_manager",
    "src/addons/endpoint_manager/**",
    "src/addons/enterprise_auth",
    "src/addons/enterprise_auth/**",
    "src/addons/ivr_editor",
    "src/addons/ivr_editor/**",
    "src/addons/jsonrpc_router",
    "src/addons/jsonrpc_router/**",
    "src/addons/telemetry",
    "src/addons/telemetry/**",
    "src/addons/voicemail",
    "src/addons/voicemail/**",
]

[features]
opus = ["audio-codec/opus"]
console = ["dep:minijinja"]
addon-acme = ["instant-acme"]
addon-wholesale = ["flate2", "dep:async-compression", "dep:async-stream"]
addon-archive = ["flate2"]
addon-endpoint-manager = []
addon-enterprise-auth = ["dep:ldap3", "flate2", "dep:ring"]
addon-transcript = []
addon-voicemail = ["dep:url"]
addon-ivr-editor = []
addon-jsonrpc-router = ["dep:minijinja", "dep:evalexpr"]
addon-cc = []
addon-observability = ["metrics-exporter-prometheus"]
addon-telemetry = [
    "addon-observability",
    "opentelemetry",
    "opentelemetry-otlp",
    "opentelemetry_sdk",
    "tracing-opentelemetry",
]
commerce = [
    "addon-endpoint-manager",
    "addon-enterprise-auth",
    "addon-voicemail",
    "addon-ivr-editor",
    "addon-telemetry",
]
wholesale = ["addon-wholesale"]
contact-center = [
    "addon-cc",
    "addon-endpoint-manager",
    "addon-enterprise-auth",
    "addon-ivr-editor",
    "addon-voicemail",
    "addon-telemetry",
]

default = [
    "opus",
    "console",
    "addon-acme",
    "addon-transcript",
    "addon-archive",
    "addon-observability",
]
cross = ["aws-lc-rs/bindgen"]
perfcli-bin = []
text2wav-bin = []
wav2text-bin = []

[dependencies]
instant-acme = { version = "0.8.5", optional = true }
anyhow = "1"
async-trait = "0.1.88"
async-stream = { version = "0.3.6", optional = true }
axum = { version = "0.8.9", features = ["ws", "tokio", "multipart"] }
bytes = "1"
futures = "0.3.31"
rustls = { version = "0.23.39", features = ["ring"] }
minijinja = { version = "2.19.0", features = [
    "loader",
    "json",
], optional = true }
evalexpr = { version = "11.3.1", features = ["regex_support"], optional = true }
serde = { version = "1", features = ["derive"] }
glob = "0.3.3"
serde_json = "1"
thiserror = "2"
tokio = { version = "1.52.1", features = ["full", "tracing", "test-util"] }
parking_lot = "0.12"
dashmap = "6"
tokio-tungstenite = { version = "0.29.0", features = [
    "rustls-tls-native-roots",
] }
tokio-util = "0.7.18"
tracing = "0.1.43"
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
tracing-appender = "0.2.5"
url = { version = "2.5.8", optional = true }
uuid = { version = "1.23.1", features = ["v4"] }
clap = { version = "4.6.1", features = ["derive"] }
toml = "1.1.2"
toml_edit = { version = "0.25.11", features = ["serde"] }
rand = "0.10.1"
chrono = { version = "0.4", features = ["serde"] }
chrono-tz = "0.10.4"
rsipstack = "0.5.9"
#rsipstack = { path = "../rsipstack" }
audio-codec = { version = "=0.3.30", default-features = false }
#rustrtc = { path = "../rustrtc" }
rustrtc = "0.3.52"
reqwest = { version = "0.13", features = [
    "json",
    "stream",
    "rustls",
    "multipart",
    "form",
    "query",
    "gzip",
    "blocking",
] }
base64 = "0.22.1"
hmac = "0.13.0"
sha2 = "0.11.0"
hex = "0.4.3"
dotenvy = "0.15.7"
md-5 = "0.11.0"
once_cell = "1.21.4"
regex = "1.12.3"
http = "1.4.0"
urlencoding = "2.1.3"
byteorder = "1.5.0"
ipnetwork = "0.21.1"
sqlx = { version = "0.8.6", features = [
    "runtime-tokio-rustls",
    "postgres",
    "sqlite",
    "mysql",
    "any",
] }
sea-orm = { version = "1.1.20", features = [
    "runtime-tokio-rustls",
    "sqlx-sqlite",
    "sqlx-mysql",
] }
sea-orm-migration = { version = "1.1.20", features = [
    "runtime-tokio-rustls",
    "sqlx-sqlite",
    "sqlx-mysql",
] }
argon2 = { version = "0.5.3", features = ["password-hash"] }
object_store = { version = "0.13.2", features = ["aws", "azure", "gcp"] }
humantime = "2.3.0"
serde_with = "3.18.0"
async-compression = { version = "0.4", features = [
    "tokio",
    "gzip",
], optional = true }
flate2 = { version = "1", optional = true }
console-subscriber = "0.5.0"
crossbeam-channel = "0.5"
lru = "0.17.0"
metrics = "0.24"
metrics-exporter-prometheus = { version = "0.18.1", optional = true }
# OTel stack — only pulled in for the commercial `addon-telemetry` feature.
opentelemetry = { version = "0.31.0", optional = true }
opentelemetry-otlp = { version = "0.31.1", features = [
    "grpc-tonic",
    "trace",
    "metrics",
], optional = true }
opentelemetry_sdk = { version = "0.31.0", features = [
    "rt-tokio",
], optional = true }
tracing-opentelemetry = { version = "0.32", optional = true }
phonenumber = "0.3.9"
tower-http = { version = "0.6.8", features = [
    "fs",
    "cors",
    "compression-gzip",
] }
rcgen = "0.14.7"
axum-server = { version = "0.8.0", features = ["tls-rustls"] }
csv = "1.4.0"
quick-xml = { version = "0.39.2", features = ["serialize"] }
zstd = "0.13"
hound = "3.5"
minimp3 = "0.6.1"
aws-lc-rs = { version = "1", optional = true }
totp-rs = { version = "5.7.1", features = ["qr", "gen_secret"] }
ldap3 = { version = "0.12.1", optional = true }
ring = { version = "0.17", optional = true }

[dev-dependencies]
tempfile = "3.27.0"
portpicker = "0.1.1"
tower = { version = "0.5", features = ["util"] }
sipbot = { version = "=0.2.30", default-features = false }
serde_urlencoded = "0.7"

[build-dependencies]
chrono = "0.4"

[[bin]]
name = "rustpbx"
path = "src/bin/rustpbx.rs"

[[bin]]
name = "sipflow"
path = "src/bin/sipflow.rs"
required-features = ["opus"]

[[bin]]
name = "verify-i18n"
path = "tools/verify_i18n.rs"