Features
What Sipral implements, specification by specification.
01
Signalling that survives real deployments
RFC 3261 in a core that owns no socket and no clock, with the extensions that PBXs, proxies and carriers actually send.
- RFC 3261
- SIP itself: transactions, dialogs, forking, the §17 timers as unit tests
- RFC 3263 · 2782
- NAPTR, SRV and A/AAAA location, every target kept for failover on a timeout, a lost transport or a 503, the name asked again when its TTL runs out
- RFC 3261 §18.1.1
- a request over 1300 bytes is not put in a datagram: promotion to TCP, or a trimmed retry
- RFC 3262 · 3311
- reliable provisional responses with PRACK, and UPDATE
- RFC 4028
- session timers
- RFC 7616 · 8760
- digest authentication, with SHA-256 and SHA-512/256
- RFC 3515 · 3891 · 4488
- REFER, Replaces, and REFER without an implicit subscription: blind and attended transfer
- RFC 5626 · 3327
- Outbound connection management and keep-alives, and the Path header
- RFC 5627
- GRUU, asked for on REGISTER and used as the Contact of what opens a dialog
- RFC 3608
- Service-Route, learned from the 200 OK to REGISTER and preloaded on requests to the registrar
- RFC 8599
- push notification bindings, for calls announced while the app sleeps
- RFC 3323 · 3325
- privacy and asserted identity, P-Asserted-Identity read behind a per-account trust gate
- RFC 3326 · 6432
- the Reason header and Q.850 causes, read and written
- RFC 4475
- the SIP torture test messages, asserted message by message
02
More than a call
An audio pipeline from the RTP packet to the earpiece, with the codecs deployments ask for and the services that ride on a call.
- Opus
- RFC 6716 and RFC 7587; a build without it exists for products that cannot carry the Opus patent pool exposure
- G.722 · G.711 · L16
- wideband at 64 kbit/s, A-law and mu-law, linear PCM
- G.729 A and B
- written from the ITU Recommendation, bit-exact against every Annex A and Annex B conformance stream; VAD, DTX and comfort noise
- RFC 3550 · 3551
- RTP and RTCP, with an adaptive jitter buffer, loss concealment and clock drift correction
- RFC 4733 · 6086
- DTMF three ways: RTP events, SIP INFO and in-band
- Conference
- N-way local conferences, each call on its own codec
- RFC 7866 · 7865
- SIPREC, as the recorded party and as the recording server
- RFC 3428 · 3842 · 3856 · 4235
- MESSAGE, message waiting, presence and the dialog package a busy lamp field is built on
- RFC 4103
- real-time text, T.140 beside the audio with redundancy
- RFC 3611 · 6035
- RTCP-XR VoIP metrics with an R factor and MOS, published to a collector at call end
03
Encrypted the ways real PBXs and carriers ask for
Primitives are taken from permissively licensed crates; the protocols around them are written in-tree and proven against the RFC test vectors.
- RFC 3711 · 4568
- SRTP keyed by SDES, AES_CM_128 and the 256-bit suites of RFC 6188
- RFC 7714
- AES-GCM for SRTP and SRTCP, both key widths, proved against every test vector byte for byte
- RFC 5764 · 5763 · 6347
- DTLS-SRTP with DTLS 1.2 written in-tree, both roles, no renegotiation, extended master secret required
- Best effort
- SDES offered on RTP/AVP for PBXs that answer RTP/SAVP with 488
- TLS
- with the platform trust store, a private CA, or one certificate pinned by its fingerprint
- RFC 8224 · 8588 · 8225 · 8226
- STIR/SHAKEN: every INVITE an account places signed, every caller verified before the phone rings
04
NAT handled, not hoped for
From a softphone behind a home router to an agent on a server with a public address.
- RFC 8489 · 5389
- STUN, with failover when the first server is dead
- RFC 8656
- TURN over UDP, TCP and TLS, taken over by ICE as the relayed candidate
- RFC 8445
- ICE in the full and lite roles, with restarts and role conflicts
- RFC 7675 · 8863
- consent freshness, and a checklist waited on rather than failed
- RFC 5761 · 7983
- RTP and RTCP on one port; DTLS, STUN and RTP told apart on one socket
- Network change
- a call that follows its own address when the network moves: re-registered and re-offered from the new one
05
Device mode or headless, per stack
The same stack is a softphone with no audio code, or a line inside a voice agent with no media server.
- Device mode
- the library opens the microphone and speaker itself: CoreAudio voice processing, WASAPI communications streams, AAudio, with the platform echo cancellation
- Application mode
- each call hands its audio to the application as 16-bit PCM, a frame at a time, and takes back what the far end hears; on every platform, in every language
- Headless
- PCM carried over a socket to a separate agent process; a headless build links no audio device at all
- Desktop Linux
- a PipeWire backend for device mode
06
Diagnosable in the field
When a call fails on a customer's carrier, the record of why travels with the bug report.
- Decision record
- every decision a call took, with its reason code, as JSON
- pcapng
- capture export with GDPR redaction
- Counters
- health counters: retransmissions, refusals at a limit and more
- Trace
- a diagnostic trace with credentials and keys stripped
- Replay
- a recorded field session replays deterministically, and becomes a regression test
07
What it deliberately does not do
Each exclusion has a written reason. Anything moving out of this list needs a design document before code exists.
- Proxy, registrar, B2BUA
- Sipral is an endpoint.
- Trickle ICE
- Rare between SIP endpoints, which exchange candidates in the offer and the answer; excluded until a peer needs it.
- Video
- Not before 1.0, so the audio path stays deep; VP8, VP9 and AV1 come after it.
- MSRP
- Session-mode messaging is out of scope; pager-mode MESSAGE is in.
- SIP-T, SIP-I, IMS
- Carrier interconnect and 3GPP registration are a different product.
- iLBC
- Opus covers the same ground, and better.
- AMR, AMR-WB
- Patented mobile radio codecs; on the IP leg operators offer G.711 or Opus.
08
Questions about the features
Which RFCs does Sipral implement?
RFC 3261 and RFC 3263 for signalling and server location, with PRACK (RFC 3262), UPDATE (RFC 3311), session timers (RFC 4028), REFER and Replaces, digest with SHA-256 (RFC 8760), Outbound (RFC 5626), GRUU (RFC 5627) and push notifications (RFC 8599). Media follows RFC 3550, 3711, 5764 and 7714; NAT traversal follows RFC 8489, 8656 and 8445. The full list, by area, is on the features page.
Which audio codecs are included?
Opus, G.722, G.711 (A-law and mu-law), L16 and G.729 with Annexes A and B. The G.729 implementation is bit-exact against the ITU conformance streams. A build without Opus is available for products that cannot carry the Opus patent pool exposure.
Why are iLBC and AMR not supported?
Deliberately. Opus covers the same ground as iLBC and covers it better, and nothing in the field asks for iLBC while refusing Opus. AMR and AMR-WB are patented mobile radio codecs; on the IP leg operators offer G.711 or Opus.
Does Sipral support video?
Not before 1.0, so the audio path stays deep. VP8, VP9 and AV1, RTCP feedback for pictures and per-stream hold are planned after 1.0.
What does a sans-I/O core mean in practice?
The protocol core opens no socket, starts no thread, reads no clock and draws no random number. Bytes go in, bytes to send and events come out, and the caller says what time it is. The RFC 3261 transaction timer diagrams are ordinary unit tests, and a recorded field session replays deterministically.
Is the DTLS-SRTP implementation Sipral's own?
Yes. DTLS 1.2 is implemented in Sipral itself, in both roles, over permissively licensed cryptographic primitives, and interoperates with FreeSWITCH, Asterisk and baresip.
Is Sipral a SIP proxy, registrar or B2BUA?
No. Sipral is an endpoint. Proxy, registrar and B2BUA roles are deliberately out of scope, as are SIP-T and SIP-I carrier interconnect, IMS registration and session-mode messaging (MSRP).
Does Sipral support trickle ICE?
Not yet, deliberately: trickle ICE is rare between SIP endpoints, which exchange candidates in the offer and the answer. It stays excluded until a peer needs it.
How do I diagnose a call in the field?
Each call keeps a record of every decision with its reason code, exported as JSON. Calls can be exported as pcapng with GDPR redaction, health counters are exposed, and the diagnostic trace strips credentials and keys.
How much memory does a call take?
About 72 KB. Ten thousand concurrent calls with audio both ways have been held in one process at that cost each. Of what a live call holds, about 16 KB is signalling state and about 35 KB its media session.
How the stack compares with PJSIP on the same PBX: the measured comparison. Where it runs: platforms and languages.
Ship SIP in a closed app, without the GPL.
One price per company, perpetual for the versions delivered during maintenance, app stores allowed. Ask privately.
Request a quote