Technical Specifications
Reference this section during capacity planning or architecture reviews for compatibility, performance assumptions, and extensibility boundaries.
1. Support matrix
| Item | Details |
|---|---|
| Operating systems | 64-bit Linux (Debian 11+, Ubuntu 20.04+, CentOS Stream) and container/Kubernetes deployments |
| Databases | SQLite by default; PostgreSQL/MySQL recommended for production. SeaORM unifies the models layer |
| SIP codecs | G.711 a/u, G.729, Opus, G.722, iLBC (select per trunk or extension) |
| Transport protocols | UDP/TCP/TLS for SIP, RTP/SAVP (SDES-SRTP)/SRTP for media, WebSocket/WebRTC for browser clients |
| Object storage | Local filesystem by default; S3 (AWS/MinIO/Aliyun/COS), Azure Blob, and GCP Cloud Storage for recordings, CDR archives, and SipFlow offload |
| Console | Web UI plus REST/AMI management interfaces (documentation served by Docusaurus) |
2. Performance references
Numbers below assume a 4 vCPU / 8 GB node with SRTP enabled; validate with `examples/perfcli.rs` for your workload.
- Concurrent calls: 500–800 per node is a common range depending on codec and recording strategy.
- Calls per second (CPS): lightweight scenarios sustain 30+ CPS, subject to carrier throttling.
- Latency: internal processing < 20 ms; end-to-end latency follows network quality.
2.1 SDES-SRTP Support
Since v0.4.10, RustPBX supports SDES-SRTP (RTP/SAVP) negotiation on SIP legs, in addition to DTLS-SRTP used by WebRTC.
- Inbound SDES-SRTP offer: an inbound SIP INVITE with
RTP/SAVPprofile anda=cryptoline is answered withRTP/SAVP(instead of being downgraded to plainRTP/AVP, which some carriers reject). - SIP-to-SIP anchored media: SDES-SRTP is mirrored from the caller leg to the callee leg, keeping media encrypted end-to-end through the media proxy.
- WebRTC gateways: WebRTC (ICE+DTLS) ↔ SIP (RTP/SAVP) interop continues to work — the proxy bridges the two transport modes automatically.
- Plain RTP: trunks and extensions that do not signal SDES-SRTP are served with plain RTP/AVP as before; no configuration change is needed.
No dedicated config field — SDES-SRTP is negotiated automatically based on the SDP offer. Carriers like Twilio Elastic SIP Trunks with Secure Media enabled will now interoperate correctly.
3. Observability & interfaces
- Health probe:
handler::amiexposes/healthfor load balancers or black-box monitors;perfclican batch ping nodes. - Logging: configure
log_levelandlog_filefortracingoutput shipped to ELK/Loki. HTTP access logs supportAccessLogEventFormat. - Diagnostics UI:
templates/console/diagnostics.htmlbundles the WebRTC probe, trunk/route evaluation, and Web Dialer for most troubleshooting needs. - Webhook / AMI: extend
handler/ami.rsorhandler/llmproxy.rsto emit callbacks or integrate with external voice bots.
4. Security & compliance
- Encryption: TLS/SRTP and WebRTC DTLS, with certificates managed by
addons/acmeif desired. - Authentication: per-extension and per-trunk credentials; console middleware (
console/middleware.rs) enables custom auth flows. - Auditability: export call records and admin logs for retention programs—configure retention per policy.
5. Extension points
- Addons: plugin architecture via the
Addontrait — community addons include ACME (TLS auto-renewal), Archive (recording archiving), Transcript (offline ASR), Queue, and Observability (Prometheus). Commercial addons extend to Wholesale routing, Contact Center (CC), IVR Editor, Voicemail, Endpoint Manager (phone provisioning), Enterprise Auth (LDAP/SAML), SBC, and Telemetry (OpenTelemetry). - RWI (Real-time WebSocket Interface): WebSocket-based command/event protocol for call control (originate, answer, hangup, bridge, transfer, hold), queue management (enqueue, dequeue, agent assignment), and conference control. Suitable for building custom CTI panels, voice agents, and CRM integrations.
- Playbook / LLM:
playbook/andllm/directories expose AI voice hooks for external models. - Handlers: add custom APIs/protocols under
handler/, e.g., webhooks or gRPC endpoints.
6. Deployment & resilience
- Multi-instance: run at least two nodes with a shared database; use an external SBC or load balancer for traffic splitting.
- State sharing: active call data lives in
proxy/active_call_registry.rs; share state via Redis/database or partition traffic per business unit. - Backups: store configs in Git, snapshot databases periodically, and offload recordings to object storage.
For official benchmarks, watch docs/specs for published reports or run cargo bench plus custom load tests in your staging environment.