RFC 3261 8.1.1.8 requires a SIPS Contact when the Request-URI is SIPS.
The forward path (dial verb to a sip target) always defaulted to sip:.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* fix: keep siprec recording alive across a feature server transfer
A cross-feature-server move (enqueue/dequeue or conference) re-negotiates the
feature-server leg in _onFeatureServerTransfer, but nothing rebuilt the rtpengine
subscription the SIPREC recording forks from, so the recorder went silent from the
moment the call moved. The fresh destroy handler installed on the new leg also
dropped the _stopRecording() call the original handlers have, so the SIPREC dialog
was never BYEd and the recorder had to wait out its media timeout.
Rebuild the subscription after the transfer re-negotiates media, and stop the
recording when the transferred leg ends. The resubscribe call is guarded so this
is safe to deploy before @jambonz/siprec-client-utils is bumped.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: drop the siprec re-subscribe, keep the missing teardown
The cross-feature-server move was tested on a real two-feature-server cluster
(inbound path): the rtpengine subscription survives the REFER on its own, so
resubscribe() was fixing a fault that does not exist. rtpengine keeps
non-offer-answer subscriptions across an answer.
What does fail, and what this branch still fixes, is the teardown: the destroy
handler installed on the transferred leg never stopped the recording, so the
recorder was left without a BYE. Verified on the inbound path; the outbound
transfer path has the identical handler and the same omission.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
The feature-server sets X-Jambonz-SRTP (from the dial verb's
srtpEncryption option) to request encrypted media on a per-call basis.
Previously SRTP on a forwarded sip URI could only be enabled globally
via JAMBONES_SIPS_FORWARD_SRTP + a sips: scheme; now an application can
opt in per call. The env var remains as a global fallback. The internal
header is stripped before the INVITE is sent to the target.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* add new CODEC_TRANSCODE option
allows RTP engine to add additional codecs to the outgoing offer that wern't in the invite from Freeswitch so RTP engine will transcode outbound calls.
* update README for new env var descriptions
---------
Co-authored-by: Dave Horton <daveh@beachdognet.com>
* if call hasRecording then add url to cdr
* handle missing hasRecording value in redis
* typo
* lint
* use nullish coalescing for null response
* typo