diff --git a/.version b/.version index 8c26f58c42..fb626f9021 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -22.5.2 +22.6.0-rc1 diff --git a/CHANGES.html b/CHANGES.html index 8ca0938345..38389e3f06 120000 --- a/CHANGES.html +++ b/CHANGES.html @@ -1 +1 @@ -ChangeLogs/ChangeLog-22.5.2.html \ No newline at end of file +ChangeLogs/ChangeLog-22.6.0-rc1.html \ No newline at end of file diff --git a/CHANGES.md b/CHANGES.md index 261e21afca..1206917fd9 120000 --- a/CHANGES.md +++ b/CHANGES.md @@ -1 +1 @@ -ChangeLogs/ChangeLog-22.5.2.md \ No newline at end of file +ChangeLogs/ChangeLog-22.6.0-rc1.md \ No newline at end of file diff --git a/ChangeLogs/ChangeLog-22.6.0-rc1.html b/ChangeLogs/ChangeLog-22.6.0-rc1.html new file mode 100644 index 0000000000..fe0586d6d2 --- /dev/null +++ b/ChangeLogs/ChangeLog-22.6.0-rc1.html @@ -0,0 +1,1000 @@ +
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.
+The tone used while waiting for digits in WaitExten + can now be overridden by specifying an argument for the 'd' + option.
+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.
+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.
+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.
ChanSpy and ExtenSpy can now be configured to not + automatically answer the channel by using the 'N' option.
+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.
+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.
+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'
+The httpauth field in CURLOPT now allows the authentication + methods to be set.
+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
+A new ARI endpoint is available at /channels/{channelId}/progress
to indicate progress to a channel.
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.
+sorcery: Prevent duplicate objects and ensure missing objects are created on u..
+pbx_lua.c: segfault when pass null data to term_color function
+file.c: with "sounds_search_custom_dir = yes", search "custom" directory
+Fix missing ast_test_flag64 in extconf.c
+res_rtp_asterisk: Don't send RTP before DTLS has negotiated.
+chan_websocket: Allow additional URI parameters to be added to the outgoing URI.
+app_queue.c: Add new global 'log_unpause_on_reason_change'
+res_musiconhold: Appropriately lock channel during start.
+chan_websocket.c: Add DTMF messages
+res_stasis_device_state: Fix delete ARI Devicestates after asterisk restart.
+chan_pjsip.c: Change SSRC after media source change
+res_pjsip_diversion: resolve race condition between Diversion header processin..
+pbx_builtins: Allow custom tone for WaitExten.
+res_musiconhold.c: Ensure we're always locked around music state access.
+cel: Add STREAM_BEGIN, STREAM_END and DTMF event types.
+bundled_pjproject: Avoid deadlock between transport and transaction
+app_queue: fix comparison for announce-position-only-up
+ARI: Add command to indicate progress to a channel
+pbx.c: When the AST_SOFTHANGUP_ASYNCGOTO flag is set, pbx_extension_helper sho..
+chan_websocket: Reset frame_queue_length to 0 after FLUSH_MEDIA
+utils.h: Add rounding to float conversion to int.
+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
+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.
+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
+Author: Artem Umerov + Date: 2025-08-29
+Fix missing ast_test_flag64 after https://github.com/asterisk/asterisk/commit/43bf8a4ded7a65203b766b91eaf8331a600e9d8d
+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.
+Author: Naveen Albert + Date: 2025-08-22
+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.
+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
+Author: Alexei Gradinari + Date: 2025-07-07
+This patch resolves two issues in Sorcery objectset handling with multiple + backends:
+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.
+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.
+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
+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
+Author: George Joseph + Date: 2025-08-13
+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.
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
+Author: Naveen Albert + Date: 2025-08-18
+Add an additional check to guard against the channel application being + NULL.
+Resolves: #1380
+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.
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:
+Resolves: #1375
+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
+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.
+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.
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
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.
+Author: Naveen Albert + Date: 2025-08-14
+Add debug messages in scenarios where frames that are usually processed + are dropped or skipped.
+Resolves: #1371
+Author: Naveen Albert + Date: 2025-08-14
+curl_easy_setopt expects long types, so be explicit.
+Resolves: #1369
+Author: Naveen Albert + Date: 2025-08-14
+Handle allocation failure and simplify the allocation using asprintf.
+Resolves: #1366
+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
+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
+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
+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
+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
+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
+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.
+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
+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.
+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'
+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.
+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.
+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
+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.
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
+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
+Author: Sperl Viktor + Date: 2025-07-22
+Fixes: #1317
+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
+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
+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
+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
+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
+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
+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.
+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
+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
+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
+Author: Sean Bright + Date: 2025-04-08
+Author: Sean Bright + Date: 2025-04-08
+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
+ diff --git a/ChangeLogs/ChangeLog-22.6.0-rc1.md b/ChangeLogs/ChangeLog-22.6.0-rc1.md new file mode 100644 index 0000000000..75f1331572 --- /dev/null +++ b/ChangeLogs/ChangeLog-22.6.0-rc1.md @@ -0,0 +1,1102 @@ + +## Change Log for Release asterisk-22.6.0-rc1 + +### Links: + + - [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-22.6.0-rc1.html) + - [GitHub Diff](https://github.com/asterisk/asterisk/compare/22.5.2...22.6.0-rc1) + - [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22.6.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-22 + + 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 - WithBy Mark Spencer <markster@digium.com> and the Asterisk.org developer community.
Copyright (C) 2001-2025 Sangoma Technologies Corporation and other copyright holders.
@@ -37,7 +37,7 @@ hardware.
If you are updating from a previous version of Asterisk, make sure you
read the Change Logs.
-
+
NEW INSTALLATIONS
diff --git a/README.md b/README.md
index 164963d5ed..9a92163008 100644
--- 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.
-[Change Logs](ChangeLogs/ChangeLog-22.5.2.html)
+[Change Logs](ChangeLogs/ChangeLog-22.6.0-rc1.html)
### NEW INSTALLATIONS