Update for 23.0.0-rc1

This commit is contained in:
Asterisk Development Team
2025-09-10 20:26:23 +00:00
parent 88d61c1d66
commit de44952955
15 changed files with 5747 additions and 1 deletions

1
.version Normal file
View File

@@ -0,0 +1 @@
23.0.0-rc1

1
CHANGES.html Symbolic link
View File

@@ -0,0 +1 @@
ChangeLogs/ChangeLog-23.0.0-rc1.html

1
CHANGES.md Symbolic link
View File

@@ -0,0 +1 @@
ChangeLogs/ChangeLog-23.0.0-rc1.md

View File

@@ -0,0 +1,813 @@
<html><head><title>ChangeLog for asterisk-23.0.0-rc1</title></head><body>
<h2>Change Log for Release asterisk-23.0.0-rc1</h2>
<h3>Links:</h3>
<ul>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-23.0.0-rc1.html">Full ChangeLog</a> </li>
<li><a href="https://github.com/asterisk/asterisk/compare/23.0.0-pre1...23.0.0-rc1">GitHub Diff</a> </li>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-23.0.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: 41</li>
<li>Commit Authors: 13</li>
<li>Issues Resolved: 32</li>
<li>Security Advisories Resolved: 1</li>
<li><a href="https://github.com/asterisk/asterisk/security/advisories/GHSA-64qc-9x89-rx5j">GHSA-64qc-9x89-rx5j</a>: A specifically malformed Authorization header in an incoming SIP request can cause Asterisk to crash</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>
</ul>
<h3>Upgrade Notes:</h3>
<ul>
<li>
<h4>config.c Make ast_variable_update update last match.</h4>
<p>Config variables, when set/updated, such as via AMI,
will now have the corresponding setting updated, even if their
sections inherit from template sections.</p>
</li>
<li>
<h4>config.c: Make ast_variable_retrieve return last match.</h4>
<p>Config variables retrieved explicitly by name now return
the most recently overriding value as opposed to the base value (e.g.
from a template). This is equivalent to retrieving a config setting
using the -1 index to the AST_CONFIG function. The major implication of
this is that modules processing configs by explicitly retrieving variables
by name will now get the effective value of a variable as overridden in
a config rather than the first-set value (from a template), which is
consistent with how other modules load config settings.</p>
</li>
<li>
<h4>users.conf: Remove deprecated users.conf integration.</h4>
<p>users.conf has been removed and all channel drivers must
be configured using their specific configuration files. The functionality
previously in users.conf for res_phoneprov is now in phoneprov_users.conf.</p>
</li>
<li>
<h4>res_agi: Remove deprecated DeadAGI application.</h4>
<p>The DeadAGI application, which was
deprecated in Asterisk 15, has now been removed.
The same functionality is available in the AGI app.</p>
</li>
<li>
<h4>res_musiconhold: Remove options that were deprecated in Asterisk 14.</h4>
<p>The deprecated random and application=r options have
been removed; use sort=random instead.</p>
</li>
<li>
<h4>app_voicemail: Remove deprecated options.</h4>
<p>The deprecated maxmessage and minmessage options
have been removed; use maxsecs and minsecs instead.
The deprecated 'cz' language has also been removed; use 'cs' instead.</p>
</li>
<li>
<h4>app_queue: Remove redundant/deprecated function.</h4>
<p>The deprecated QUEUE_MEMBER_COUNT function
has been removed; use QUEUE_MEMBER(<queue>,logged) instead.</p>
</li>
<li>
<h4>cli.c: Remove deprecated and redundant CLI command.</h4>
<p>The deprecated "no debug channel" command has
now been removed; use "core set debug channel" instead.</p>
</li>
<li>
<h4>logger.c: Remove deprecated/redundant configuration option.</h4>
<p>The deprecated rotatetimestamp option has been removed.
Use rotatestrategy instead.</p>
</li>
<li>
<h4>func_dialplan: Remove deprecated/redundant function.</h4>
<p>The deprecated VALID_EXTEN function has been removed.
Use DIALPLAN_EXISTS instead.</p>
</li>
</ul>
<h3>Developer Notes:</h3>
<ul>
<li>
<h4>ARI: Add command to indicate progress to a channel</h4>
A new ARI endpoint is available at <code>/channels/{channelId}/progress</code> to indicate progress to a channel.</li>
</ul>
<h3>Commit Authors:</h3>
<ul>
<li>Alexei Gradinari: (1)</li>
<li>Alexey Khabulyak: (1)</li>
<li>Artem Umerov: (1)</li>
<li>Ben Ford: (2)</li>
<li>George Joseph: (4)</li>
<li>Igor Goncharovsky: (2)</li>
<li>Joe Garlick: (1)</li>
<li>Jose Lopes: (1)</li>
<li>Mike Bradeen: (1)</li>
<li>Naveen Albert: (23)</li>
<li>Sean Bright: (2)</li>
<li>Stuart Henderson: (1)</li>
<li>Sven Kube: (1)</li>
</ul>
<h2>Issue and Commit Detail:</h2>
<h3>Closed Issues:</h3>
<ul>
<li>!GHSA-64qc-9x89-rx5j: A specifically malformed Authorization header in an incoming SIP request can cause Asterisk to crash</li>
<li>244: [bug]: config.c: Template inheritance is incorrect for ast_variable_retrieve</li>
<li>258: [deprecation]: Remove deprecated DeadAGI application.</li>
<li>401: [bug]: app_dial: Answer Gosub option passthrough regression</li>
<li>960: [bug]: config.c: Template inheritance is not respected by ast_variable_update</li>
<li>1147: [bug]: Commit 3cab4e7a to config.c causes segfaults and spinloops in UpdateConfig mgr action</li>
<li>1222: [bug]: func_callerid: ANI2 is not always formatted as two digits</li>
<li>1260: [bug]: Asterisk sends RTP audio stream before ICE/DTLS completes</li>
<li>1289: [bug]: sorcery - duplicate objects from multiple backends and backend divergence on update</li>
<li>1292: [improvement]: Remove deprecated users.conf</li>
<li>1296: [improvement]: res_musiconhold: Remove deprecated options</li>
<li>1298: [improvement]: app_voicemail: Remove deprecated options</li>
<li>1327: [bug]: res_stasis_device_state: can't delete ARI Devicestate after asterisk restart</li>
<li>1341: [improvement]: app_queue: Remove deprecated QUEUE_MEMBER_COUNT function</li>
<li>1343: [improvement]: cli.c: Remove deprecated/redundant CLI command.</li>
<li>1345: [improvement]: logger.c: Remove deprecated/redundant config option</li>
<li>1347: [improvement]: func_dialplan: Remove deprecated/redundant function</li>
<li>1352: [improvement]: Websocket channel with custom URI</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>
<li>ASTERISK-30370: config: Template inheritance is incorrect for ast_variable_retrieve</li>
</ul>
<h3>Commits By Author:</h3>
<ul>
<li>
<h4>Alexei Gradinari (1):</h4>
</li>
<li>
<p>sorcery: Prevent duplicate objects and ensure missing objects are created on u..</p>
</li>
<li>
<h4>Alexey Khabulyak (1):</h4>
</li>
<li>
<p>pbx_lua.c: segfault when pass null data to term_color function</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 (4):</h4>
</li>
<li>xmldoc.c: Fix rendering of CLI output.</li>
<li>chan_websocket: Fix buffer overrun when processing TEXT websocket frames.</li>
<li>chan_websocket: Allow additional URI parameters to be added to the outgoing URI.</li>
<li>
<p>res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.</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>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>Naveen Albert (11):</h4>
</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>Stuart Henderson (1):</h4>
</li>
<li>
<p>app_queue: fix comparison for announce-position-only-up</p>
</li>
<li>
<h4>Sven Kube (1):</h4>
</li>
<li>ARI: Add command to indicate progress to a channel</li>
</ul>
<h3>Commit List:</h3>
<ul>
<li>Prepare for Asterisk 23</li>
<li>config.c Make ast_variable_update update last match.</li>
<li>config.c: Make ast_variable_retrieve return last match.</li>
<li>utils: Remove libdb and astdb conversion scripts.</li>
<li>config.c: Fix inconsistent pointer logic in ast_variable_update.</li>
<li>channel: Deprecate <code>ast_moh_cleanup(...)</code>.</li>
<li>func_callerid: Always format ANI2 as two digits.</li>
<li>users.conf: Remove deprecated users.conf integration.</li>
<li>res_agi: Remove deprecated DeadAGI application.</li>
<li>res_musiconhold: Remove options that were deprecated in Asterisk 14.</li>
<li>app_voicemail: Remove deprecated options.</li>
<li>app_queue: Remove redundant/deprecated function.</li>
<li>cli.c: Remove deprecated and redundant CLI command.</li>
<li>logger.c: Remove deprecated/redundant configuration option.</li>
<li>func_dialplan: Remove deprecated/redundant function.</li>
<li>Update version for Asterisk 23</li>
<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>res_rtp_asterisk: Don't send RTP before DTLS has negotiated.</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>res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.</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>
</ul>
<h3>Commit Details:</h3>
<h4>Prepare for Asterisk 23</h4>
<p>Author: Mike Bradeen
Date: 2024-08-14</p>
<h4>config.c Make ast_variable_update update last match.</h4>
<p>Author: Naveen Albert
Date: 2024-10-23</p>
<p>ast_variable_update currently sets the first match for a variable, as
opposed to the last one. This issue is complementary to that raised
in #244.</p>
<p>This is incorrect and results in the wrong (or no) action being taken
in cases where a section inherits from a template section. When the
traversal occurs to update the setting, the existing code erroneously
would use the first of possibly multiple matches in its update logic,
which is wrong. Now, explicitly use the last match in the traversal,
which will ensure that the actual setting is updated properly, and
not skipped or ignored because a template from which the setting's
section inherits was used for comparison.</p>
<p>Resolves: #960</p>
<p>UpgradeNote: Config variables, when set/updated, such as via AMI,
will now have the corresponding setting updated, even if their
sections inherit from template sections.</p>
<h4>config.c: Make ast_variable_retrieve return last match.</h4>
<p>Author: Naveen Albert
Date: 2023-08-09</p>
<p>ast_variable_retrieve currently returns the first match
for a variable, as opposed to the last one. This is problematic
because modules that load config settings by explicitly
calling ast_variable_retrieve on a variable name (as opposed
to iterating through all the directives as specified) will
end up taking the first specified value, such as the default
value from the template rather than the actual effective value
in an individual config section, leading to the wrong config.</p>
<p>This fixes this by making ast_variable_retrieve return the last
match, or the most recently overridden one, as the effective setting.
This is similar to what the -1 index in the AST_CONFIG function does.</p>
<p>There is another function, ast_variable_find_last_in_list, that does
something similar. However, it's a slightly different API, and it
sees virtually no usage in Asterisk. ast_variable_retrieve is what
most things use so this is currently the relevant point of breakage.</p>
<p>In practice, this is unlikely to cause any breakage, since there
would be no logical reason to use an inherited value rather than
an explicitly overridden value when loading a config.</p>
<p>ASTERISK-30370 #close</p>
<p>Resolves: #244</p>
<p>UpgradeNote: Config variables retrieved explicitly by name now return
the most recently overriding value as opposed to the base value (e.g.
from a template). This is equivalent to retrieving a config setting
using the -1 index to the AST_CONFIG function. The major implication of
this is that modules processing configs by explicitly retrieving variables
by name will now get the effective value of a variable as overridden in
a config rather than the first-set value (from a template), which is
consistent with how other modules load config settings.</p>
<h4>utils: Remove libdb and astdb conversion scripts.</h4>
<p>Author: Sean Bright
Date: 2025-01-29</p>
<p>These were included with Asterisk 10 when we switched astdb from libdb
to sqlite3.</p>
<h4>config.c: Fix inconsistent pointer logic in ast_variable_update.</h4>
<p>Author: Naveen Albert
Date: 2025-03-06</p>
<p>Commit 3cab4e7ab4a3ae483430d5f5e8fa167d02a8128c introduced a
regression by causing the wrong pointers to be used in certain
(more complex) cases. We now take care to ensure the exact
same pointers are used as before that commit, and simplify
by eliminating the unnecessary second for loop.</p>
<p>Resolves: #1147</p>
<h4>channel: Deprecate <code>ast_moh_cleanup(...)</code>.</h4>
<p>Author: Sean Bright
Date: 2025-04-08</p>
<p>We don't want anyone calling it but the channel destructor.</p>
<h4>func_callerid: Always format ANI2 as two digits.</h4>
<p>Author: Naveen Albert
Date: 2025-04-26</p>
<p>ANI II is always supposed to be formatted as two digits,
so zero pad when formatting it if necessary.</p>
<p>Resolves: #1222</p>
<h4>users.conf: Remove deprecated users.conf integration.</h4>
<p>Author: Naveen Albert
Date: 2025-07-09</p>
<p>users.conf was deprecated in Asterisk 21 and is now being removed
for Asterisk 23, in accordance with the Asterisk deprecation policy.</p>
<p>This consists of:
* Removing integration with app_directory, app_voicemail, chan_dahdi,
chan_iax2, and AMI.
* users.conf was also partially used for res_phoneprov, and this remaining
functionality is consolidated to a separate phoneprov_users.conf,
used only by res_phoneprov.</p>
<p>Resolves: #1292</p>
<p>UpgradeNote: users.conf has been removed and all channel drivers must
be configured using their specific configuration files. The functionality
previously in users.conf for res_phoneprov is now in phoneprov_users.conf.</p>
<h4>res_agi: Remove deprecated DeadAGI application.</h4>
<p>Author: Naveen Albert
Date: 2023-08-11</p>
<p>DeadAGI was deprecated 7 years ago, in Asterisk 15,
as it duplicates functionality in the AGI app.
This removes the application.</p>
<p>Resolves: #258</p>
<p>UpgradeNote: The DeadAGI application, which was
deprecated in Asterisk 15, has now been removed.
The same functionality is available in the AGI app.</p>
<h4>res_musiconhold: Remove options that were deprecated in Asterisk 14.</h4>
<p>Author: Naveen Albert
Date: 2025-07-09</p>
<p>Commit 9c1f34c7e904b26bb550f426020635894cb805ac added dedicated options
for random sorting functionality and deprecated older options that
now duplicated these capabilities. Remove these deprecated options.</p>
<p>Resolves: #1296</p>
<p>UpgradeNote: The deprecated random and application=r options have
been removed; use sort=random instead.</p>
<h4>app_voicemail: Remove deprecated options.</h4>
<p>Author: Naveen Albert
Date: 2025-07-10</p>
<p>Remove the deprecated maxmessage and minmessage options,
which have been superseded by maxsecs and minsecs since 1.6.
Also remove the deprecated 'cz' language option (deprecated
since 1.8.)</p>
<p>Resolves: #1298</p>
<p>UpgradeNote: The deprecated maxmessage and minmessage options
have been removed; use maxsecs and minsecs instead.
The deprecated 'cz' language has also been removed; use 'cs' instead.</p>
<h4>app_queue: Remove redundant/deprecated function.</h4>
<p>Author: Naveen Albert
Date: 2025-08-07</p>
<p>QUEUE_MEMBER_COUNT has been deprecated since at least 1.6,
for fully duplicating functionality available in the
QUEUE_MEMBER function; remove it now.</p>
<p>Resolves: #1341</p>
<p>UpgradeNote: The deprecated QUEUE_MEMBER_COUNT function
has been removed; use QUEUE_MEMBER(<queue>,logged) instead.</p>
<h4>cli.c: Remove deprecated and redundant CLI command.</h4>
<p>Author: Naveen Albert
Date: 2025-08-07</p>
<p>The "no debug channel" command has been deprecated since
1.6 (commit 691363656fbdc83edf04b125317aebae6525c9e7),
as it is replaced by "core set debug channel", which also
supports tab-completion on channels. Remove the redundant
command.</p>
<p>Resolves: #1343</p>
<p>UpgradeNote: The deprecated "no debug channel" command has
now been removed; use "core set debug channel" instead.</p>
<h4>logger.c: Remove deprecated/redundant configuration option.</h4>
<p>Author: Naveen Albert
Date: 2025-08-07</p>
<p>Remove the deprecated 'rotatetimestamp' config option, as this
was deprecated by 'rotatestrategy' in 1.6 by commit
f5a14167f3ef090f8576da3070ed5c452fa01e44.</p>
<p>Resolves: #1345</p>
<p>UpgradeNote: The deprecated rotatetimestamp option has been removed.
Use rotatestrategy instead.</p>
<h4>func_dialplan: Remove deprecated/redundant function.</h4>
<p>Author: Naveen Albert
Date: 2025-08-07</p>
<p>Remove VALID_EXTEN, which was deprecated/superseded by DIALPLAN_EXISTS
in Asterisk 11 (commit 8017b65bb97c4226ca7a3c7c944a9811484e0305),
as DIALPLAN_EXISTS does the same thing and is more flexible.</p>
<p>Resolves: #1347</p>
<p>UpgradeNote: The deprecated VALID_EXTEN function has been removed.
Use DIALPLAN_EXISTS instead.</p>
<h4>Update version for Asterisk 23</h4>
<p>Author: Ben Ford
Date: 2025-08-13</p>
<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>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>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-22</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>res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.</h4>
<p>Author: George Joseph
Date: 2025-08-28</p>
<p>In the highly-unlikely event that get_authorization_hdr() couldn't find an
Authorization header in a request, trying to get the digest algorithm
would cauase a SEGV. We now check that we have an auth header that matches
the realm before trying to get the algorithm from it.</p>
<p>Resolves: #GHSA-64qc-9x89-rx5j</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>
</body></html>

