Repository navigation
CalloraVoipSdk 4.8.0 #215
BechsteinDigital
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
CalloraVoipSdk 4.8.0
A stack-wide hardening release, plus mutual TLS per SIP line and a public PCM transcoding surface.
4.8.0 closes a long series of protocol-layer review findings across every wire boundary — DTLS-SRTP,
STUN, TURN, RTP/RTCP, SDP, SIP and the WebRTC media plane — and adds two additive public capabilities.
The security work is defensive throughout: fail-closed decoding, constant-time comparisons, anti-amplification
and anti-slowloris deadlines, source binding on plaintext legs, and bounded wire-DoS caps at every parser and
listener. The public API only grew —
PublicApi.approved.txtgained entries and lost none — so an existingconsumer that does not opt into the new configuration surfaces stays behaviour-identical. Every cap sits far
above any real signalling or media, so legitimate traffic is unaffected.
Headline features
client certificate when one is configured — sent only if the registrar asks for it (RFC 8446 §4.4.2), so
behaviour against registrars that do not request one is byte-identical. Two lines to the same registrar can
present different identities: the identity is bound to the line, keyed into the connection pool
(
(transport, addr:port, identity)), and stamped on every request the line originates (REGISTER, INVITE andin-dialog requests, MESSAGE, PUBLISH). Configure it in memory via
TlsConfiguration.ClientCertificate(anX509Certificate2you own and dispose — the SDK never disposes it), or override per connect boundary withConnectOptions.LineTls. Per-line domain identity and trust stay fail-closed (RFC 5922). See ADR-064.IAudioPayloadCodec+AudioPayloadCodecFactory(inCalloraVoipSdk.Audio.Abstractions) let a server-side consumer transcode Opus / G.711 (A-law/µ-law) / G.722↔ PCM16 without taking a direct dependency on Concentus or NAudio — neither appears in any public signature.
The prototypical use case is an SFU that decodes N−1 legs to mix a phone participant into a WebRTC conference.
I/O is PCM16 little-endian
byte[]; one instance per stream direction. Shipped transitively via theCalloraVoipSdkmeta-package — no newPackageReference. See ADR-065.Security hardening
stateless HelloVerifyRequest cookie before the amplified certificate flight (RFC 6347 §4.2.1), a handshake
deadline (
DtlsHandshakeOptions.HandshakeTimeout, default 20 s), an ordered single-writer egress with realerror propagation, and — new in this release — post-handshake association servicing: a control-receive
loop that notices a peer
close_notify/alert, ends the association deterministically, and stops media fromflowing under a keying channel the peer considers closed (RFC 8827 §6.5). See ADR-066.
deadlines on both servers, fail-closed
ALTERNATE-SERVER/decode handling, and immediate teardown of a surplusTURN relay allocation (RFC 8656 §7/§3.9).
caps (with discard telemetry), and a BUNDLE reception-state cap — an authenticated peer can no longer exhaust
process memory through compound floods, header-field expansion, unterminated frames or SSRC spray.
concurrent-call cap, bounded inbound connection/session/transaction admission with slowloris deadlines, and a
redacted
SipCredentials.ToString()(the cleartext password no longer reaches logs).StunMessageCodec.Decodenow rejects a whole malformed message rather thanaccepting a partial one, closing an auth-bypass primitive.
Correctness fixes
0.offer (RFC 3264 §6 / RFC 8829), and the offerer sends the codec the answer accepted (RFC 3264 §6.1).
a generic protocol error.
Upgrading
TlsConfiguration.AcceptUntrustedCertificatesis now an[Obsolete]alias forTrustMode = SipTlsTrustMode.DangerousAcceptAnyChain. It still compiles and behaves as before; migrate toTrustModeat your convenience.MESSAGE-INTEGRITY on a credentialed Binding success now triggers a safe host-only fallback; plaintext legs
discard foreign RTP/RTCP; a 416 no longer downgrades
sips:tosip:; a structurally mismatched SDP answeris rejected; and
SipCredentials.ToString()prints***for the password. SeeCHANGELOG.mdfor the fulllist.
Status notes
release hardens them but does not change that posture. Validate for your trunk/peer before enabling.
reaction to a peer close is a documented follow-up (a SIP leg ends via BYE, not a mid-call DTLS
close_notify).See
CHANGELOG.mdfor the concise per-change entry, anddocs/adr/ADR-064-per-line-sip-mutual-tls.md,docs/adr/ADR-065-public-pcm-transcoding-surface.mdanddocs/adr/ADR-066-dtls-post-handshake-association-servicing.mdfor the architecture decisions.
This discussion was created from the release CalloraVoipSdk 4.8.0.
All reactions