mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-25 22:18:07 +00:00
1153 lines
47 KiB
Markdown
1153 lines
47 KiB
Markdown
|
|
## Change Log for Release asterisk-20.16.0
|
|
|
|
### Links:
|
|
|
|
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.16.0.html)
|
|
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.15.2...20.16.0)
|
|
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.16.0.tar.gz)
|
|
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
|
|
|
|
### Summary:
|
|
|
|
- Commits: 54
|
|
- Commit Authors: 22
|
|
- Issues Resolved: 40
|
|
- Security Advisories Resolved: 0
|
|
|
|
### User Notes:
|
|
|
|
- #### app_queue.c: Add new global 'log_unpause_on_reason_change'
|
|
Add new global option 'log_unpause_on_reason_change' that
|
|
is default disabled. When enabled cause addition of UNPAUSE event on
|
|
every re-PAUSE with reason changed.
|
|
|
|
- #### pbx_builtins: Allow custom tone for WaitExten.
|
|
The tone used while waiting for digits in WaitExten
|
|
can now be overridden by specifying an argument for the 'd'
|
|
option.
|
|
|
|
- #### res_tonedetect: Add option for TONE_DETECT detection to auto stop.
|
|
The 'e' option for TONE_DETECT now allows detection to
|
|
be disabled automatically once the desired number of matches have
|
|
been fulfilled, which can help prevent race conditions in the
|
|
dialplan, since TONE_DETECT does not need to be disabled after
|
|
a hit.
|
|
|
|
- #### sorcery: Prevent duplicate objects and ensure missing objects are created on u..
|
|
Users relying on Sorcery multiple writable backends configurations
|
|
(e.g., astdb + realtime) may now enable update_or_create_on_update_miss = yes
|
|
in sorcery.conf to ensure missing objects are recreated after temporary backend
|
|
failures. Default behavior remains unchanged unless explicitly enabled.
|
|
|
|
- #### chan_websocket: Allow additional URI parameters to be added to the outgoing URI.
|
|
A new WebSocket channel driver option `v` has been added to the
|
|
Dial application that allows you to specify additional URI parameters on
|
|
outgoing connections. Run `core show application Dial` from the Asterisk CLI
|
|
to see how to use it.
|
|
|
|
- #### app_chanspy: Add option to not automatically answer channel.
|
|
ChanSpy and ExtenSpy can now be configured to not
|
|
automatically answer the channel by using the 'N' option.
|
|
|
|
- #### cel: Add STREAM_BEGIN, STREAM_END and DTMF event types.
|
|
Enabling the tracking of the
|
|
STREAM_BEGIN and the STREAM_END event
|
|
types in cel.conf will log media files and
|
|
music on hold played to each channel.
|
|
The STREAM_BEGIN event's extra field will
|
|
contain a JSON with the file details (path,
|
|
format and language), or the class name, in
|
|
case of music on hold is played. The DTMF
|
|
event's extra field will contain a JSON with
|
|
the digit and the duration in milliseconds.
|
|
|
|
- #### res_srtp: Add menuselect options to enable AES_192, AES_256 and AES_GCM
|
|
Options are now available in the menuselect "Resource Modules"
|
|
category that allow you to enable the AES_192, AES_256 and AES_GCM
|
|
cipher suites in res_srtp. Of course, libsrtp and OpenSSL must support
|
|
them but modern versions do. Previously, the only way to enable them was
|
|
to set the CFLAGS environment variable when running ./configure.
|
|
The default setting is to disable them preserving existing behavior.
|
|
|
|
- #### cdr: add CANCEL dispostion in CDR
|
|
A new CDR option "canceldispositionenabled" has been added
|
|
that when set to true, the NO ANSWER disposition will be split into
|
|
two dispositions: CANCEL and NO ANSWER. The default value is 'no'
|
|
|
|
- #### func_curl: Allow auth methods to be set.
|
|
The httpauth field in CURLOPT now allows the authentication
|
|
methods to be set.
|
|
|
|
- #### Media over Websocket Channel Driver
|
|
A new channel driver "chan_websocket" is now available. It can
|
|
exchange media over both inbound and outbound websockets and will both frame
|
|
and re-time the media it receives.
|
|
See http://s.asterisk.net/mow for more information.
|
|
The ARI channels/externalMedia API now includes support for the
|
|
|
|
### Upgrade Notes:
|
|
|
|
|
|
### Developer Notes:
|
|
|
|
- #### ARI: Add command to indicate progress to a channel
|
|
A new ARI endpoint is available at `/channels/{channelId}/progress` to indicate progress to a channel.
|
|
|
|
- #### options: Change ast_options from ast_flags to ast_flags64.
|
|
The 32-bit ast_options has no room left to accomodate new
|
|
options and so has been converted to an ast_flags64 structure. All internal
|
|
references to ast_options have been updated to use the 64-bit flag
|
|
manipulation macros. External module references to the 32-bit ast_options
|
|
should continue to work on little-endian systems because the
|
|
least-significant bytes of a 64 bit integer will be in the same location as a
|
|
32-bit integer. Because that's not the case on big-endian systems, we've
|
|
swapped the bytes in the flags manupulation macros on big-endian systems
|
|
so external modules should still work however you are encouraged to test.
|
|
|
|
|
|
### Commit Authors:
|
|
|
|
- Alexei Gradinari: (2)
|
|
- Alexey Khabulyak: (2)
|
|
- Allan Nathanson: (1)
|
|
- Artem Umerov: (1)
|
|
- Ben Ford: (1)
|
|
- George Joseph: (12)
|
|
- Igor Goncharovsky: (2)
|
|
- Jaco Kroon: (1)
|
|
- Joe Garlick: (1)
|
|
- Jose Lopes: (1)
|
|
- Kodokaii: (1)
|
|
- Martin Tomec: (1)
|
|
- Mike Bradeen: (1)
|
|
- Mkmer: (1)
|
|
- Naveen Albert: (15)
|
|
- Sean Bright: (2)
|
|
- Sperl Viktor: (2)
|
|
- Stanislav Abramenkov: (1)
|
|
- Stuart Henderson: (1)
|
|
- Sven Kube: (2)
|
|
- Tinet-Mucw: (2)
|
|
- Zhou_jiajian: (1)
|
|
|
|
## Issue and Commit Detail:
|
|
|
|
### Closed Issues:
|
|
|
|
- 401: [bug]: app_dial: Answer Gosub option passthrough regression
|
|
- 927: [bug]: no audio when media source changed during the call
|
|
- 1176: [bug]: ast_slinear_saturated_multiply_float produces potentially audible distortion artifacts
|
|
- 1259: [bug]: New TenantID feature doesn't seem to set CDR for incoming calls
|
|
- 1260: [bug]: Asterisk sends RTP audio stream before ICE/DTLS completes
|
|
- 1269: [bug]: MixMonitor with D option produces corrupt file
|
|
- 1273: [bug]: When executed with GotoIf, the action Redirect does not take effect and causes confusion in dialplan execution.
|
|
- 1280: [improvement]: logging playback of audio per channel
|
|
- 1289: [bug]: sorcery - duplicate objects from multiple backends and backend divergence on update
|
|
- 1301: [bug]: sig_analog: fgccamamf doesn't handle STP, STP2, or STP3
|
|
- 1304: [bug]: FLUSH_MEDIA does not reset frame_queue_length in WebSocket channel
|
|
- 1305: [bug]: Realtime incorrectly falls back to next backend on record-not-found (SQL_NO_DATA), causing incorrect behavior and delay
|
|
- 1307: [improvement]: ast_tls_cert: Allow certificate validity to be configurable
|
|
- 1309: [bug]: Crash with C++ alternative storage backend enabled
|
|
- 1315: [bug]: When executed with dialplan, the action Redirect does not take effect.
|
|
- 1317: [bug]: AGI command buffer overflow with long variables
|
|
- 1321: [improvement]: app_agent_pool: Remove obsolete documentation
|
|
- 1323: [new-feature]: add CANCEL dispostion in CDR
|
|
- 1327: [bug]: res_stasis_device_state: can't delete ARI Devicestate after asterisk restart
|
|
- 1332: [new-feature]: func_curl: Allow auth methods to be set
|
|
- 1349: [bug]: Race condition on redirect can cause missing Diversion header
|
|
- 1352: [improvement]: Websocket channel with custom URI
|
|
- 1353: [bug]: AST_DATA_DIR/sounds/custom directory not searched
|
|
- 1358: [new-feature]: app_chanspy: Add option to not automatically answer channel
|
|
- 1364: [bug]: bridge.c: BRIDGE_NOANSWER not always obeyed
|
|
- 1366: [improvement]: func_frame_drop: Handle allocation failure properly
|
|
- 1369: [bug]: test_res_prometheus: Compilation failure in devmode due to curlopts not using long type
|
|
- 1371: [improvement]: func_frame_drop: Add debug messages for frames that can be dropped
|
|
- 1375: [improvement]: dsp.c: Improve logging in tone_detect().
|
|
- 1378: [bug]: chan_dahdi: dialmode feature is not properly reset between calls
|
|
- 1380: [bug]: sig_analog: Segfault due to calling strcmp on NULL
|
|
- 1384: [bug]: chan_websocket: asterisk crashes on hangup after STOP_MEDIA_BUFFERING command with id
|
|
- 1386: [bug]: enabling announceposition_only_up prevents any queue position announcements
|
|
- 1390: [improvement]: res_tonedetect: Add option to automatically end detection in TONE_DETECT
|
|
- 1394: [improvement]: sig_analog: Skip Caller ID spill if Caller ID is disabled
|
|
- 1396: [new-feature]: pbx_builtins: Make tone option for WaitExten configurable
|
|
- 1401: [bug]: app_waitfornoise timeout is always less then configured because of time() usage
|
|
- 1457: [bug]: segmentation fault because of a wrong ari config
|
|
- 1462: [bug]: chan_websocket isn't handling the "opus" codec correctly.
|
|
- 1474: [bug]: Media doesn't flow for video conference after res_rtp_asterisk change to stop media flow before DTLS completes
|
|
|
|
### Commits By Author:
|
|
|
|
- #### Alexei Gradinari (2):
|
|
- res_config_odbc: Prevent Realtime fallback on record-not-found (SQL_NO_DATA)
|
|
- sorcery: Prevent duplicate objects and ensure missing objects are created on u..
|
|
|
|
- #### Alexey Khabulyak (2):
|
|
- app_dial.c: Moved channel lock to prevent deadlock
|
|
- pbx_lua.c: segfault when pass null data to term_color function
|
|
|
|
- #### Allan Nathanson (1):
|
|
- file.c: with "sounds_search_custom_dir = yes", search "custom" directory
|
|
|
|
- #### Artem Umerov (1):
|
|
- Fix missing ast_test_flag64 in extconf.c
|
|
|
|
- #### Ben Ford (1):
|
|
- res_rtp_asterisk: Don't send RTP before DTLS has negotiated.
|
|
|
|
- #### George Joseph (12):
|
|
- Media over Websocket Channel Driver
|
|
- app_mixmonitor: Update the documentation concerning the "D" option.
|
|
- cdr.c: Set tenantid from party_a->base instead of chan->base.
|
|
- options: Change ast_options from ast_flags to ast_flags64.
|
|
- res_srtp: Add menuselect options to enable AES_192, AES_256 and AES_GCM
|
|
- channelstorage_cpp_map_name_id.cc: Refactor iterators for thread-safety.
|
|
- xmldoc.c: Fix rendering of CLI output.
|
|
- chan_websocket: Fix buffer overrun when processing TEXT websocket frames.
|
|
- chan_websocket: Allow additional URI parameters to be added to the outgoing URI.
|
|
- res_ari: Ensure outbound websocket config has a websocket_client_id.
|
|
- chan_websocket: Fix codec validation and add passthrough option.
|
|
- res_rtp_asterisk.c: Use rtp->dtls in __rtp_sendto when rtcp mux is used.
|
|
|
|
- #### Igor Goncharovsky (2):
|
|
- app_waitforsilence.c: Use milliseconds to calculate timeout time
|
|
- app_queue.c: Add new global 'log_unpause_on_reason_change'
|
|
|
|
- #### Jaco Kroon (1):
|
|
- res_musiconhold: Appropriately lock channel during start.
|
|
|
|
- #### Joe Garlick (1):
|
|
- chan_websocket.c: Add DTMF messages
|
|
|
|
- #### Jose Lopes (1):
|
|
- res_stasis_device_state: Fix delete ARI Devicestates after asterisk restart.
|
|
|
|
- #### Martin Tomec (1):
|
|
- chan_pjsip.c: Change SSRC after media source change
|
|
|
|
- #### Mike Bradeen (1):
|
|
- res_pjsip_diversion: resolve race condition between Diversion header processin..
|
|
|
|
- #### Naveen Albert (15):
|
|
- sig_analog: Properly handle STP, ST2P, and ST3P for fgccamamf.
|
|
- ast_tls_cert: Make certificate validity configurable.
|
|
- app_agent_pool: Remove documentation for removed option.
|
|
- func_curl: Allow auth methods to be set.
|
|
- bridge.c: Obey BRIDGE_NOANSWER variable to skip answering channel.
|
|
- func_frame_drop: Handle allocation failure properly.
|
|
- test_res_prometheus: Fix compilation failure on Debian 13.
|
|
- func_frame_drop: Add debug messages for dropped frames.
|
|
- app_chanspy: Add option to not automatically answer channel.
|
|
- dsp.c: Improve debug logging in tone_detect().
|
|
- sig_analog: Fix SEGV due to calling strcmp on NULL.
|
|
- chan_dahdi: Fix erroneously persistent dialmode.
|
|
- sig_analog: Skip Caller ID spill if usecallerid=no.
|
|
- res_tonedetect: Add option for TONE_DETECT detection to auto stop.
|
|
- pbx_builtins: Allow custom tone for WaitExten.
|
|
|
|
- #### Sean Bright (2):
|
|
- res_musiconhold.c: Annotate when the channel is locked.
|
|
- res_musiconhold.c: Ensure we're always locked around music state access.
|
|
|
|
- #### Sperl Viktor (2):
|
|
- res_agi: Increase AGI command buffer size from 2K to 8K
|
|
- cel: Add STREAM_BEGIN, STREAM_END and DTMF event types.
|
|
|
|
- #### Stanislav Abramenkov (1):
|
|
- bundled_pjproject: Avoid deadlock between transport and transaction
|
|
|
|
- #### Stuart Henderson (1):
|
|
- app_queue: fix comparison for announce-position-only-up
|
|
|
|
- #### Sven Kube (2):
|
|
- resource_channels.c: Don't call ast_channel_get_by_name on empty optional argu..
|
|
- ARI: Add command to indicate progress to a channel
|
|
|
|
- #### Tinet-mucw (2):
|
|
- pbx.c: when set flag AST_SOFTHANGUP_ASYNCGOTO, ast_explicit_goto should return..
|
|
- pbx.c: When the AST_SOFTHANGUP_ASYNCGOTO flag is set, pbx_extension_helper sho..
|
|
|
|
- #### kodokaii (1):
|
|
- chan_websocket: Reset frame_queue_length to 0 after FLUSH_MEDIA
|
|
|
|
- #### mkmer (1):
|
|
- utils.h: Add rounding to float conversion to int.
|
|
|
|
- #### zhou_jiajian (1):
|
|
- cdr: add CANCEL dispostion in CDR
|
|
|
|
|
|
### Commit List:
|
|
|
|
- res_rtp_asterisk.c: Use rtp->dtls in __rtp_sendto when rtcp mux is used.
|
|
- chan_websocket: Fix codec validation and add passthrough option.
|
|
- res_ari: Ensure outbound websocket config has a websocket_client_id.
|
|
- chan_websocket.c: Add DTMF messages
|
|
- app_queue.c: Add new global 'log_unpause_on_reason_change'
|
|
- app_waitforsilence.c: Use milliseconds to calculate timeout time
|
|
- Fix missing ast_test_flag64 in extconf.c
|
|
- pbx_builtins: Allow custom tone for WaitExten.
|
|
- res_tonedetect: Add option for TONE_DETECT detection to auto stop.
|
|
- app_queue: fix comparison for announce-position-only-up
|
|
- sig_analog: Skip Caller ID spill if usecallerid=no.
|
|
- chan_dahdi: Fix erroneously persistent dialmode.
|
|
- chan_websocket: Fix buffer overrun when processing TEXT websocket frames.
|
|
- sig_analog: Fix SEGV due to calling strcmp on NULL.
|
|
- ARI: Add command to indicate progress to a channel
|
|
- dsp.c: Improve debug logging in tone_detect().
|
|
- res_stasis_device_state: Fix delete ARI Devicestates after asterisk restart.
|
|
- app_chanspy: Add option to not automatically answer channel.
|
|
- xmldoc.c: Fix rendering of CLI output.
|
|
- func_frame_drop: Add debug messages for dropped frames.
|
|
- test_res_prometheus: Fix compilation failure on Debian 13.
|
|
- func_frame_drop: Handle allocation failure properly.
|
|
- pbx_lua.c: segfault when pass null data to term_color function
|
|
- bridge.c: Obey BRIDGE_NOANSWER variable to skip answering channel.
|
|
- res_rtp_asterisk: Don't send RTP before DTLS has negotiated.
|
|
- app_dial.c: Moved channel lock to prevent deadlock
|
|
- file.c: with "sounds_search_custom_dir = yes", search "custom" directory
|
|
- cel: Add STREAM_BEGIN, STREAM_END and DTMF event types.
|
|
- channelstorage_cpp_map_name_id.cc: Refactor iterators for thread-safety.
|
|
- res_srtp: Add menuselect options to enable AES_192, AES_256 and AES_GCM
|
|
- cdr: add CANCEL dispostion in CDR
|
|
- func_curl: Allow auth methods to be set.
|
|
- options: Change ast_options from ast_flags to ast_flags64.
|
|
- res_config_odbc: Prevent Realtime fallback on record-not-found (SQL_NO_DATA)
|
|
- app_agent_pool: Remove documentation for removed option.
|
|
- res_agi: Increase AGI command buffer size from 2K to 8K
|
|
- ast_tls_cert: Make certificate validity configurable.
|
|
- cdr.c: Set tenantid from party_a->base instead of chan->base.
|
|
- app_mixmonitor: Update the documentation concerning the "D" option.
|
|
- sig_analog: Properly handle STP, ST2P, and ST3P for fgccamamf.
|
|
- chan_websocket: Reset frame_queue_length to 0 after FLUSH_MEDIA
|
|
- chan_pjsip.c: Change SSRC after media source change
|
|
- Media over Websocket Channel Driver
|
|
- bundled_pjproject: Avoid deadlock between transport and transaction
|
|
- utils.h: Add rounding to float conversion to int.
|
|
- res_musiconhold.c: Ensure we're always locked around music state access.
|
|
- res_musiconhold.c: Annotate when the channel is locked.
|
|
- res_musiconhold: Appropriately lock channel during start.
|
|
|
|
### Commit Details:
|
|
|
|
#### res_rtp_asterisk.c: Use rtp->dtls in __rtp_sendto when rtcp mux is used.
|
|
Author: George Joseph
|
|
Date: 2025-09-23
|
|
|
|
In __rtp_sendto(), the check for DTLS negotiation completion for rtcp packets
|
|
needs to use the rtp->dtls structure instead of rtp->rtcp->dtls when
|
|
AST_RTP_INSTANCE_RTCP_MUX is set.
|
|
|
|
Resolves: #1474
|
|
|
|
#### chan_websocket: Fix codec validation and add passthrough option.
|
|
Author: George Joseph
|
|
Date: 2025-09-17
|
|
|
|
* Fixed an issue in webchan_write() where we weren't detecting equivalent
|
|
codecs properly.
|
|
* Added the "p" dialstring option that puts the channel driver in
|
|
"passthrough" mode where it will not attempt to re-frame or re-time
|
|
media coming in over the websocket from the remote app. This can be used
|
|
for any codec but MUST be used for codecs that use packet headers or whose
|
|
data stream can't be broken up on arbitrary byte boundaries. In this case,
|
|
the remote app is fully responsible for correctly framing and timing media
|
|
sent to Asterisk and the MEDIA text commands that could be sent over the
|
|
websocket are disabled. Currently, passthrough mode is automatically set
|
|
for the opus, speex and g729 codecs.
|
|
* Now calling ast_set_read_format() after ast_channel_set_rawreadformat() to
|
|
ensure proper translation paths are set up when switching between native
|
|
frames and slin silence frames. This fixes an issue with codec errors
|
|
when transcode_via_sln=yes.
|
|
|
|
Resolves: #1462
|
|
|
|
#### res_ari: Ensure outbound websocket config has a websocket_client_id.
|
|
Author: George Joseph
|
|
Date: 2025-09-12
|
|
|
|
Added a check to outbound_websocket_apply() that makes sure an outbound
|
|
websocket config object in ari.conf has a websocket_client_id parameter.
|
|
|
|
Resolves: #1457
|
|
|
|
#### chan_websocket.c: Add DTMF messages
|
|
Author: Joe Garlick
|
|
Date: 2025-09-04
|
|
|
|
Added DTMF messages to the chan_websocket feature.
|
|
|
|
When a user presses DTMF during a call over chan_websocket it will send a message like:
|
|
"DTMF_END digit:1"
|
|
|
|
Resolves: https://github.com/asterisk/asterisk-feature-requests/issues/70
|
|
|
|
#### app_queue.c: Add new global 'log_unpause_on_reason_change'
|
|
Author: Igor Goncharovsky
|
|
Date: 2025-09-02
|
|
|
|
In many asterisk-based systems, the pause reason is used to separate
|
|
pauses by type,and logically, changing the reason defines two intervals
|
|
that should be accounted for separately. The introduction of a new
|
|
option allows me to separate the intervals of operator inactivity in
|
|
the log by the event of unpausing.
|
|
|
|
UserNote: Add new global option 'log_unpause_on_reason_change' that
|
|
is default disabled. When enabled cause addition of UNPAUSE event on
|
|
every re-PAUSE with reason changed.
|
|
|
|
|
|
#### app_waitforsilence.c: Use milliseconds to calculate timeout time
|
|
Author: Igor Goncharovsky
|
|
Date: 2025-09-04
|
|
|
|
The functions WaitForNoise() and WaitForSilence() use the time()
|
|
functions to calculate elapsed time, which causes the timer to fire on
|
|
a whole second boundary, and the actual function execution time to fire
|
|
the timer may be 1 second less than expected. This fix replaces time()
|
|
with ast_tvnow().
|
|
|
|
Fixes: #1401
|
|
|
|
#### Fix missing ast_test_flag64 in extconf.c
|
|
Author: Artem Umerov
|
|
Date: 2025-08-29
|
|
|
|
Fix missing ast_test_flag64 after https://github.com/asterisk/asterisk/commit/43bf8a4ded7a65203b766b91eaf8331a600e9d8d
|
|
|
|
|
|
#### pbx_builtins: Allow custom tone for WaitExten.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-25
|
|
|
|
Currently, the 'd' option will play dial tone while waiting
|
|
for digits. Allow it to accept an argument for any tone from
|
|
indications.conf.
|
|
|
|
Resolves: #1396
|
|
|
|
UserNote: The tone used while waiting for digits in WaitExten
|
|
can now be overridden by specifying an argument for the 'd'
|
|
option.
|
|
|
|
|
|
#### res_tonedetect: Add option for TONE_DETECT detection to auto stop.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-28
|
|
|
|
One of the problems with TONE_DETECT as it was originally written
|
|
is that if a tone is detected multiple times, it can trigger
|
|
the redirect logic multiple times as well. For example, if we
|
|
do an async goto in the dialplan after detecting a tone, because
|
|
the detector is still active until explicitly disabled, if we
|
|
detect the tone again, we will branch again and start executing
|
|
that dialplan a second time. This is rarely ever desired behavior,
|
|
and can happen if the detector is not removed quickly enough.
|
|
|
|
Add a new option, 'e', which automatically disables the detector
|
|
once the desired number of matches have been heard. This eliminates
|
|
the potential race condition where previously the detector would
|
|
need to be disabled immediately, but doing so quickly enough
|
|
was not guaranteed. This also allows match criteria to be retained
|
|
longer if needed, so the detector does not need to be destroyed
|
|
prematurely.
|
|
|
|
Resolves: #1390
|
|
|
|
UserNote: The 'e' option for TONE_DETECT now allows detection to
|
|
be disabled automatically once the desired number of matches have
|
|
been fulfilled, which can help prevent race conditions in the
|
|
dialplan, since TONE_DETECT does not need to be disabled after
|
|
a hit.
|
|
|
|
|
|
#### app_queue: fix comparison for announce-position-only-up
|
|
Author: Stuart Henderson
|
|
Date: 2025-08-21
|
|
|
|
Numerically comparing that the current queue position is less than
|
|
last_pos_said can only be done after at least one announcement has been
|
|
made, otherwise last_pos_said is at the default (0).
|
|
|
|
Fixes: #1386
|
|
|
|
#### sorcery: Prevent duplicate objects and ensure missing objects are created on u..
|
|
Author: Alexei Gradinari
|
|
Date: 2025-07-07
|
|
|
|
This patch resolves two issues in Sorcery objectset handling with multiple
|
|
backends:
|
|
|
|
1. Prevent duplicate objects:
|
|
When an object exists in more than one backend (e.g., a contact in both
|
|
'astdb' and 'realtime'), the objectset previously returned multiple instances
|
|
of the same logical object. This caused logic failures in components like the
|
|
PJSIP registrar, where duplicate contact entries led to overcounting and
|
|
incorrect deletions, when max_contacts=1 and remove_existing=yes.
|
|
|
|
This patch ensures only one instance of an object with a given key is added
|
|
to the objectset, avoiding these duplicate-related side effects.
|
|
|
|
2. Ensure missing objects are created:
|
|
When using multiple writable backends, a temporary backend failure can lead
|
|
to objects missing permanently from that backend.
|
|
Currently, .update() silently fails if the object is not present,
|
|
and no .create() is attempted.
|
|
This results in inconsistent state across backends (e.g. astdb vs. realtime).
|
|
|
|
This patch introduces a new global option in sorcery.conf:
|
|
[general]
|
|
update_or_create_on_update_miss = yes|no
|
|
|
|
Default: no (preserves existing behavior).
|
|
|
|
When enabled: if .update() fails with no data found, .create() is attempted
|
|
in that backend. This ensures that objects missing due to temporary backend
|
|
outages are re-synchronized once the backend is available again.
|
|
|
|
Added a new CLI command:
|
|
sorcery show settings
|
|
Displays global Sorcery settings, including the current value of
|
|
update_or_create_on_update_miss.
|
|
|
|
Updated tests to validate both flag enabled/disabled behavior.
|
|
|
|
Fixes: #1289
|
|
|
|
UserNote: Users relying on Sorcery multiple writable backends configurations
|
|
(e.g., astdb + realtime) may now enable update_or_create_on_update_miss = yes
|
|
in sorcery.conf to ensure missing objects are recreated after temporary backend
|
|
failures. Default behavior remains unchanged unless explicitly enabled.
|
|
|
|
|
|
#### sig_analog: Skip Caller ID spill if usecallerid=no.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-25
|
|
|
|
If Caller ID is disabled for an FXS port, then we should not send any
|
|
Caller ID spill on the line, as we have no Caller ID information that
|
|
we can/should be sending.
|
|
|
|
Resolves: #1394
|
|
|
|
#### chan_dahdi: Fix erroneously persistent dialmode.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-18
|
|
|
|
It is possible to modify the dialmode setting in the chan_dahdi/sig_analog
|
|
private using the CHANNEL function, to modify it during calls. However,
|
|
it was not being reset between calls, meaning that if, for example, tone
|
|
dialing was disabled, it would never work again unless explicitly enabled.
|
|
|
|
This fixes the setting by pairing it with a "perm" version of the setting,
|
|
as a few other features have, so that it can be reset to the permanent
|
|
setting between calls. The documentation is also clarified to explain
|
|
the interaction of this setting and the digitdetect setting more clearly.
|
|
|
|
Resolves: #1378
|
|
|
|
#### chan_websocket: Allow additional URI parameters to be added to the outgoing URI.
|
|
Author: George Joseph
|
|
Date: 2025-08-13
|
|
|
|
* Added a new option to the WebSocket dial string to capture the additional
|
|
URI parameters.
|
|
* Added a new API ast_uri_verify_encoded() that verifies that a string
|
|
either doesn't need URI encoding or that it has already been encoded.
|
|
* Added a new API ast_websocket_client_add_uri_params() to add the params
|
|
to the client websocket session.
|
|
* Added XML documentation that will show up with `core show application Dial`
|
|
that shows how to use it.
|
|
|
|
Resolves: #1352
|
|
|
|
UserNote: A new WebSocket channel driver option `v` has been added to the
|
|
Dial application that allows you to specify additional URI parameters on
|
|
outgoing connections. Run `core show application Dial` from the Asterisk CLI
|
|
to see how to use it.
|
|
|
|
|
|
#### chan_websocket: Fix buffer overrun when processing TEXT websocket frames.
|
|
Author: George Joseph
|
|
Date: 2025-08-19
|
|
|
|
ast_websocket_read() receives data into a fixed 64K buffer then continually
|
|
reallocates a final buffer that, after all continuation frames have been
|
|
received, is the exact length of the data received and returns that to the
|
|
caller. process_text_message() in chan_websocket was attempting to set a
|
|
NULL terminator on the received payload assuming the payload buffer it
|
|
received was the large 64K buffer. The assumption was incorrect so when it
|
|
tried to set a NULL terminator on the payload, it could, depending on the
|
|
state of the heap at the time, cause heap corruption.
|
|
|
|
process_text_message() now allocates its own payload_len + 1 sized buffer,
|
|
copies the payload received from ast_websocket_read() into it then NULL
|
|
terminates it prevent the possibility of the overrun and corruption.
|
|
|
|
Resolves: #1384
|
|
|
|
#### sig_analog: Fix SEGV due to calling strcmp on NULL.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-18
|
|
|
|
Add an additional check to guard against the channel application being
|
|
NULL.
|
|
|
|
Resolves: #1380
|
|
|
|
#### ARI: Add command to indicate progress to a channel
|
|
Author: Sven Kube
|
|
Date: 2025-07-30
|
|
|
|
Adds an ARI command to send a progress indication to a channel.
|
|
|
|
DeveloperNote: A new ARI endpoint is available at `/channels/{channelId}/progress` to indicate progress to a channel.
|
|
|
|
#### dsp.c: Improve debug logging in tone_detect().
|
|
Author: Naveen Albert
|
|
Date: 2025-08-15
|
|
|
|
The debug logging during DSP processing has always been kind
|
|
of overwhelming and annoying to troubleshoot. Simplify and
|
|
improve the logging in a few ways to aid DSP debugging:
|
|
|
|
* If we had a DSP hit, don't also emit the previous debug message that
|
|
was always logged. It is duplicated by the hit message, so this can
|
|
reduce the number of debug messages during detection by 50%.
|
|
* Include the hit count and required number of hits in the message so
|
|
on partial detections can be more easily troubleshot.
|
|
* Use debug level 9 for hits instead of 10, so we can focus on hits
|
|
without all the noise from the per-frame debug message.
|
|
* 1-index the hit count in the debug messages. On the first hit, it
|
|
currently logs '0', just as when we are not detecting anything,
|
|
which can be confusing.
|
|
|
|
Resolves: #1375
|
|
|
|
#### res_stasis_device_state: Fix delete ARI Devicestates after asterisk restart.
|
|
Author: Jose Lopes
|
|
Date: 2025-07-30
|
|
|
|
After an asterisk restart, the deletion of ARI Devicestates didn't
|
|
return error, but the devicestate was not deleted.
|
|
Found a typo on populate_cache function that created wrong cache for
|
|
device states.
|
|
This bug caused wrong assumption that devicestate didn't exist,
|
|
since it was not in cache, so deletion didn't returned error.
|
|
|
|
Fixes: #1327
|
|
|
|
#### app_chanspy: Add option to not automatically answer channel.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-13
|
|
|
|
Add an option for ChanSpy and ExtenSpy to not answer the channel
|
|
automatically. Most applications that auto-answer by default
|
|
already have an option to disable this behavior if unwanted.
|
|
|
|
Resolves: #1358
|
|
|
|
UserNote: ChanSpy and ExtenSpy can now be configured to not
|
|
automatically answer the channel by using the 'N' option.
|
|
|
|
|
|
#### xmldoc.c: Fix rendering of CLI output.
|
|
Author: George Joseph
|
|
Date: 2025-08-14
|
|
|
|
If you do a `core show application Dial`, you'll see it's kind of a mess.
|
|
Indents are wrong is some places, examples are printed in black which makes
|
|
them invisible on most terminals, and the lack of line breaks in some cases
|
|
makes it hard to follow.
|
|
|
|
* Fixed the rendering of examples so they are indented properly and changed
|
|
the color so they can be seen.
|
|
* There is now a line break before each option.
|
|
* Options are now printed on their own line with all option content indented
|
|
below them.
|
|
|
|
Example from Dial before fixes:
|
|
```
|
|
Example: Dial 555-1212 on first available channel in group 1, searching
|
|
from highest to lowest
|
|
|
|
Example: Ringing FXS channel 4 with ring cadence 2
|
|
|
|
Example: Dial 555-1212 on channel 3 and require answer confirmation
|
|
|
|
...
|
|
|
|
O([mode]):
|
|
mode - With <mode> either not specified or set to '1', the originator
|
|
hanging up will cause the phone to ring back immediately.
|
|
- With <mode> set to '2', when the operator flashes the trunk, it will ring
|
|
their phone back.
|
|
Enables *operator services* mode. This option only works when bridging a DAHDI
|
|
channel to another DAHDI channel only. If specified on non-DAHDI interfaces, it
|
|
will be ignored. When the destination answers (presumably an operator services
|
|
station), the originator no longer has control of their line. They may hang up,
|
|
but the switch will not release their line until the destination party (the
|
|
operator) hangs up.
|
|
|
|
p: This option enables screening mode. This is basically Privacy mode
|
|
without memory.
|
|
```
|
|
|
|
After:
|
|
```
|
|
Example: Dial 555-1212 on first available channel in group 1, searching
|
|
from highest to lowest
|
|
|
|
same => n,Dial(DAHDI/g1/5551212)
|
|
|
|
Example: Ringing FXS channel 4 with ring cadence 2
|
|
|
|
same => n,Dial(DAHDI/4r2)
|
|
|
|
Example: Dial 555-1212 on channel 3 and require answer confirmation
|
|
|
|
same => n,Dial(DAHDI/3c/5551212)
|
|
|
|
...
|
|
|
|
O([mode]):
|
|
mode - With <mode> either not specified or set to '1', the originator
|
|
hanging up will cause the phone to ring back immediately.
|
|
With <mode> set to '2', when the operator flashes the trunk, it will
|
|
ring their phone back.
|
|
Enables *operator services* mode. This option only works when bridging
|
|
a DAHDI channel to another DAHDI channel only. If specified on
|
|
non-DAHDI interfaces, it will be ignored. When the destination answers
|
|
(presumably an operator services station), the originator no longer has
|
|
control of their line. They may hang up, but the switch will not
|
|
release their line until the destination party (the operator) hangs up.
|
|
|
|
p:
|
|
This option enables screening mode. This is basically Privacy mode
|
|
without memory.
|
|
```
|
|
|
|
There are still things we can do to make this more readable but this is a
|
|
start.
|
|
|
|
|
|
#### func_frame_drop: Add debug messages for dropped frames.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-14
|
|
|
|
Add debug messages in scenarios where frames that are usually processed
|
|
are dropped or skipped.
|
|
|
|
Resolves: #1371
|
|
|
|
#### test_res_prometheus: Fix compilation failure on Debian 13.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-14
|
|
|
|
curl_easy_setopt expects long types, so be explicit.
|
|
|
|
Resolves: #1369
|
|
|
|
#### func_frame_drop: Handle allocation failure properly.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-14
|
|
|
|
Handle allocation failure and simplify the allocation using asprintf.
|
|
|
|
Resolves: #1366
|
|
|
|
#### pbx_lua.c: segfault when pass null data to term_color function
|
|
Author: Alexey Khabulyak
|
|
Date: 2025-08-14
|
|
|
|
This can be reproduced under certain curcomstences.
|
|
For example: call app.playback from lua with invalid data: app.playback({}).
|
|
pbx_lua.c will try to get data for this playback using lua_tostring function.
|
|
This function returs NULL for everything but strings and numbers.
|
|
Then, it calls term_color with NULL data.
|
|
term_color function can call(if we don't use vt100 compat term)
|
|
ast_copy_string with NULL inbuf which cause segfault. bt example:
|
|
ast_copy_string (size=8192, src=0x0, dst=0x7fe44b4be8b0)
|
|
at /usr/src/asterisk/asterisk-20.11.0/include/asterisk/strings.h:412
|
|
|
|
Resolves: https://github.com/asterisk/asterisk/issues/1363
|
|
|
|
#### bridge.c: Obey BRIDGE_NOANSWER variable to skip answering channel.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-14
|
|
|
|
If the BRIDGE_NOANSWER variable is set on a channel, it is not supposed
|
|
to answer when another channel bridges to it using Bridge(), and this is
|
|
checked when ast_bridge_call* is called. However, another path exists
|
|
(bridge_exec -> ast_bridge_add_channel) where this variable was not
|
|
checked and channels would be answered. We now check the variable there.
|
|
|
|
Resolves: #401
|
|
Resolves: #1364
|
|
|
|
#### res_rtp_asterisk: Don't send RTP before DTLS has negotiated.
|
|
Author: Ben Ford
|
|
Date: 2025-08-04
|
|
|
|
There was no check in __rtp_sendto that prevented Asterisk from sending
|
|
RTP before DTLS had finished negotiating. This patch adds logic to do
|
|
so.
|
|
|
|
Fixes: #1260
|
|
|
|
#### app_dial.c: Moved channel lock to prevent deadlock
|
|
Author: Alexey Khabulyak
|
|
Date: 2025-08-04
|
|
|
|
It's reproducible with pbx_lua, not regular dialplan.
|
|
|
|
deadlock description:
|
|
1. asterisk locks a channel
|
|
2. calls function onedigit_goto
|
|
3. calls ast_goto_if_exists funciton
|
|
4. checks ast_exists_extension -> pbx_extension_helper
|
|
5. pbx_extension_helper calls pbx_find_extension
|
|
6. Then asterisk starts autoservice in a new thread
|
|
7. autoservice run tries to lock the channel again
|
|
|
|
Because our channel is locked already, autoservice can't lock.
|
|
Autoservice can't lock -> autoservice stop is waiting forever.
|
|
onedigit_goto waits for autoservice stop.
|
|
|
|
Resolves: https://github.com/asterisk/asterisk/issues/1335
|
|
|
|
#### res_pjsip_diversion: resolve race condition between Diversion header processin..
|
|
Author: Mike Bradeen
|
|
Date: 2025-08-07
|
|
|
|
Based on the firing order of the PJSIP call-backs on a redirect, it was possible for
|
|
the Diversion header to not be included in the outgoing 181 response to the UAC and
|
|
the INVITE to the UAS.
|
|
|
|
This change moves the Diversion header processing to an earlier PJSIP callback while also
|
|
preventing the corresponding update that can cause a duplicate 181 response when processing
|
|
the header at that time.
|
|
|
|
Resolves: #1349
|
|
|
|
#### file.c: with "sounds_search_custom_dir = yes", search "custom" directory
|
|
Author: Allan Nathanson
|
|
Date: 2025-08-10
|
|
|
|
With `sounds_search_custom_dir = yes`, we are supposed to search for sounds
|
|
in the `AST_DATA_DIR/sounds/custom` directory before searching the normal
|
|
directories. Unfortunately, a recent change
|
|
(https://github.com/asterisk/asterisk/pull/1172) had a typo resulting in
|
|
the "custom" directory not being searched. This change restores this
|
|
expected behavior.
|
|
|
|
Resolves: #1353
|
|
|
|
#### cel: Add STREAM_BEGIN, STREAM_END and DTMF event types.
|
|
Author: Sperl Viktor
|
|
Date: 2025-06-30
|
|
|
|
Fixes: #1280
|
|
|
|
UserNote: Enabling the tracking of the
|
|
STREAM_BEGIN and the STREAM_END event
|
|
types in cel.conf will log media files and
|
|
music on hold played to each channel.
|
|
The STREAM_BEGIN event's extra field will
|
|
contain a JSON with the file details (path,
|
|
format and language), or the class name, in
|
|
case of music on hold is played. The DTMF
|
|
event's extra field will contain a JSON with
|
|
the digit and the duration in milliseconds.
|
|
|
|
|
|
#### channelstorage_cpp_map_name_id.cc: Refactor iterators for thread-safety.
|
|
Author: George Joseph
|
|
Date: 2025-07-30
|
|
|
|
The fact that deleting an object from a map invalidates any iterator
|
|
that happens to currently point to that object was overlooked in the initial
|
|
implementation. Unfortunately, there's no way to detect that an iterator
|
|
has been invalidated so the result was an occasional SEGV triggered by modules
|
|
like app_chanspy that opens an iterator and can keep it open for a long period
|
|
of time. The new implementation doesn't keep the underlying C++ iterator
|
|
open across calls to ast_channel_iterator_next() and uses a read lock
|
|
on the map to ensure that, even for the few microseconds we use the
|
|
iterator, another thread can't delete a channel from under it. Even with
|
|
this change, the iterators are still WAY faster than the ao2_legacy
|
|
storage driver.
|
|
|
|
Full details about the new implementation are located in the comments for
|
|
iterator_next() in channelstorage_cpp_map_name_id.cc.
|
|
|
|
Resolves: #1309
|
|
|
|
#### res_srtp: Add menuselect options to enable AES_192, AES_256 and AES_GCM
|
|
Author: George Joseph
|
|
Date: 2025-08-05
|
|
|
|
UserNote: Options are now available in the menuselect "Resource Modules"
|
|
category that allow you to enable the AES_192, AES_256 and AES_GCM
|
|
cipher suites in res_srtp. Of course, libsrtp and OpenSSL must support
|
|
them but modern versions do. Previously, the only way to enable them was
|
|
to set the CFLAGS environment variable when running ./configure.
|
|
The default setting is to disable them preserving existing behavior.
|
|
|
|
|
|
#### cdr: add CANCEL dispostion in CDR
|
|
Author: zhou_jiajian
|
|
Date: 2025-07-24
|
|
|
|
In the original implementation, both CANCEL and NO ANSWER states were
|
|
consolidated under the NO ANSWER disposition. This patch introduces a
|
|
separate CANCEL disposition, with an optional configuration switch to
|
|
enable this new disposition.
|
|
|
|
Resolves: #1323
|
|
|
|
UserNote: A new CDR option "canceldispositionenabled" has been added
|
|
that when set to true, the NO ANSWER disposition will be split into
|
|
two dispositions: CANCEL and NO ANSWER. The default value is 'no'
|
|
|
|
|
|
#### func_curl: Allow auth methods to be set.
|
|
Author: Naveen Albert
|
|
Date: 2025-08-01
|
|
|
|
Currently the CURL function only supports Basic Authentication,
|
|
the default auth method in libcurl. Add an option that also
|
|
allows enabling digest authentication.
|
|
|
|
Resolves: #1332
|
|
|
|
UserNote: The httpauth field in CURLOPT now allows the authentication
|
|
methods to be set.
|
|
|
|
|
|
#### options: Change ast_options from ast_flags to ast_flags64.
|
|
Author: George Joseph
|
|
Date: 2025-07-21
|
|
|
|
DeveloperNote: The 32-bit ast_options has no room left to accomodate new
|
|
options and so has been converted to an ast_flags64 structure. All internal
|
|
references to ast_options have been updated to use the 64-bit flag
|
|
manipulation macros. External module references to the 32-bit ast_options
|
|
should continue to work on little-endian systems because the
|
|
least-significant bytes of a 64 bit integer will be in the same location as a
|
|
32-bit integer. Because that's not the case on big-endian systems, we've
|
|
swapped the bytes in the flags manupulation macros on big-endian systems
|
|
so external modules should still work however you are encouraged to test.
|
|
|
|
|
|
#### res_config_odbc: Prevent Realtime fallback on record-not-found (SQL_NO_DATA)
|
|
Author: Alexei Gradinari
|
|
Date: 2025-07-15
|
|
|
|
This patch fixes an issue in the ODBC Realtime engine where Asterisk incorrectly
|
|
falls back to the next configured backend when the current one returns
|
|
SQL_NO_DATA (i.e., no record found).
|
|
This is a logical error and performance risk in multi-backend configurations.
|
|
|
|
Solution:
|
|
Introduced CONFIG_RT_NOT_FOUND ((void *)-1) as a special return marker.
|
|
ODBC Realtime backend now return CONFIG_RT_NOT_FOUND when no data is found.
|
|
Core engine stops iterating on this marker, avoiding unnecessary fallback.
|
|
|
|
Notes:
|
|
Other Realtime backends (PostgreSQL, LDAP, etc.) can be updated similarly.
|
|
This patch only covers ODBC.
|
|
|
|
Fixes: #1305
|
|
|
|
#### resource_channels.c: Don't call ast_channel_get_by_name on empty optional argu..
|
|
Author: Sven Kube
|
|
Date: 2025-07-30
|
|
|
|
`ast_ari_channels_create` and `ast_ari_channels_dial` called the
|
|
`ast_channel_get_by_name` function with optional arguments. Since
|
|
8f1982c4d6, this function logs an error for empty channel names.
|
|
This commit adds checks for empty optional arguments that are used
|
|
to call `ast_channel_get_by_name` to prevent these error logs.
|
|
|
|
|
|
#### app_agent_pool: Remove documentation for removed option.
|
|
Author: Naveen Albert
|
|
Date: 2025-07-28
|
|
|
|
The already-deprecated "password" option for the AGENT function was
|
|
removed in commit d43b17a872e8227aa8a9905a21f90bd48f9d5348 for
|
|
Asterisk 12, but the documentation for it wasn't removed then.
|
|
|
|
Resolves: #1321
|
|
|
|
#### pbx.c: When the AST_SOFTHANGUP_ASYNCGOTO flag is set, pbx_extension_helper sho..
|
|
Author: Tinet-mucw
|
|
Date: 2025-07-22
|
|
|
|
Under certain circumstances the context/extens/prio are set in the ast_async_goto, for example action Redirect.
|
|
In the situation that action Redirect is broken by pbx_extension_helper this info is changed.
|
|
This will cause the current dialplan location to be executed twice.
|
|
In other words, the Redirect action does not take effect.
|
|
|
|
Resolves: #1315
|
|
|
|
#### res_agi: Increase AGI command buffer size from 2K to 8K
|
|
Author: Sperl Viktor
|
|
Date: 2025-07-22
|
|
|
|
Fixes: #1317
|
|
|
|
#### ast_tls_cert: Make certificate validity configurable.
|
|
Author: Naveen Albert
|
|
Date: 2025-07-16
|
|
|
|
Currently, the ast_tls_cert script is hardcoded to produce certificates
|
|
with a validity of 365 days, which is not generally desirable for self-
|
|
signed certificates. Make this parameter configurable.
|
|
|
|
Resolves: #1307
|
|
|
|
#### cdr.c: Set tenantid from party_a->base instead of chan->base.
|
|
Author: George Joseph
|
|
Date: 2025-07-17
|
|
|
|
The CDR tenantid was being set in cdr_object_alloc from the channel->base
|
|
snapshot. Since this happens at channel creation before the dialplan is even
|
|
reached, calls to `CHANNEL(tenantid)=<something>` in the dialplan were being
|
|
ignored. Instead we now take tenantid from party_a when
|
|
cdr_object_create_public_records() is called which is after the call has
|
|
ended and all channel snapshots rebuilt. This is exactly how accountcode
|
|
and amaflags, which can also be set in tha dialplpan, are handled.
|
|
|
|
Resolves: #1259
|
|
|
|
#### app_mixmonitor: Update the documentation concerning the "D" option.
|
|
Author: George Joseph
|
|
Date: 2025-07-16
|
|
|
|
When using the "D" option to output interleaved audio, the file extension
|
|
must be ".raw". That info wasn't being properly rendered in the markdown
|
|
and HTML on the documentation site. The XML was updated to move the
|
|
note in the option section to a warning in the description.
|
|
|
|
Resolves: #1269
|
|
|
|
#### sig_analog: Properly handle STP, ST2P, and ST3P for fgccamamf.
|
|
Author: Naveen Albert
|
|
Date: 2025-07-14
|
|
|
|
Previously, we were only using # (ST) as a terminator, and not handling
|
|
A (STP), B (ST2P), or C (ST3P), which erroneously led to it being
|
|
treated as part of the dialed number. Parse any of these as the start
|
|
digit.
|
|
|
|
Resolves: #1301
|
|
|
|
#### chan_websocket: Reset frame_queue_length to 0 after FLUSH_MEDIA
|
|
Author: kodokaii
|
|
Date: 2025-07-03
|
|
|
|
In the WebSocket channel driver, the FLUSH_MEDIA command clears all frames from
|
|
the queue but does not reset the frame_queue_length counter.
|
|
|
|
As a result, the driver incorrectly thinks the queue is full after flushing,
|
|
which prevents new multimedia frames from being sent, especially after multiple
|
|
flush commands.
|
|
|
|
This fix sets frame_queue_length to 0 after flushing, ensuring the queue state
|
|
is consistent with its actual content.
|
|
|
|
Fixes: #1304
|
|
|
|
#### chan_pjsip.c: Change SSRC after media source change
|
|
Author: Martin Tomec
|
|
Date: 2025-06-25
|
|
|
|
When the RTP media source changes, such as after a blind transfer, the new source introduces a discontinuous timestamp. According to RFC 3550, Section 5.1, an RTP stream's timestamp for a given SSRC must increment monotonically and linearly.
|
|
To comply with the standard and avoid a large timestamp jump on the existing SSRC, a new SSRC is generated for the new media stream.
|
|
This change resolves known interoperability issues with certain SBCs (like Sonus/Ribbon) that stop forwarding media when they detect such a timestamp violation. This code uses the existing implementation from chan_sip.
|
|
|
|
Resolves: #927
|
|
|
|
#### Media over Websocket Channel Driver
|
|
Author: George Joseph
|
|
Date: 2025-04-28
|
|
|
|
* Created chan_websocket which can exchange media over both inbound and
|
|
outbound websockets which the driver will frame and time.
|
|
See http://s.asterisk.net/mow for more information.
|
|
|
|
* res_http_websocket: Made defines for max message size public and converted
|
|
a few nuisance verbose messages to debugs.
|
|
|
|
* main/channel.c: Changed an obsolete nuisance error to a debug.
|
|
|
|
* ARI channels: Updated externalMedia to include chan_websocket as a supported
|
|
transport.
|
|
|
|
UserNote: A new channel driver "chan_websocket" is now available. It can
|
|
exchange media over both inbound and outbound websockets and will both frame
|
|
and re-time the media it receives.
|
|
See http://s.asterisk.net/mow for more information.
|
|
|
|
UserNote: The ARI channels/externalMedia API now includes support for the
|
|
WebSocket transport provided by chan_websocket.
|
|
|
|
|
|
#### bundled_pjproject: Avoid deadlock between transport and transaction
|
|
Author: Stanislav Abramenkov
|
|
Date: 2025-07-01
|
|
|
|
Backport patch from upstream
|
|
* Avoid deadlock between transport and transaction
|
|
https://github.com/pjsip/pjproject/commit/edde06f261ac
|
|
|
|
Issue described in
|
|
https://github.com/pjsip/pjproject/issues/4442
|
|
|
|
|
|
#### utils.h: Add rounding to float conversion to int.
|
|
Author: mkmer
|
|
Date: 2025-03-23
|
|
|
|
Quote from an audio engineer NR9V:
|
|
There is a minor issue of a small amount of crossover distortion though as a result of `ast_slinear_saturated_multiply_float()` not rounding the float. This could result in some quiet but potentially audible distortion artifacts in lower volume parts of the signal. If you have for example a sign wave function with a max amplitude of just a few samples, all samples between -1 and 1 will be truncated to zero, resulting in the waveform no longer being a sine wave and in harmonic distortion.
|
|
|
|
Resolves: #1176
|
|
|
|
#### pbx.c: when set flag AST_SOFTHANGUP_ASYNCGOTO, ast_explicit_goto should return..
|
|
Author: Tinet-mucw
|
|
Date: 2025-06-18
|
|
|
|
Under certain circumstances the context/extens/prio are set in the ast_async_goto, for example action Redirect.
|
|
In the situation that action Redirect is broken by GotoIf this info is changed.
|
|
that will causes confusion in dialplan execution.
|
|
|
|
Resolves: #1273
|
|
|
|
#### res_musiconhold.c: Ensure we're always locked around music state access.
|
|
Author: Sean Bright
|
|
Date: 2025-04-08
|
|
|
|
|
|
#### res_musiconhold.c: Annotate when the channel is locked.
|
|
Author: Sean Bright
|
|
Date: 2025-04-08
|
|
|
|
|
|
#### res_musiconhold: Appropriately lock channel during start.
|
|
Author: Jaco Kroon
|
|
Date: 2024-12-19
|
|
|
|
This relates to #829
|
|
|
|
This doesn't sully solve the Ops issue, but it solves the specific crash
|
|
there. Further PRs to follow.
|
|
|
|
In the specific crash the generator was still under construction when
|
|
moh was being stopped, which then proceeded to close the stream whilst
|
|
it was still in use.
|
|
|
|
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
|
|
|