View File

@@ -0,0 +1,918 @@
## Change Log for Release asterisk-23.0.0-rc1
### Links:
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-23.0.0-rc1.html)
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/23.0.0-pre1...23.0.0-rc1)
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-23.0.0-rc1.tar.gz)
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
### Summary:
- Commits: 41
- Commit Authors: 13
- Issues Resolved: 32
- Security Advisories Resolved: 1
- [GHSA-64qc-9x89-rx5j](https://github.com/asterisk/asterisk/security/advisories/GHSA-64qc-9x89-rx5j): A specifically malformed Authorization header in an incoming SIP request can cause Asterisk to crash
### 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.
### Upgrade Notes:
- #### config.c Make ast_variable_update update last match.
Config variables, when set/updated, such as via AMI,
will now have the corresponding setting updated, even if their
sections inherit from template sections.
- #### config.c: Make ast_variable_retrieve return last match.
Config variables retrieved explicitly by name now return
the most recently overriding value as opposed to the base value (e.g.
from a template). This is equivalent to retrieving a config setting
using the -1 index to the AST_CONFIG function. The major implication of
this is that modules processing configs by explicitly retrieving variables
by name will now get the effective value of a variable as overridden in
a config rather than the first-set value (from a template), which is
consistent with how other modules load config settings.
- #### users.conf: Remove deprecated users.conf integration.
users.conf has been removed and all channel drivers must
be configured using their specific configuration files. The functionality
previously in users.conf for res_phoneprov is now in phoneprov_users.conf.
- #### res_agi: Remove deprecated DeadAGI application.
The DeadAGI application, which was
deprecated in Asterisk 15, has now been removed.
The same functionality is available in the AGI app.
- #### res_musiconhold: Remove options that were deprecated in Asterisk 14.
The deprecated random and application=r options have
been removed; use sort=random instead.
- #### app_voicemail: Remove deprecated options.
The deprecated maxmessage and minmessage options
have been removed; use maxsecs and minsecs instead.
The deprecated 'cz' language has also been removed; use 'cs' instead.
- #### app_queue: Remove redundant/deprecated function.
The deprecated QUEUE_MEMBER_COUNT function
has been removed; use QUEUE_MEMBER(<queue>,logged) instead.
- #### cli.c: Remove deprecated and redundant CLI command.
The deprecated "no debug channel" command has
now been removed; use "core set debug channel" instead.
- #### logger.c: Remove deprecated/redundant configuration option.
The deprecated rotatetimestamp option has been removed.
Use rotatestrategy instead.
- #### func_dialplan: Remove deprecated/redundant function.
The deprecated VALID_EXTEN function has been removed.
Use DIALPLAN_EXISTS instead.
### 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.
### Commit Authors:
- Alexei Gradinari: (1)
- Alexey Khabulyak: (1)
- Artem Umerov: (1)
- Ben Ford: (2)
- George Joseph: (4)
- Igor Goncharovsky: (2)
- Joe Garlick: (1)
- Jose Lopes: (1)
- Mike Bradeen: (1)
- Naveen Albert: (23)
- Sean Bright: (2)
- Stuart Henderson: (1)
- Sven Kube: (1)
## Issue and Commit Detail:
### Closed Issues:
- !GHSA-64qc-9x89-rx5j: A specifically malformed Authorization header in an incoming SIP request can cause Asterisk to crash
- 244: [bug]: config.c: Template inheritance is incorrect for ast_variable_retrieve
- 258: [deprecation]: Remove deprecated DeadAGI application.
- 401: [bug]: app_dial: Answer Gosub option passthrough regression
- 960: [bug]: config.c: Template inheritance is not respected by ast_variable_update
- 1147: [bug]: Commit 3cab4e7a to config.c causes segfaults and spinloops in UpdateConfig mgr action
- 1222: [bug]: func_callerid: ANI2 is not always formatted as two digits
- 1260: [bug]: Asterisk sends RTP audio stream before ICE/DTLS completes
- 1289: [bug]: sorcery - duplicate objects from multiple backends and backend divergence on update
- 1292: [improvement]: Remove deprecated users.conf
- 1296: [improvement]: res_musiconhold: Remove deprecated options
- 1298: [improvement]: app_voicemail: Remove deprecated options
- 1327: [bug]: res_stasis_device_state: can't delete ARI Devicestate after asterisk restart
- 1341: [improvement]: app_queue: Remove deprecated QUEUE_MEMBER_COUNT function
- 1343: [improvement]: cli.c: Remove deprecated/redundant CLI command.
- 1345: [improvement]: logger.c: Remove deprecated/redundant config option
- 1347: [improvement]: func_dialplan: Remove deprecated/redundant function
- 1352: [improvement]: Websocket channel with custom URI
- 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
- ASTERISK-30370: config: Template inheritance is incorrect for ast_variable_retrieve
### Commits By Author:
- #### Alexei Gradinari (1):
- sorcery: Prevent duplicate objects and ensure missing objects are created on u..
- #### Alexey Khabulyak (1):
- pbx_lua.c: segfault when pass null data to term_color function
- #### 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 (4):
- xmldoc.c: Fix rendering of CLI output.
- chan_websocket: Fix buffer overrun when processing TEXT websocket frames.
- chan_websocket: Allow additional URI parameters to be added to the outgoing URI.
- res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.
- #### Igor Goncharovsky (2):
- app_waitforsilence.c: Use milliseconds to calculate timeout time
- app_queue.c: Add new global 'log_unpause_on_reason_change'
- #### Joe Garlick (1):
- chan_websocket.c: Add DTMF messages
- #### Jose Lopes (1):
- res_stasis_device_state: Fix delete ARI Devicestates after asterisk restart.
- #### Naveen Albert (11):
- 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.
- #### Stuart Henderson (1):
- app_queue: fix comparison for announce-position-only-up
- #### Sven Kube (1):
- ARI: Add command to indicate progress to a channel
### Commit List:
- Prepare for Asterisk 23
- config.c Make ast_variable_update update last match.
- config.c: Make ast_variable_retrieve return last match.
- utils: Remove libdb and astdb conversion scripts.
- config.c: Fix inconsistent pointer logic in ast_variable_update.
- channel: Deprecate `ast_moh_cleanup(...)`.
- func_callerid: Always format ANI2 as two digits.
- users.conf: Remove deprecated users.conf integration.
- res_agi: Remove deprecated DeadAGI application.
- res_musiconhold: Remove options that were deprecated in Asterisk 14.
- app_voicemail: Remove deprecated options.
- app_queue: Remove redundant/deprecated function.
- cli.c: Remove deprecated and redundant CLI command.
- logger.c: Remove deprecated/redundant configuration option.
- func_dialplan: Remove deprecated/redundant function.
- Update version for Asterisk 23
- 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
- res_rtp_asterisk: Don't send RTP before DTLS has negotiated.
- 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
- res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.
- 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.
### Commit Details:
#### Prepare for Asterisk 23
Author: Mike Bradeen
Date: 2024-08-14
#### config.c Make ast_variable_update update last match.
Author: Naveen Albert
Date: 2024-10-23
ast_variable_update currently sets the first match for a variable, as
opposed to the last one. This issue is complementary to that raised
in #244.
This is incorrect and results in the wrong (or no) action being taken
in cases where a section inherits from a template section. When the
traversal occurs to update the setting, the existing code erroneously
would use the first of possibly multiple matches in its update logic,
which is wrong. Now, explicitly use the last match in the traversal,
which will ensure that the actual setting is updated properly, and
not skipped or ignored because a template from which the setting's
section inherits was used for comparison.
Resolves: #960
UpgradeNote: Config variables, when set/updated, such as via AMI,
will now have the corresponding setting updated, even if their
sections inherit from template sections.
#### config.c: Make ast_variable_retrieve return last match.
Author: Naveen Albert
Date: 2023-08-09
ast_variable_retrieve currently returns the first match
for a variable, as opposed to the last one. This is problematic
because modules that load config settings by explicitly
calling ast_variable_retrieve on a variable name (as opposed
to iterating through all the directives as specified) will
end up taking the first specified value, such as the default
value from the template rather than the actual effective value
in an individual config section, leading to the wrong config.
This fixes this by making ast_variable_retrieve return the last
match, or the most recently overridden one, as the effective setting.
This is similar to what the -1 index in the AST_CONFIG function does.
There is another function, ast_variable_find_last_in_list, that does
something similar. However, it's a slightly different API, and it
sees virtually no usage in Asterisk. ast_variable_retrieve is what
most things use so this is currently the relevant point of breakage.
In practice, this is unlikely to cause any breakage, since there
would be no logical reason to use an inherited value rather than
an explicitly overridden value when loading a config.
ASTERISK-30370 #close
Resolves: #244
UpgradeNote: Config variables retrieved explicitly by name now return
the most recently overriding value as opposed to the base value (e.g.
from a template). This is equivalent to retrieving a config setting
using the -1 index to the AST_CONFIG function. The major implication of
this is that modules processing configs by explicitly retrieving variables
by name will now get the effective value of a variable as overridden in
a config rather than the first-set value (from a template), which is
consistent with how other modules load config settings.
#### utils: Remove libdb and astdb conversion scripts.
Author: Sean Bright
Date: 2025-01-29
These were included with Asterisk 10 when we switched astdb from libdb
to sqlite3.
#### config.c: Fix inconsistent pointer logic in ast_variable_update.
Author: Naveen Albert
Date: 2025-03-06
Commit 3cab4e7ab4a3ae483430d5f5e8fa167d02a8128c introduced a
regression by causing the wrong pointers to be used in certain
(more complex) cases. We now take care to ensure the exact
same pointers are used as before that commit, and simplify
by eliminating the unnecessary second for loop.
Resolves: #1147
#### channel: Deprecate `ast_moh_cleanup(...)`.
Author: Sean Bright
Date: 2025-04-08
We don't want anyone calling it but the channel destructor.
#### func_callerid: Always format ANI2 as two digits.
Author: Naveen Albert
Date: 2025-04-26
ANI II is always supposed to be formatted as two digits,
so zero pad when formatting it if necessary.
Resolves: #1222
#### users.conf: Remove deprecated users.conf integration.
Author: Naveen Albert
Date: 2025-07-09
users.conf was deprecated in Asterisk 21 and is now being removed
for Asterisk 23, in accordance with the Asterisk deprecation policy.
This consists of:
* Removing integration with app_directory, app_voicemail, chan_dahdi,
chan_iax2, and AMI.
* users.conf was also partially used for res_phoneprov, and this remaining
functionality is consolidated to a separate phoneprov_users.conf,
used only by res_phoneprov.
Resolves: #1292
UpgradeNote: users.conf has been removed and all channel drivers must
be configured using their specific configuration files. The functionality
previously in users.conf for res_phoneprov is now in phoneprov_users.conf.
#### res_agi: Remove deprecated DeadAGI application.
Author: Naveen Albert
Date: 2023-08-11
DeadAGI was deprecated 7 years ago, in Asterisk 15,
as it duplicates functionality in the AGI app.
This removes the application.
Resolves: #258
UpgradeNote: The DeadAGI application, which was
deprecated in Asterisk 15, has now been removed.
The same functionality is available in the AGI app.
#### res_musiconhold: Remove options that were deprecated in Asterisk 14.
Author: Naveen Albert
Date: 2025-07-09
Commit 9c1f34c7e904b26bb550f426020635894cb805ac added dedicated options
for random sorting functionality and deprecated older options that
now duplicated these capabilities. Remove these deprecated options.
Resolves: #1296
UpgradeNote: The deprecated random and application=r options have
been removed; use sort=random instead.
#### app_voicemail: Remove deprecated options.
Author: Naveen Albert
Date: 2025-07-10
Remove the deprecated maxmessage and minmessage options,
which have been superseded by maxsecs and minsecs since 1.6.
Also remove the deprecated 'cz' language option (deprecated
since 1.8.)
Resolves: #1298
UpgradeNote: The deprecated maxmessage and minmessage options
have been removed; use maxsecs and minsecs instead.
The deprecated 'cz' language has also been removed; use 'cs' instead.
#### app_queue: Remove redundant/deprecated function.
Author: Naveen Albert
Date: 2025-08-07
QUEUE_MEMBER_COUNT has been deprecated since at least 1.6,
for fully duplicating functionality available in the
QUEUE_MEMBER function; remove it now.
Resolves: #1341
UpgradeNote: The deprecated QUEUE_MEMBER_COUNT function
has been removed; use QUEUE_MEMBER(<queue>,logged) instead.
#### cli.c: Remove deprecated and redundant CLI command.
Author: Naveen Albert
Date: 2025-08-07
The "no debug channel" command has been deprecated since
1.6 (commit 691363656fbdc83edf04b125317aebae6525c9e7),
as it is replaced by "core set debug channel", which also
supports tab-completion on channels. Remove the redundant
command.
Resolves: #1343
UpgradeNote: The deprecated "no debug channel" command has
now been removed; use "core set debug channel" instead.
#### logger.c: Remove deprecated/redundant configuration option.
Author: Naveen Albert
Date: 2025-08-07
Remove the deprecated 'rotatetimestamp' config option, as this
was deprecated by 'rotatestrategy' in 1.6 by commit
f5a14167f3ef090f8576da3070ed5c452fa01e44.
Resolves: #1345
UpgradeNote: The deprecated rotatetimestamp option has been removed.
Use rotatestrategy instead.
#### func_dialplan: Remove deprecated/redundant function.
Author: Naveen Albert
Date: 2025-08-07
Remove VALID_EXTEN, which was deprecated/superseded by DIALPLAN_EXISTS
in Asterisk 11 (commit 8017b65bb97c4226ca7a3c7c944a9811484e0305),
as DIALPLAN_EXISTS does the same thing and is more flexible.
Resolves: #1347
UpgradeNote: The deprecated VALID_EXTEN function has been removed.
Use DIALPLAN_EXISTS instead.
#### Update version for Asterisk 23
Author: Ben Ford
Date: 2025-08-13
#### 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
#### 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
#### 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
#### res_pjsip_authenticator_digest: Fix SEGV if get_authorization_hdr returns NULL.
Author: George Joseph
Date: 2025-08-28
In the highly-unlikely event that get_authorization_hdr() couldn't find an
Authorization header in a request, trying to get the digest algorithm
would cauase a SEGV. We now check that we have an auth header that matches
the realm before trying to get the algorithm from it.
Resolves: #GHSA-64qc-9x89-rx5j
#### 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

174
README.html Normal file
View File

@@ -0,0 +1,174 @@
<html><head><title>Readme for asterisk-23.0.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.
</code></pre>
<h2>SECURITY</h2>
<p>It is imperative that you read and fully understand the contents of
the security information document before you attempt to configure and run
an Asterisk server.</p>
<p>See <a href="https://docs.asterisk.org/Deployment/Important-Security-Considerations">Important Security Considerations</a> for more information.</p>
<h2>WHAT IS ASTERISK ?</h2>
<p>Asterisk is an Open Source PBX and telephony toolkit. It is, in a
sense, middleware between Internet and telephony channels on the bottom,
and Internet and telephony applications at the top. However, Asterisk supports
more telephony interfaces than just Internet telephony. Asterisk also has a
vast amount of support for traditional PSTN telephony, as well.</p>
<p>For more information on the project itself, please visit the <a href="https://www.asterisk.org">Asterisk
Home Page</a> and the official
<a href="https://docs.asterisk.org">Asterisk Documentation</a>.</p>
<h2>SUPPORTED OPERATING SYSTEMS</h2>
<h3>Linux</h3>
<p>The Asterisk Open Source PBX is developed and tested primarily on the
GNU/Linux operating system, and is supported on every major GNU/Linux
distribution.</p>
<h3>Others</h3>
<p>Asterisk has also been 'ported' and reportedly runs properly on other
operating systems as well, Apple's Mac OS X, and the BSD variants.</p>
<h2>GETTING STARTED</h2>
<p>Most users are using VoIP/SIP exclusively these days but if you need to
interface to TDM or analog services or devices, be sure you've got supported
hardware.</p>
<p>Supported telephony hardware includes:
* All Analog and Digital Interface cards from Sangoma
* Any full duplex sound card supported by PortAudio
* The Xorcom Astribank channel bank</p>
<h3>UPGRADING FROM AN EARLIER VERSION</h3>
<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-23.0.0-rc1.html">Change Logs</a></p>
<!-- END-CHANGELOGS -->
<h3>NEW INSTALLATIONS</h3>
<p>Ensure that your system contains a compatible compiler and development
libraries. Asterisk requires either the GNU Compiler Collection (GCC) version
4.1 or higher, or a compiler that supports the C99 specification and some of
the gcc language extensions. In addition, your system needs to have the C
library headers available, and the headers and libraries for ncurses.</p>
<p>There are many modules that have additional dependencies. To see what
libraries are being looked for, see <code>./configure --help</code>, or run
<code>make menuselect</code> to view the dependencies for specific modules.</p>
<p>On many distributions, these dependencies are installed by packages with names
like 'glibc-devel', 'ncurses-devel', 'openssl-devel' and 'zlib-devel'
or similar. The <code>contrib/scripts/install_prereq</code> script can be used to install
the dependencies for most Debian and Redhat based Linux distributions.
The script also handles SUSE, Arch, Gentoo, FreeBSD, NetBSD and OpenBSD but
those distributions mightnoit have complete support or they might be out of date.</p>
<p>So, let's proceed:</p>
<ol>
<li>
<p>Read the documentation.<br>
The <a href="https://docs.asterisk.org">Asterisk Documentation</a> website has full
information for building, installing, configuring and running Asterisk.</p>
</li>
<li>
<p>Run <code>./configure</code><br>
Execute the configure script to guess values for system-dependent
variables used during compilation. If the script indicates that some required
components are missing, you can run <code>./contrib/scripts/install_prereq install</code>
to install the necessary components. Note that this will install all dependencies
for every functionality of Asterisk. After running the script, you will need
to rerun <code>./configure</code>.</p>
</li>
<li>
<p>Run <code>make menuselect</code><br>
This is needed if you want to select the modules that will be compiled and to
check dependencies for various optional modules.</p>
</li>
<li>
<p>Run <code>make</code><br>
Assuming the build completes successfully:</p>
</li>
<li>
<p>Run <code>make install</code><br>
If this is your first time working with Asterisk, you may wish to install
the sample PBX, with demonstration extensions, etc. If so, run:</p>
</li>
<li>
<p>Run <code>make samples</code><br>
Doing so will overwrite any existing configuration files you have installed.</p>
</li>
<li>
<p>Finally, you can launch Asterisk in the foreground mode (not a daemon) with
<code>asterisk -vvvc</code><br>
You'll see a bunch of verbose messages fly by your screen as Asterisk
initializes (that's the "very very verbose" mode). When it's ready, if
you specified the "c" then you'll get a command line console, that looks
like this:<br>
<code>*CLI&gt;</code><br>
You can type <code>core show help</code> at any time to get help with the system. For help
with a specific command, type <code>core show help &lt;command&gt;</code>.</p>
</li>
</ol>
<p><code>man asterisk</code> at the Unix/Linux command prompt will give you detailed
information on how to start and stop Asterisk, as well as all the command
line options for starting Asterisk.</p>
<h3>ABOUT CONFIGURATION FILES</h3>
<p>All Asterisk configuration files share a common format. Comments are
delimited by <code>;</code> (since <code>#</code> of course, being a DTMF digit, may occur in
many places). A configuration file is divided into sections whose names
appear in <code>[]</code>'s. Each section typically contains statements in the form
<code>variable = value</code> although you may see <code>variable =&gt; value</code> in older samples.</p>
<h3>SPECIAL NOTE ON TIME</h3>
<p>Those using SIP phones should be aware that Asterisk is sensitive to
large jumps in time. Manually changing the system time using date(1)
(or other similar commands) may cause SIP registrations and other
internal processes to fail. For this reason, you should always use
a time synchronization package to keep your system time accurate.
All OS/distributions make one or more of the following packages
available:</p>
<ul>
<li>ntpd/ntpsec</li>
<li>chronyd</li>
<li>systemd-timesyncd</li>
</ul>
<p>Be sure to install and configure one (and only one) of them.</p>
<h3>FILE DESCRIPTORS</h3>
<p>Depending on the size of your system and your configuration,
Asterisk can consume a large number of file descriptors. In UNIX,
file descriptors are used for more than just files on disk. File
descriptors are also used for handling network communication
(e.g. SIP, IAX2, or H.323 calls) and hardware access (e.g. analog and
digital trunk hardware). Asterisk accesses many on-disk files for
everything from configuration information to voicemail storage.</p>
<p>Most systems limit the number of file descriptors that Asterisk can
have open at one time. This can limit the number of simultaneous
calls that your system can handle. For example, if the limit is set
at 1024 (a common default value) Asterisk can handle approximately 150
SIP calls simultaneously. To change the number of file descriptors
follow the instructions for your system below:</p>
<h4>PAM-BASED LINUX SYSTEM</h4>
<p>If your system uses PAM (Pluggable Authentication Modules) edit
<code>/etc/security/limits.conf</code>. Add these lines to the bottom of the file:</p>
<pre><code class="language-text">root soft nofile 4096
root hard nofile 8196
asterisk soft nofile 4096
asterisk hard nofile 8196
</code></pre>
<p>(adjust the numbers to taste). You may need to reboot the system for
these changes to take effect.</p>
<h4>GENERIC UNIX SYSTEM</h4>
<p>If there are no instructions specifically adapted to your system
above you can try adding the command <code>ulimit -n 8192</code> to the script
that starts Asterisk.</p>
<h2>MORE INFORMATION</h2>
<p>Visit the <a href="https://docs.asterisk.org">Asterisk Documentation</a> website
for more documentation on various features and please read all the
configuration samples that include documentation on the configuration options.</p>
<p>Finally, you may wish to join the
<a href="https://community.asterisk.org">Asterisk Community Forums</a></p>
<p>Welcome to the growing worldwide community of Asterisk users!</p>
<pre><code> Mark Spencer, and the Asterisk.org development community
</code></pre>
<hr>
<p>Asterisk is a trademark of Sangoma Technologies Corporation</p>
<p>[<a href="https://www.sangoma.com/">Sangoma</a>]
[<a href="https://www.asterisk.org">Home Page</a>]
[<a href="https://www.asterisk.org/support">Support</a>]
[<a href="https://docs.asterisk.org">Documentation</a>]
[<a href="https://community.asterisk.org">Community Forums</a>]
[<a href="https://github.com/asterisk/asterisk/releases">Release Notes</a>]
[<a href="https://docs.asterisk.org/Deployment/Important-Security-Considerations/">Security</a>]
[<a href="https://lists.digium.com">Mailing List Archive</a>] </p>
</body></html>

View File

@@ -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](https://downloads.asterisk.org/pub/telephony/asterisk)
[Change Logs](ChangeLogs/ChangeLog-23.0.0-rc1.html)
<!-- END-CHANGELOGS -->
### NEW INSTALLATIONS

View File

@@ -0,0 +1,41 @@
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> 210693f3123d
CREATE TABLE cdr (
accountcode VARCHAR(20),
src VARCHAR(80),
dst VARCHAR(80),
dcontext VARCHAR(80),
clid VARCHAR(80),
channel VARCHAR(80),
dstchannel VARCHAR(80),
lastapp VARCHAR(80),
lastdata VARCHAR(80),
start DATETIME,
answer DATETIME,
end DATETIME,
duration INTEGER,
billsec INTEGER,
disposition VARCHAR(45),
amaflags VARCHAR(45),
userfield VARCHAR(256),
uniqueid VARCHAR(150),
linkedid VARCHAR(150),
peeraccount VARCHAR(20),
sequence INTEGER
);
INSERT INTO alembic_version (version_num) VALUES ('210693f3123d');
-- Running upgrade 210693f3123d -> 54cde9847798
ALTER TABLE cdr MODIFY accountcode VARCHAR(80) NULL;
ALTER TABLE cdr MODIFY peeraccount VARCHAR(80) NULL;
UPDATE alembic_version SET version_num='54cde9847798' WHERE alembic_version.version_num = '210693f3123d';

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,25 @@
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> 4105ee839f58
CREATE TABLE queue_log (
id BIGINT NOT NULL AUTO_INCREMENT,
time DATETIME,
callid VARCHAR(80),
queuename VARCHAR(256),
agent VARCHAR(80),
event VARCHAR(32),
data1 VARCHAR(100),
data2 VARCHAR(100),
data3 VARCHAR(100),
data4 VARCHAR(100),
data5 VARCHAR(100),
PRIMARY KEY (id),
UNIQUE (id)
);
INSERT INTO alembic_version (version_num) VALUES ('4105ee839f58');

View File

@@ -0,0 +1,47 @@
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> a2e9769475e
CREATE TABLE voicemail_messages (
dir VARCHAR(255) NOT NULL,
msgnum INTEGER NOT NULL,
context VARCHAR(80),
macrocontext VARCHAR(80),
callerid VARCHAR(80),
origtime INTEGER,
duration INTEGER,
recording BLOB,
flag VARCHAR(30),
category VARCHAR(30),
mailboxuser VARCHAR(30),
mailboxcontext VARCHAR(30),
msg_id VARCHAR(40)
);
ALTER TABLE voicemail_messages ADD CONSTRAINT voicemail_messages_dir_msgnum PRIMARY KEY (dir, msgnum);
CREATE INDEX voicemail_messages_dir ON voicemail_messages (dir);
INSERT INTO alembic_version (version_num) VALUES ('a2e9769475e');
-- Running upgrade a2e9769475e -> 39428242f7f5
ALTER TABLE voicemail_messages MODIFY recording BLOB(4294967295) NULL;
UPDATE alembic_version SET version_num='39428242f7f5' WHERE alembic_version.version_num = 'a2e9769475e';
-- Running upgrade 39428242f7f5 -> 1c55c341360f
ALTER TABLE voicemail_messages DROP COLUMN macrocontext;
UPDATE alembic_version SET version_num='1c55c341360f' WHERE alembic_version.version_num = '39428242f7f5';
-- Running upgrade 1c55c341360f -> 64fae6bbe7fb
DROP INDEX voicemail_messages_dir ON voicemail_messages;
UPDATE alembic_version SET version_num='64fae6bbe7fb' WHERE alembic_version.version_num = '1c55c341360f';

View File

@@ -0,0 +1,45 @@
BEGIN;
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> 210693f3123d
CREATE TABLE cdr (
accountcode VARCHAR(20),
src VARCHAR(80),
dst VARCHAR(80),
dcontext VARCHAR(80),
clid VARCHAR(80),
channel VARCHAR(80),
dstchannel VARCHAR(80),
lastapp VARCHAR(80),
lastdata VARCHAR(80),
start TIMESTAMP WITHOUT TIME ZONE,
answer TIMESTAMP WITHOUT TIME ZONE,
"end" TIMESTAMP WITHOUT TIME ZONE,
duration INTEGER,
billsec INTEGER,
disposition VARCHAR(45),
amaflags VARCHAR(45),
userfield VARCHAR(256),
uniqueid VARCHAR(150),
linkedid VARCHAR(150),
peeraccount VARCHAR(20),
sequence INTEGER
);
INSERT INTO alembic_version (version_num) VALUES ('210693f3123d') RETURNING alembic_version.version_num;
-- Running upgrade 210693f3123d -> 54cde9847798
ALTER TABLE cdr ALTER COLUMN accountcode TYPE VARCHAR(80);
ALTER TABLE cdr ALTER COLUMN peeraccount TYPE VARCHAR(80);
UPDATE alembic_version SET version_num='54cde9847798' WHERE alembic_version.version_num = '210693f3123d';
COMMIT;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
BEGIN;
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> 4105ee839f58
CREATE TABLE queue_log (
id BIGSERIAL NOT NULL,
time TIMESTAMP WITHOUT TIME ZONE,
callid VARCHAR(80),
queuename VARCHAR(256),
agent VARCHAR(80),
event VARCHAR(32),
data1 VARCHAR(100),
data2 VARCHAR(100),
data3 VARCHAR(100),
data4 VARCHAR(100),
data5 VARCHAR(100),
PRIMARY KEY (id),
UNIQUE (id)
);
INSERT INTO alembic_version (version_num) VALUES ('4105ee839f58') RETURNING alembic_version.version_num;
COMMIT;

View File

@@ -0,0 +1,51 @@
BEGIN;
CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);
-- Running upgrade -> a2e9769475e
CREATE TABLE voicemail_messages (
dir VARCHAR(255) NOT NULL,
msgnum INTEGER NOT NULL,
context VARCHAR(80),
macrocontext VARCHAR(80),
callerid VARCHAR(80),
origtime INTEGER,
duration INTEGER,
recording BYTEA,
flag VARCHAR(30),
category VARCHAR(30),
mailboxuser VARCHAR(30),
mailboxcontext VARCHAR(30),
msg_id VARCHAR(40)
);
ALTER TABLE voicemail_messages ADD CONSTRAINT voicemail_messages_dir_msgnum PRIMARY KEY (dir, msgnum);
CREATE INDEX voicemail_messages_dir ON voicemail_messages (dir);
INSERT INTO alembic_version (version_num) VALUES ('a2e9769475e') RETURNING alembic_version.version_num;
-- Running upgrade a2e9769475e -> 39428242f7f5
ALTER TABLE voicemail_messages ALTER COLUMN recording TYPE BYTEA;
UPDATE alembic_version SET version_num='39428242f7f5' WHERE alembic_version.version_num = 'a2e9769475e';
-- Running upgrade 39428242f7f5 -> 1c55c341360f
ALTER TABLE voicemail_messages DROP COLUMN macrocontext;
UPDATE alembic_version SET version_num='1c55c341360f' WHERE alembic_version.version_num = '39428242f7f5';
-- Running upgrade 1c55c341360f -> 64fae6bbe7fb
DROP INDEX voicemail_messages_dir;
UPDATE alembic_version SET version_num='64fae6bbe7fb' WHERE alembic_version.version_num = '1c55c341360f';
COMMIT;