Skip to content

Features

What Sipral implements, specification by specification.

Signalling, media, encryption and NAT traversal, written from the RFCs and ITU Recommendations. What follows is what is built and reached from a call today, not a roadmap.

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