]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Update for 21.11.0-rc1 releases/21-pre-reorder
authorAsterisk Development Team <asteriskteam@digium.com>
Wed, 10 Sep 2025 20:02:52 +0000 (20:02 +0000)
committerAsterisk Development Team <asteriskteam@digium.com>
Wed, 10 Sep 2025 20:02:52 +0000 (20:02 +0000)
.version
CHANGES.html
CHANGES.md
ChangeLogs/ChangeLog-21.11.0-rc1.html [new file with mode: 0644]
ChangeLogs/ChangeLog-21.11.0-rc1.md [new file with mode: 0644]
README.html
README.md

index e9832d38f338664e4f62ec48a35ece6f3dcbbdd1..99ff3a2adc23b782cebc199faf264ac2019282e7 100644 (file)
--- a/.version
+++ b/.version
@@ -1 +1 @@
-21.10.2
+21.11.0-rc1
index c8800b2affe067e9579447f0dd903cb66e865cd9..bc89baf3def614f231441908331907013e8ec49c 120000 (symlink)
@@ -1 +1 @@
-ChangeLogs/ChangeLog-21.10.2.html
\ No newline at end of file
+ChangeLogs/ChangeLog-21.11.0-rc1.html
\ No newline at end of file
index 8a250275d170a4e22ac2464b14a8571cb49a7b44..1148846ba7f55a49ed477b2c10bc93387ed16352 120000 (symlink)
@@ -1 +1 @@
-ChangeLogs/ChangeLog-21.10.2.md
\ No newline at end of file
+ChangeLogs/ChangeLog-21.11.0-rc1.md
\ No newline at end of file
diff --git a/ChangeLogs/ChangeLog-21.11.0-rc1.html b/ChangeLogs/ChangeLog-21.11.0-rc1.html
new file mode 100644 (file)
index 0000000..9fe2de1
--- /dev/null
@@ -0,0 +1,1000 @@
+<html><head><title>ChangeLog for asterisk-21.11.0-rc1</title></head><body>
+<h2>Change Log for Release asterisk-21.11.0-rc1</h2>
+<h3>Links:</h3>
+<ul>
+<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.11.0-rc1.html">Full ChangeLog</a>  </li>
+<li><a href="https://github.com/asterisk/asterisk/compare/21.10.2...21.11.0-rc1">GitHub Diff</a>  </li>
+<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.11.0-rc1.tar.gz">Tarball</a>  </li>
+<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a>  </li>
+</ul>
+<h3>Summary:</h3>
+<ul>
+<li>Commits: 51</li>
+<li>Commit Authors: 22</li>
+<li>Issues Resolved: 37</li>
+<li>Security Advisories Resolved: 0</li>
+</ul>
+<h3>User Notes:</h3>
+<ul>
+<li>
+<h4>app_queue.c: Add new global 'log_unpause_on_reason_change'</h4>
+<p>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.</p>
+</li>
+<li>
+<h4>pbx_builtins: Allow custom tone for WaitExten.</h4>
+<p>The tone used while waiting for digits in WaitExten
+  can now be overridden by specifying an argument for the 'd'
+  option.</p>
+</li>
+<li>
+<h4>res_tonedetect: Add option for TONE_DETECT detection to auto stop.</h4>
+<p>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.</p>
+</li>
+<li>
+<h4>sorcery: Prevent duplicate objects and ensure missing objects are created on u..</h4>
+<p>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.</p>
+</li>
+<li>
+<h4>chan_websocket: Allow additional URI parameters to be added to the outgoing URI.</h4>
+<p>A new WebSocket channel driver option <code>v</code> has been added to the
+  Dial application that allows you to specify additional URI parameters on
+  outgoing connections. Run <code>core show application Dial</code> from the Asterisk CLI
+  to see how to use it.</p>
+</li>
+<li>
+<h4>app_chanspy: Add option to not automatically answer channel.</h4>
+<p>ChanSpy and ExtenSpy can now be configured to not
+  automatically answer the channel by using the 'N' option.</p>
+</li>
+<li>
+<h4>cel: Add STREAM_BEGIN, STREAM_END and DTMF event types.</h4>
+<p>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.</p>
+</li>
+<li>
+<h4>res_srtp: Add menuselect options to enable AES_192, AES_256 and AES_GCM</h4>
+<p>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.</p>
+</li>
+<li>
+<h4>cdr: add CANCEL dispostion in CDR</h4>
+<p>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'</p>
+</li>
+<li>
+<h4>func_curl: Allow auth methods to be set.</h4>
+<p>The httpauth field in CURLOPT now allows the authentication
+  methods to be set.</p>
+</li>
+<li>
+<h4>Media over Websocket Channel Driver</h4>
+<p>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</p>
+</li>
+</ul>
+<h3>Upgrade Notes:</h3>
+<h3>Developer Notes:</h3>
+<ul>
+<li>
+<h4>ARI: Add command to indicate progress to a channel</h4>
+<p>A new ARI endpoint is available at <code>/channels/{channelId}/progress</code> to indicate progress to a channel.</p>
+</li>
+<li>
+<h4>options:  Change ast_options from ast_flags to ast_flags64.</h4>
+<p>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.</p>
+</li>
+</ul>
+<h3>Commit Authors:</h3>
+<ul>
+<li>Alexei Gradinari: (2)</li>
+<li>Alexey Khabulyak: (2)</li>
+<li>Allan Nathanson: (1)</li>
+<li>Artem Umerov: (1)</li>
+<li>Ben Ford: (1)</li>
+<li>George Joseph: (9)</li>
+<li>Igor Goncharovsky: (2)</li>
+<li>Jaco Kroon: (1)</li>
+<li>Joe Garlick: (1)</li>
+<li>Jose Lopes: (1)</li>
+<li>Kodokaii: (1)</li>
+<li>Martin Tomec: (1)</li>
+<li>Mike Bradeen: (1)</li>
+<li>Mkmer: (1)</li>
+<li>Naveen Albert: (15)</li>
+<li>Sean Bright: (2)</li>
+<li>Sperl Viktor: (2)</li>
+<li>Stanislav Abramenkov: (1)</li>
+<li>Stuart Henderson: (1)</li>
+<li>Sven Kube: (2)</li>
+<li>Tinet-Mucw: (2)</li>
+<li>Zhou_jiajian: (1)</li>
+</ul>
+<h2>Issue and Commit Detail:</h2>
+<h3>Closed Issues:</h3>
+<ul>
+<li>401: [bug]: app_dial: Answer Gosub option passthrough regression</li>
+<li>927: [bug]: no audio when media source changed during the call</li>
+<li>1176: [bug]: ast_slinear_saturated_multiply_float produces potentially audible distortion artifacts</li>
+<li>1259: [bug]: New TenantID feature doesn't seem to set CDR for incoming calls</li>
+<li>1260: [bug]: Asterisk sends RTP audio stream before ICE/DTLS completes</li>
+<li>1269: [bug]: MixMonitor with D option produces corrupt file</li>
+<li>1273: [bug]: When executed with GotoIf, the action Redirect does not take effect and causes confusion in dialplan execution.</li>
+<li>1280: [improvement]: logging playback of audio per channel</li>
+<li>1289: [bug]: sorcery - duplicate objects from multiple backends and backend divergence on update</li>
+<li>1301: [bug]: sig_analog: fgccamamf doesn't handle STP, STP2, or STP3</li>
+<li>1304: [bug]: FLUSH_MEDIA does not reset frame_queue_length in WebSocket channel</li>
+<li>1305: [bug]: Realtime incorrectly falls back to next backend on record-not-found (SQL_NO_DATA), causing incorrect behavior and delay</li>
+<li>1307: [improvement]: ast_tls_cert: Allow certificate validity to be configurable</li>
+<li>1309: [bug]: Crash with C++ alternative storage backend enabled</li>
+<li>1315:  [bug]: When executed with dialplan, the action Redirect does not take effect.</li>
+<li>1317: [bug]: AGI command buffer overflow with long variables</li>
+<li>1321: [improvement]: app_agent_pool: Remove obsolete documentation</li>
+<li>1323: [new-feature]: add CANCEL dispostion in CDR</li>
+<li>1327: [bug]: res_stasis_device_state: can't delete ARI Devicestate after asterisk restart</li>
+<li>1332: [new-feature]: func_curl: Allow auth methods to be set</li>
+<li>1349: [bug]: Race condition on redirect can cause missing Diversion header</li>
+<li>1352: [improvement]: Websocket channel with custom URI</li>
+<li>1353: [bug]: AST_DATA_DIR/sounds/custom directory not searched</li>
+<li>1358: [new-feature]: app_chanspy: Add option to not automatically answer channel</li>
+<li>1364: [bug]: bridge.c: BRIDGE_NOANSWER not always obeyed</li>
+<li>1366: [improvement]: func_frame_drop: Handle allocation failure properly</li>
+<li>1369: [bug]: test_res_prometheus: Compilation failure in devmode due to curlopts not using long type</li>
+<li>1371: [improvement]: func_frame_drop: Add debug messages for frames that can be dropped</li>
+<li>1375: [improvement]: dsp.c: Improve logging in tone_detect().</li>
+<li>1378: [bug]: chan_dahdi: dialmode feature is not properly reset between calls</li>
+<li>1380: [bug]: sig_analog: Segfault due to calling strcmp on NULL</li>
+<li>1384: [bug]: chan_websocket: asterisk crashes on hangup after STOP_MEDIA_BUFFERING command with id</li>
+<li>1386: [bug]: enabling announceposition_only_up prevents any queue position announcements</li>
+<li>1390: [improvement]: res_tonedetect: Add option to automatically end detection in TONE_DETECT</li>
+<li>1394: [improvement]: sig_analog: Skip Caller ID spill if Caller ID is disabled</li>
+<li>1396: [new-feature]: pbx_builtins: Make tone option for WaitExten configurable</li>
+<li>1401: [bug]: app_waitfornoise timeout is always less then configured because of time() usage</li>
+</ul>
+<h3>Commits By Author:</h3>
+<ul>
+<li>
+<h4>Alexei Gradinari (2):</h4>
+</li>
+<li>res_config_odbc: Prevent Realtime fallback on record-not-found (SQL_NO_DATA)</li>
+<li>
+<p>sorcery: Prevent duplicate objects and ensure missing objects are created on u..</p>
+</li>
+<li>
+<h4>Alexey Khabulyak (2):</h4>
+</li>
+<li>app_dial.c: Moved channel lock to prevent deadlock</li>
+<li>
+<p>pbx_lua.c: segfault when pass null data to term_color function</p>
+</li>
+<li>
+<h4>Allan Nathanson (1):</h4>
+</li>
+<li>
+<p>file.c: with "sounds_search_custom_dir = yes", search "custom" directory</p>
+</li>
+<li>
+<h4>Artem Umerov (1):</h4>
+</li>
+<li>
+<p>Fix missing ast_test_flag64 in extconf.c</p>
+</li>
+<li>
+<h4>Ben Ford (1):</h4>
+</li>
+<li>
+<p>res_rtp_asterisk: Don't send RTP before DTLS has negotiated.</p>
+</li>
+<li>
+<h4>George Joseph (9):</h4>
+</li>
+<li>Media over Websocket Channel Driver</li>
+<li>app_mixmonitor:  Update the documentation concerning the "D" option.</li>
+<li>cdr.c: Set tenantid from party_a-&gt;base instead of chan-&gt;base.</li>
+<li>options:  Change ast_options from ast_flags to ast_flags64.</li>
+<li>res_srtp: Add menuselect options to enable AES_192, AES_256 and AES_GCM</li>
+<li>channelstorage_cpp_map_name_id.cc: Refactor iterators for thread-safety.</li>
+<li>xmldoc.c: Fix rendering of CLI output.</li>
+<li>chan_websocket: Fix buffer overrun when processing TEXT websocket frames.</li>
+<li>
+<p>chan_websocket: Allow additional URI parameters to be added to the outgoing URI.</p>
+</li>
+<li>
+<h4>Igor Goncharovsky (2):</h4>
+</li>
+<li>app_waitforsilence.c: Use milliseconds to calculate timeout time</li>
+<li>
+<p>app_queue.c: Add new global 'log_unpause_on_reason_change'</p>
+</li>
+<li>
+<h4>Jaco Kroon (1):</h4>
+</li>
+<li>
+<p>res_musiconhold: Appropriately lock channel during start.</p>
+</li>
+<li>
+<h4>Joe Garlick (1):</h4>
+</li>
+<li>
+<p>chan_websocket.c: Add DTMF messages</p>
+</li>
+<li>
+<h4>Jose Lopes (1):</h4>
+</li>
+<li>
+<p>res_stasis_device_state: Fix delete ARI Devicestates after asterisk restart.</p>
+</li>
+<li>
+<h4>Martin Tomec (1):</h4>
+</li>
+<li>
+<p>chan_pjsip.c: Change SSRC after media source change</p>
+</li>
+<li>
+<h4>Mike Bradeen (1):</h4>
+</li>
+<li>
+<p>res_pjsip_diversion: resolve race condition between Diversion header processin..</p>
+</li>
+<li>
+<h4>Naveen Albert (15):</h4>
+</li>
+<li>sig_analog: Properly handle STP, ST2P, and ST3P for fgccamamf.</li>
+<li>ast_tls_cert: Make certificate validity configurable.</li>
+<li>app_agent_pool: Remove documentation for removed option.</li>
+<li>func_curl: Allow auth methods to be set.</li>
+<li>bridge.c: Obey BRIDGE_NOANSWER variable to skip answering channel.</li>
+<li>func_frame_drop: Handle allocation failure properly.</li>
+<li>test_res_prometheus: Fix compilation failure on Debian 13.</li>
+<li>func_frame_drop: Add debug messages for dropped frames.</li>
+<li>app_chanspy: Add option to not automatically answer channel.</li>
+<li>dsp.c: Improve debug logging in tone_detect().</li>
+<li>sig_analog: Fix SEGV due to calling strcmp on NULL.</li>
+<li>chan_dahdi: Fix erroneously persistent dialmode.</li>
+<li>sig_analog: Skip Caller ID spill if usecallerid=no.</li>
+<li>res_tonedetect: Add option for TONE_DETECT detection to auto stop.</li>
+<li>
+<p>pbx_builtins: Allow custom tone for WaitExten.</p>
+</li>
+<li>
+<h4>Sean Bright (2):</h4>
+</li>
+<li>res_musiconhold.c: Annotate when the channel is locked.</li>
+<li>
+<p>res_musiconhold.c: Ensure we're always locked around music state access.</p>
+</li>
+<li>
+<h4>Sperl Viktor (2):</h4>
+</li>
+<li>res_agi: Increase AGI command buffer size from 2K to 8K</li>
+<li>
+<p>cel: Add STREAM_BEGIN, STREAM_END and DTMF event types.</p>
+</li>
+<li>
+<h4>Stanislav Abramenkov (1):</h4>
+</li>
+<li>
+<p>bundled_pjproject: Avoid deadlock between transport and transaction</p>
+</li>
+<li>
+<h4>Stuart Henderson (1):</h4>
+</li>
+<li>
+<p>app_queue: fix comparison for announce-position-only-up</p>
+</li>
+<li>
+<h4>Sven Kube (2):</h4>
+</li>
+<li>resource_channels.c: Don't call ast_channel_get_by_name on empty optional argu..</li>
+<li>
+<p>ARI: Add command to indicate progress to a channel</p>
+</li>
+<li>
+<h4>Tinet-mucw (2):</h4>
+</li>
+<li>pbx.c: when set flag AST_SOFTHANGUP_ASYNCGOTO, ast_explicit_goto should return..</li>
+<li>
+<p>pbx.c: When the AST_SOFTHANGUP_ASYNCGOTO flag is set, pbx_extension_helper sho..</p>
+</li>
+<li>
+<h4>kodokaii (1):</h4>
+</li>
+<li>
+<p>chan_websocket: Reset frame_queue_length to 0 after FLUSH_MEDIA</p>
+</li>
+<li>
+<h4>mkmer (1):</h4>
+</li>
+<li>
+<p>utils.h: Add rounding to float conversion to int.</p>
+</li>
+<li>
+<h4>zhou_jiajian (1):</h4>
+</li>
+<li>cdr: add CANCEL dispostion in CDR</li>
+</ul>
+<h3>Commit List:</h3>
+<ul>
+<li>chan_websocket.c: Add DTMF messages</li>
+<li>app_queue.c: Add new global 'log_unpause_on_reason_change'</li>
+<li>app_waitforsilence.c: Use milliseconds to calculate timeout time</li>
+<li>Fix missing ast_test_flag64 in extconf.c</li>
+<li>pbx_builtins: Allow custom tone for WaitExten.</li>
+<li>res_tonedetect: Add option for TONE_DETECT detection to auto stop.</li>
+<li>app_queue: fix comparison for announce-position-only-up</li>
+<li>sig_analog: Skip Caller ID spill if usecallerid=no.</li>
+<li>chan_dahdi: Fix erroneously persistent dialmode.</li>
+<li>chan_websocket: Fix buffer overrun when processing TEXT websocket frames.</li>
+<li>sig_analog: Fix SEGV due to calling strcmp on NULL.</li>
+<li>ARI: Add command to indicate progress to a channel</li>
+<li>dsp.c: Improve debug logging in tone_detect().</li>
+<li>res_stasis_device_state: Fix delete ARI Devicestates after asterisk restart.</li>
+<li>app_chanspy: Add option to not automatically answer channel.</li>
+<li>xmldoc.c: Fix rendering of CLI output.</li>
+<li>func_frame_drop: Add debug messages for dropped frames.</li>
+<li>test_res_prometheus: Fix compilation failure on Debian 13.</li>
+<li>func_frame_drop: Handle allocation failure properly.</li>
+<li>pbx_lua.c: segfault when pass null data to term_color function</li>
+<li>bridge.c: Obey BRIDGE_NOANSWER variable to skip answering channel.</li>
+<li>res_rtp_asterisk: Don't send RTP before DTLS has negotiated.</li>
+<li>app_dial.c: Moved channel lock to prevent deadlock</li>
+<li>file.c: with "sounds_search_custom_dir = yes", search "custom" directory</li>
+<li>cel: Add STREAM_BEGIN, STREAM_END and DTMF event types.</li>
+<li>channelstorage_cpp_map_name_id.cc: Refactor iterators for thread-safety.</li>
+<li>res_srtp: Add menuselect options to enable AES_192, AES_256 and AES_GCM</li>
+<li>cdr: add CANCEL dispostion in CDR</li>
+<li>func_curl: Allow auth methods to be set.</li>
+<li>options:  Change ast_options from ast_flags to ast_flags64.</li>
+<li>res_config_odbc: Prevent Realtime fallback on record-not-found (SQL_NO_DATA)</li>
+<li>app_agent_pool: Remove documentation for removed option.</li>
+<li>res_agi: Increase AGI command buffer size from 2K to 8K</li>
+<li>ast_tls_cert: Make certificate validity configurable.</li>
+<li>cdr.c: Set tenantid from party_a-&gt;base instead of chan-&gt;base.</li>
+<li>app_mixmonitor:  Update the documentation concerning the "D" option.</li>
+<li>sig_analog: Properly handle STP, ST2P, and ST3P for fgccamamf.</li>
+<li>chan_websocket: Reset frame_queue_length to 0 after FLUSH_MEDIA</li>
+<li>chan_pjsip.c: Change SSRC after media source change</li>
+<li>Media over Websocket Channel Driver</li>
+<li>bundled_pjproject: Avoid deadlock between transport and transaction</li>
+<li>utils.h: Add rounding to float conversion to int.</li>
+<li>res_musiconhold.c: Ensure we're always locked around music state access.</li>
+<li>res_musiconhold.c: Annotate when the channel is locked.</li>
+<li>res_musiconhold: Appropriately lock channel during start.</li>
+</ul>
+<h3>Commit Details:</h3>
+<h4>chan_websocket.c: Add DTMF messages</h4>
+<p>Author: Joe Garlick
+  Date:   2025-09-04</p>
+<p>Added DTMF messages to the chan_websocket feature.</p>
+<p>When a user presses DTMF during a call over chan_websocket it will send a message like:
+  "DTMF_END digit:1"</p>
+<p>Resolves: https://github.com/asterisk/asterisk-feature-requests/issues/70</p>
+<h4>app_queue.c: Add new global 'log_unpause_on_reason_change'</h4>
+<p>Author: Igor Goncharovsky
+  Date:   2025-09-02</p>
+<p>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.</p>
+<p>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.</p>
+<h4>app_waitforsilence.c: Use milliseconds to calculate timeout time</h4>
+<p>Author: Igor Goncharovsky
+  Date:   2025-09-04</p>
+<p>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().</p>
+<p>Fixes: #1401</p>
+<h4>Fix missing ast_test_flag64 in extconf.c</h4>
+<p>Author: Artem Umerov
+  Date:   2025-08-29</p>
+<p>Fix missing ast_test_flag64 after https://github.com/asterisk/asterisk/commit/43bf8a4ded7a65203b766b91eaf8331a600e9d8d</p>
+<h4>pbx_builtins: Allow custom tone for WaitExten.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-25</p>
+<p>Currently, the 'd' option will play dial tone while waiting
+  for digits. Allow it to accept an argument for any tone from
+  indications.conf.</p>
+<p>Resolves: #1396</p>
+<p>UserNote: The tone used while waiting for digits in WaitExten
+  can now be overridden by specifying an argument for the 'd'
+  option.</p>
+<h4>res_tonedetect: Add option for TONE_DETECT detection to auto stop.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-28</p>
+<p>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.</p>
+<p>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.</p>
+<p>Resolves: #1390</p>
+<p>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.</p>
+<h4>app_queue: fix comparison for announce-position-only-up</h4>
+<p>Author: Stuart Henderson
+  Date:   2025-08-21</p>
+<p>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).</p>
+<p>Fixes: #1386</p>
+<h4>sorcery: Prevent duplicate objects and ensure missing objects are created on u..</h4>
+<p>Author: Alexei Gradinari
+  Date:   2025-07-07</p>
+<p>This patch resolves two issues in Sorcery objectset handling with multiple
+  backends:</p>
+<ol>
+<li>
+<p>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.</p>
+<p>This patch ensures only one instance of an object with a given key is added
+ to the objectset, avoiding these duplicate-related side effects.</p>
+</li>
+<li>
+<p>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).</p>
+<p>This patch introduces a new global option in sorcery.conf:
+   [general]
+   update_or_create_on_update_miss = yes|no</p>
+<p>Default: no (preserves existing behavior).</p>
+<p>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.</p>
+<p>Added a new CLI command:
+   sorcery show settings
+ Displays global Sorcery settings, including the current value of
+ update_or_create_on_update_miss.</p>
+<p>Updated tests to validate both flag enabled/disabled behavior.</p>
+</li>
+</ol>
+<p>Fixes: #1289</p>
+<p>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.</p>
+<h4>sig_analog: Skip Caller ID spill if usecallerid=no.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-25</p>
+<p>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.</p>
+<p>Resolves: #1394</p>
+<h4>chan_dahdi: Fix erroneously persistent dialmode.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-18</p>
+<p>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.</p>
+<p>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.</p>
+<p>Resolves: #1378</p>
+<h4>chan_websocket: Allow additional URI parameters to be added to the outgoing URI.</h4>
+<p>Author: George Joseph
+  Date:   2025-08-13</p>
+<ul>
+<li>Added a new option to the WebSocket dial string to capture the additional
+    URI parameters.</li>
+<li>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.</li>
+<li>Added a new API ast_websocket_client_add_uri_params() to add the params
+    to the client websocket session.</li>
+<li>Added XML documentation that will show up with <code>core show application Dial</code>
+    that shows how to use it.</li>
+</ul>
+<p>Resolves: #1352</p>
+<p>UserNote: A new WebSocket channel driver option <code>v</code> has been added to the
+  Dial application that allows you to specify additional URI parameters on
+  outgoing connections. Run <code>core show application Dial</code> from the Asterisk CLI
+  to see how to use it.</p>
+<h4>chan_websocket: Fix buffer overrun when processing TEXT websocket frames.</h4>
+<p>Author: George Joseph
+  Date:   2025-08-19</p>
+<p>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.</p>
+<p>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.</p>
+<p>Resolves: #1384</p>
+<h4>sig_analog: Fix SEGV due to calling strcmp on NULL.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-18</p>
+<p>Add an additional check to guard against the channel application being
+  NULL.</p>
+<p>Resolves: #1380</p>
+<h4>ARI: Add command to indicate progress to a channel</h4>
+<p>Author: Sven Kube
+  Date:   2025-07-30</p>
+<p>Adds an ARI command to send a progress indication to a channel.</p>
+<p>DeveloperNote: A new ARI endpoint is available at <code>/channels/{channelId}/progress</code> to indicate progress to a channel.</p>
+<h4>dsp.c: Improve debug logging in tone_detect().</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-15</p>
+<p>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:</p>
+<ul>
+<li>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%.</li>
+<li>Include the hit count and required number of hits in the message so
+    on partial detections can be more easily troubleshot.</li>
+<li>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.</li>
+<li>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.</li>
+</ul>
+<p>Resolves: #1375</p>
+<h4>res_stasis_device_state: Fix delete ARI Devicestates after asterisk restart.</h4>
+<p>Author: Jose Lopes
+  Date:   2025-07-30</p>
+<p>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.</p>
+<p>Fixes: #1327</p>
+<h4>app_chanspy: Add option to not automatically answer channel.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-13</p>
+<p>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.</p>
+<p>Resolves: #1358</p>
+<p>UserNote: ChanSpy and ExtenSpy can now be configured to not
+  automatically answer the channel by using the 'N' option.</p>
+<h4>xmldoc.c: Fix rendering of CLI output.</h4>
+<p>Author: George Joseph
+  Date:   2025-08-14</p>
+<p>If you do a <code>core show application Dial</code>, 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.</p>
+<ul>
+<li>Fixed the rendering of examples so they are indented properly and changed
+  the color so they can be seen.</li>
+<li>There is now a line break before each option.</li>
+<li>Options are now printed on their own line with all option content indented
+  below them.</li>
+</ul>
+<p>Example from Dial before fixes:
+  ```
+      Example: Dial 555-1212 on first available channel in group 1, searching
+      from highest to lowest</p>
+<pre><code>  Example: Ringing FXS channel 4 with ring cadence 2
+
+  Example: Dial 555-1212 on channel 3 and require answer confirmation
+</code></pre>
+<p>...</p>
+<pre><code>  O([mode]):
+      mode - With &lt;mode&gt; either not specified or set to '1', the originator
+      hanging up will cause the phone to ring back immediately.
+</code></pre>
+<ul>
+<li>
+<p>With <mode> set to '2', when the operator flashes the trunk, it will ring
+   their phone back.
+  Enables <em>operator services</em> 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>
+<p>p: This option enables screening mode. This is basically Privacy mode
+  without memory.
+  ```</p>
+</li>
+</ul>
+<p>After:
+  ```
+      Example: Dial 555-1212 on first available channel in group 1, searching
+      from highest to lowest</p>
+<pre><code>   same =&gt; n,Dial(DAHDI/g1/5551212)
+
+  Example: Ringing FXS channel 4 with ring cadence 2
+
+   same =&gt; n,Dial(DAHDI/4r2)
+
+  Example: Dial 555-1212 on channel 3 and require answer confirmation
+
+   same =&gt; n,Dial(DAHDI/3c/5551212)
+</code></pre>
+<p>...</p>
+<pre><code>  O([mode]):
+      mode - With &lt;mode&gt; either not specified or set to '1', the originator
+      hanging up will cause the phone to ring back immediately.
+      With &lt;mode&gt; 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.
+</code></pre>
+<p>```</p>
+<p>There are still things we can do to make this more readable but this is a
+  start.</p>
+<h4>func_frame_drop: Add debug messages for dropped frames.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-14</p>
+<p>Add debug messages in scenarios where frames that are usually processed
+  are dropped or skipped.</p>
+<p>Resolves: #1371</p>
+<h4>test_res_prometheus: Fix compilation failure on Debian 13.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-14</p>
+<p>curl_easy_setopt expects long types, so be explicit.</p>
+<p>Resolves: #1369</p>
+<h4>func_frame_drop: Handle allocation failure properly.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-14</p>
+<p>Handle allocation failure and simplify the allocation using asprintf.</p>
+<p>Resolves: #1366</p>
+<h4>pbx_lua.c: segfault when pass null data to term_color function</h4>
+<p>Author: Alexey Khabulyak
+  Date:   2025-08-14</p>
+<p>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</p>
+<p>Resolves: https://github.com/asterisk/asterisk/issues/1363</p>
+<h4>bridge.c: Obey BRIDGE_NOANSWER variable to skip answering channel.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-14</p>
+<p>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 -&gt; ast_bridge_add_channel) where this variable was not
+  checked and channels would be answered. We now check the variable there.</p>
+<p>Resolves: #401
+  Resolves: #1364</p>
+<h4>res_rtp_asterisk: Don't send RTP before DTLS has negotiated.</h4>
+<p>Author: Ben Ford
+  Date:   2025-08-04</p>
+<p>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.</p>
+<p>Fixes: #1260</p>
+<h4>app_dial.c: Moved channel lock to prevent deadlock</h4>
+<p>Author: Alexey Khabulyak
+  Date:   2025-08-04</p>
+<p>It's reproducible with pbx_lua, not regular dialplan.</p>
+<p>deadlock description:
+  1. asterisk locks a channel
+  2. calls function onedigit_goto
+  3. calls ast_goto_if_exists funciton
+  4. checks ast_exists_extension -&gt; 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</p>
+<p>Because our channel is locked already, autoservice can't lock.
+  Autoservice can't lock -&gt; autoservice stop is waiting forever.
+  onedigit_goto waits for autoservice stop.</p>
+<p>Resolves: https://github.com/asterisk/asterisk/issues/1335</p>
+<h4>res_pjsip_diversion: resolve race condition between Diversion header processin..</h4>
+<p>Author: Mike Bradeen
+  Date:   2025-08-07</p>
+<p>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.</p>
+<p>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.</p>
+<p>Resolves: #1349</p>
+<h4>file.c: with "sounds_search_custom_dir = yes", search "custom" directory</h4>
+<p>Author: Allan Nathanson
+  Date:   2025-08-10</p>
+<p>With <code>sounds_search_custom_dir = yes</code>, we are supposed to search for sounds
+  in the <code>AST_DATA_DIR/sounds/custom</code> 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.</p>
+<p>Resolves: #1353</p>
+<h4>cel: Add STREAM_BEGIN, STREAM_END and DTMF event types.</h4>
+<p>Author: Sperl Viktor
+  Date:   2025-06-30</p>
+<p>Fixes: #1280</p>
+<p>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.</p>
+<h4>channelstorage_cpp_map_name_id.cc: Refactor iterators for thread-safety.</h4>
+<p>Author: George Joseph
+  Date:   2025-07-30</p>
+<p>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.</p>
+<p>Full details about the new implementation are located in the comments for
+  iterator_next() in channelstorage_cpp_map_name_id.cc.</p>
+<p>Resolves: #1309</p>
+<h4>res_srtp: Add menuselect options to enable AES_192, AES_256 and AES_GCM</h4>
+<p>Author: George Joseph
+  Date:   2025-08-05</p>
+<p>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.</p>
+<h4>cdr: add CANCEL dispostion in CDR</h4>
+<p>Author: zhou_jiajian
+  Date:   2025-07-24</p>
+<p>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.</p>
+<p>Resolves: #1323</p>
+<p>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'</p>
+<h4>func_curl: Allow auth methods to be set.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-08-01</p>
+<p>Currently the CURL function only supports Basic Authentication,
+  the default auth method in libcurl. Add an option that also
+  allows enabling digest authentication.</p>
+<p>Resolves: #1332</p>
+<p>UserNote: The httpauth field in CURLOPT now allows the authentication
+  methods to be set.</p>
+<h4>options:  Change ast_options from ast_flags to ast_flags64.</h4>
+<p>Author: George Joseph
+  Date:   2025-07-21</p>
+<p>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.</p>
+<h4>res_config_odbc: Prevent Realtime fallback on record-not-found (SQL_NO_DATA)</h4>
+<p>Author: Alexei Gradinari
+  Date:   2025-07-15</p>
+<p>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.</p>
+<p>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.</p>
+<p>Notes:
+  Other Realtime backends (PostgreSQL, LDAP, etc.) can be updated similarly.
+  This patch only covers ODBC.</p>
+<p>Fixes: #1305</p>
+<h4>resource_channels.c: Don't call ast_channel_get_by_name on empty optional argu..</h4>
+<p>Author: Sven Kube
+  Date:   2025-07-30</p>
+<p><code>ast_ari_channels_create</code> and <code>ast_ari_channels_dial</code> called the
+  <code>ast_channel_get_by_name</code> 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 <code>ast_channel_get_by_name</code> to prevent these error logs.</p>
+<h4>app_agent_pool: Remove documentation for removed option.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-07-28</p>
+<p>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.</p>
+<p>Resolves: #1321</p>
+<h4>pbx.c: When the AST_SOFTHANGUP_ASYNCGOTO flag is set, pbx_extension_helper sho..</h4>
+<p>Author: Tinet-mucw
+  Date:   2025-07-22</p>
+<p>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.</p>
+<p>Resolves: #1315</p>
+<h4>res_agi: Increase AGI command buffer size from 2K to 8K</h4>
+<p>Author: Sperl Viktor
+  Date:   2025-07-22</p>
+<p>Fixes: #1317</p>
+<h4>ast_tls_cert: Make certificate validity configurable.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-07-16</p>
+<p>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.</p>
+<p>Resolves: #1307</p>
+<h4>cdr.c: Set tenantid from party_a-&gt;base instead of chan-&gt;base.</h4>
+<p>Author: George Joseph
+  Date:   2025-07-17</p>
+<p>The CDR tenantid was being set in cdr_object_alloc from the channel-&gt;base
+  snapshot.  Since this happens at channel creation before the dialplan is even
+  reached, calls to <code>CHANNEL(tenantid)=&lt;something&gt;</code> 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.</p>
+<p>Resolves: #1259</p>
+<h4>app_mixmonitor:  Update the documentation concerning the "D" option.</h4>
+<p>Author: George Joseph
+  Date:   2025-07-16</p>
+<p>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.</p>
+<p>Resolves: #1269</p>
+<h4>sig_analog: Properly handle STP, ST2P, and ST3P for fgccamamf.</h4>
+<p>Author: Naveen Albert
+  Date:   2025-07-14</p>
+<p>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.</p>
+<p>Resolves: #1301</p>
+<h4>chan_websocket: Reset frame_queue_length to 0 after FLUSH_MEDIA</h4>
+<p>Author: kodokaii
+  Date:   2025-07-03</p>
+<p>In the WebSocket channel driver, the FLUSH_MEDIA command clears all frames from
+  the queue but does not reset the frame_queue_length counter.</p>
+<p>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.</p>
+<p>This fix sets frame_queue_length to 0 after flushing, ensuring the queue state
+  is consistent with its actual content.</p>
+<p>Fixes: #1304</p>
+<h4>chan_pjsip.c: Change SSRC after media source change</h4>
+<p>Author: Martin Tomec
+  Date:   2025-06-25</p>
+<p>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.</p>
+<p>Resolves: #927</p>
+<h4>Media over Websocket Channel Driver</h4>
+<p>Author: George Joseph
+  Date:   2025-04-28</p>
+<ul>
+<li>
+<p>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.</p>
+</li>
+<li>
+<p>res_http_websocket: Made defines for max message size public and converted
+  a few nuisance verbose messages to debugs.</p>
+</li>
+<li>
+<p>main/channel.c: Changed an obsolete nuisance error to a debug.</p>
+</li>
+<li>
+<p>ARI channels: Updated externalMedia to include chan_websocket as a supported
+  transport.</p>
+</li>
+</ul>
+<p>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.</p>
+<p>UserNote: The ARI channels/externalMedia API now includes support for the
+  WebSocket transport provided by chan_websocket.</p>
+<h4>bundled_pjproject: Avoid deadlock between transport and transaction</h4>
+<p>Author: Stanislav Abramenkov
+  Date:   2025-07-01</p>
+<p>Backport patch from upstream
+  * Avoid deadlock between transport and transaction
+  https://github.com/pjsip/pjproject/commit/edde06f261ac</p>
+<p>Issue described in
+  https://github.com/pjsip/pjproject/issues/4442</p>
+<h4>utils.h: Add rounding to float conversion to int.</h4>
+<p>Author: mkmer
+  Date:   2025-03-23</p>
+<p>Quote from an audio engineer NR9V:
+  There is a minor issue of a small amount of crossover distortion though as a result of <code>ast_slinear_saturated_multiply_float()</code> 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.</p>
+<p>Resolves: #1176</p>
+<h4>pbx.c: when set flag AST_SOFTHANGUP_ASYNCGOTO, ast_explicit_goto should return..</h4>
+<p>Author: Tinet-mucw
+  Date:   2025-06-18</p>
+<p>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.</p>
+<p>Resolves: #1273</p>
+<h4>res_musiconhold.c: Ensure we're always locked around music state access.</h4>
+<p>Author: Sean Bright
+  Date:   2025-04-08</p>
+<h4>res_musiconhold.c: Annotate when the channel is locked.</h4>
+<p>Author: Sean Bright
+  Date:   2025-04-08</p>
+<h4>res_musiconhold: Appropriately lock channel during start.</h4>
+<p>Author: Jaco Kroon
+  Date:   2024-12-19</p>
+<p>This relates to #829</p>
+<p>This doesn't sully solve the Ops issue, but it solves the specific crash
+  there.  Further PRs to follow.</p>
+<p>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.</p>
+<p>Signed-off-by: Jaco Kroon <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#106;&#97;&#99;&#111;&#64;&#117;&#108;&#115;&#46;&#99;&#111;&#46;&#122;&#97;">&#106;&#97;&#99;&#111;&#64;&#117;&#108;&#115;&#46;&#99;&#111;&#46;&#122;&#97;</a></p>
+</body></html>
diff --git a/ChangeLogs/ChangeLog-21.11.0-rc1.md b/ChangeLogs/ChangeLog-21.11.0-rc1.md
new file mode 100644 (file)
index 0000000..8e422d9
--- /dev/null
@@ -0,0 +1,1102 @@
+
+## Change Log for Release asterisk-21.11.0-rc1
+
+### Links:
+
+ - [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.11.0-rc1.html)  
+ - [GitHub Diff](https://github.com/asterisk/asterisk/compare/21.10.2...21.11.0-rc1)  
+ - [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.11.0-rc1.tar.gz)  
+ - [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)  
+
+### Summary:
+
+- Commits: 51
+- Commit Authors: 22
+- Issues Resolved: 37
+- 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: (9)
+- 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
+
+### 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 (9):
+  - 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.
+
+- #### 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:
+
+-  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:
+
+#### 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>
+
index 8008744b2c4801763e9c62a06d0838ccc6e76932..6df531fdeba5a5af1aa0d67c0f926abf8ca551bb 100644 (file)
@@ -1,4 +1,4 @@
-<html><head><title>Readme for asterisk-21.10.2</title></head><body>
+<html><head><title>Readme for asterisk-21.11.0-rc1</title></head><body>
 <h1>The Asterisk(R) Open Source PBX</h1>
 <pre><code>By Mark Spencer &lt;markster@digium.com&gt; and the Asterisk.org developer community.
 Copyright (C) 2001-2025 Sangoma Technologies Corporation and other copyright holders.
@@ -37,7 +37,7 @@ hardware.</p>
 <p>If you are updating from a previous version of Asterisk, make sure you
 read the Change Logs.</p>
 <!-- CHANGELOGS (the URL will change based on the location of this README) -->
-<p><a href="ChangeLogs/ChangeLog-21.10.2.html">Change Logs</a></p>
+<p><a href="ChangeLogs/ChangeLog-21.11.0-rc1.html">Change Logs</a></p>
 <!-- END-CHANGELOGS -->
 
 <h3>NEW INSTALLATIONS</h3>
index c6dfd684ceef4bc187c0ae45c7283b2ccce73937..a06facca7f45dbd46e85ee70e63fbcc60209ccc3 100644 (file)
--- a/README.md
+++ b/README.md
@@ -55,7 +55,7 @@ If you are updating from a previous version of Asterisk, make sure you
 read the Change Logs.
 
 <!-- CHANGELOGS (the URL will change based on the location of this README) -->
-[Change Logs](ChangeLogs/ChangeLog-21.10.2.html)
+[Change Logs](ChangeLogs/ChangeLog-21.11.0-rc1.html)
 <!-- END-CHANGELOGS -->
 
 ### NEW INSTALLATIONS