Update for 22.3.0-rc1

releases/22 22.3.0-rc1
Asterisk Development Team 1 month ago
parent 10ef135e5a
commit 6fed735157

@ -1 +1 @@
22.2.0
22.3.0-rc1

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

@ -1 +1 @@
ChangeLogs/ChangeLog-22.2.0.md
ChangeLogs/ChangeLog-22.3.0-rc1.md

@ -0,0 +1,562 @@
<html><head><title>ChangeLog for asterisk-22.3.0-rc1</title></head><body>
<h2>Change Log for Release asterisk-22.3.0-rc1</h2>
<h3>Links:</h3>
<ul>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-22.3.0-rc1.html">Full ChangeLog</a> </li>
<li><a href="https://github.com/asterisk/asterisk/compare/22.2.0...22.3.0-rc1">GitHub Diff</a> </li>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22.3.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: 28</li>
<li>Commit Authors: 12</li>
<li>Issues Resolved: 12</li>
<li>Security Advisories Resolved: 0</li>
</ul>
<h3>User Notes:</h3>
<ul>
<li>
<h4>ari/pjsip: Make it possible to control transfers through ARI</h4>
Call transfers on the PJSIP channel can now be controlled by
ARI. This can be enabled by using the PJSIP_TRANSFER_HANDLING(ari-only)
dialplan function.</li>
</ul>
<h3>Upgrade Notes:</h3>
<h3>Commit Authors:</h3>
<ul>
<li>Allan Nathanson: (1)</li>
<li>Ben Ford: (1)</li>
<li>Fabriziopicconi: (1)</li>
<li>George Joseph: (10)</li>
<li>Holger Hans Peter Freyther: (1)</li>
<li>Jeremy Lainé: (1)</li>
<li>Joshua Elson: (1)</li>
<li>Luz Paz: (3)</li>
<li>Maximilian Fridrich: (1)</li>
<li>Mike Bradeen: (1)</li>
<li>Naveen Albert: (1)</li>
<li>Sean Bright: (6)</li>
</ul>
<h2>Issue and Commit Detail:</h2>
<h3>Closed Issues:</h3>
<ul>
<li>211: [bug]: stasis: Off-nominal channel leave causes bridge to be destroyed</li>
<li>1085: [bug]: utils: Compilation failure with DEVMODE due to old-style definitions</li>
<li>1101: [bug]: when setting a var with a double quotes and using Set(HASH)</li>
<li>1109: [bug]: Off nominal memory leak in res/ari/resource_channels.c</li>
<li>1112: [bug]: STIR/SHAKEN verification doesn't allow anonymous callerid to be passed to the dialplan.</li>
<li>1119: [bug]: Realtime database not working after upgrade from 22.0.0 to 22.2.0</li>
<li>1122: Need status on CVE-2024-57520 claim.</li>
<li>1124: [bug]: Race condition between bridge and channel delete can over-write cause code set in hangup.</li>
<li>1131: [bug]: CHANGES link broken in README.md</li>
<li>1135: [bug]: Problems with video decoding due to RTP marker bit set</li>
<li>1149: [bug]: res_pjsip: Mismatch in tcp_keepalive_enable causes not to enable</li>
<li>1164: [bug]: WARNING Message in messages.log for res_curl.conf [globals]</li>
</ul>
<h3>Commits By Author:</h3>
<ul>
<li>
<h4>Allan Nathanson (1):</h4>
</li>
<li>
<p>config.c: #include of non-existent file should not crash</p>
</li>
<li>
<h4>Ben Ford (1):</h4>
</li>
<li>
<p>documentation: Update Gosub, Goto, and add new documentationtype.</p>
</li>
<li>
<h4>George Joseph (10):</h4>
</li>
<li>docs: Add version information to ARI resources and methods.</li>
<li>docs: Add version information to AGI command XML elements.</li>
<li>func_strings.c: Prevent SEGV in HASH single-argument mode.</li>
<li>resource_channels.c: Fix memory leak in ast_ari_channels_external_media.</li>
<li>res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.</li>
<li>res_config_pgsql: Fix regression that removed dbname config.</li>
<li>bridging: Fix multiple bridging issues causing SEGVs and FRACKs.</li>
<li>swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().</li>
<li>manager.c: Check for restricted file in action_createconfig.</li>
<li>
<p>README.md: Updates and Fixes</p>
</li>
<li>
<h4>Holger Hans Peter Freyther (1):</h4>
</li>
<li>
<p>ari/pjsip: Make it possible to control transfers through ARI</p>
</li>
<li>
<h4>Jeremy Lainé (1):</h4>
</li>
<li>
<p>docs: Fix minor typo in MixMonitor AMI action</p>
</li>
<li>
<h4>Joshua Elson (1):</h4>
</li>
<li>
<p>fix: Correct default flag for tcp_keepalive_enable option</p>
</li>
<li>
<h4>Luz Paz (3):</h4>
</li>
<li>docs: Fix various typos in main/ Found via `codespell -q 3 -S "./CREDITS" -L a..</li>
<li>docs: Fix various typos in channels/ Found via `codespell -q 3 -S "./CREDITS,*..</li>
<li>
<p>docs: Fix typos in cdr/ Found via codespell</p>
</li>
<li>
<h4>Maximilian Fridrich (1):</h4>
</li>
<li>
<p>Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"</p>
</li>
<li>
<h4>Mike Bradeen (1):</h4>
</li>
<li>
<p>bridge_channel: don't set cause code on channel during bridge delete if alread..</p>
</li>
<li>
<h4>Naveen Albert (1):</h4>
</li>
<li>
<p>utils: Disable old style definition warnings for libdb.</p>
</li>
<li>
<h4>Sean Bright (6):</h4>
</li>
<li>docs: Indent <since> tags.</li>
<li>channel.c: Remove dead AST_GENERATOR_FD code.</li>
<li>res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.</li>
<li>docs: AMI documentation fixes.</li>
<li>res_rtp_asterisk.c: Don't truncate spec-compliant <code>ice-ufrag</code> or <code>ice-pwd</code>.</li>
<li>
<p>res_config_curl.c: Remove unnecessary warnings.</p>
</li>
<li>
<h4>fabriziopicconi (1):</h4>
</li>
<li>rtp.conf.sample: Correct stunaddr example.</li>
</ul>
<h3>Commit List:</h3>
<ul>
<li>documentation: Update Gosub, Goto, and add new documentationtype.</li>
<li>res_config_curl.c: Remove unnecessary warnings.</li>
<li>README.md: Updates and Fixes</li>
<li>res_rtp_asterisk.c: Don't truncate spec-compliant <code>ice-ufrag</code> or <code>ice-pwd</code>.</li>
<li>fix: Correct default flag for tcp_keepalive_enable option</li>
<li>docs: AMI documentation fixes.</li>
<li>config.c: #include of non-existent file should not crash</li>
<li>manager.c: Check for restricted file in action_createconfig.</li>
<li>swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().</li>
<li>Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"</li>
<li>res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.</li>
<li>docs: Fix typos in cdr/ Found via codespell</li>
<li>bridging: Fix multiple bridging issues causing SEGVs and FRACKs.</li>
<li>res_config_pgsql: Fix regression that removed dbname config.</li>
<li>res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.</li>
<li>resource_channels.c: Fix memory leak in ast_ari_channels_external_media.</li>
<li>ari/pjsip: Make it possible to control transfers through ARI</li>
<li>channel.c: Remove dead AST_GENERATOR_FD code.</li>
<li>func_strings.c: Prevent SEGV in HASH single-argument mode.</li>
<li>docs: Add version information to AGI command XML elements.</li>
<li>docs: Fix minor typo in MixMonitor AMI action</li>
<li>utils: Disable old style definition warnings for libdb.</li>
<li>rtp.conf.sample: Correct stunaddr example.</li>
<li>docs: Add version information to ARI resources and methods.</li>
<li>docs: Indent <since> tags.</li>
</ul>
<h3>Commit Details:</h3>
<h4>documentation: Update Gosub, Goto, and add new documentationtype.</h4>
<p>Author: Ben Ford
Date: 2025-03-14</p>
<p>Gosub and Goto were not displaying their syntax correctly on the docs
site. This change adds a new way to specify an optional context, an
optional extension, and a required priority that the xml stylesheet can
parse without having to know which optional parameters come in which
order. In Asterisk, it looks like this:</p>
<pre><code>parameter name="context" documentationtype="dialplan_context"
parameter name="extension" documentationtype="dialplan_extension"
parameter name="priority" documentationtype="dialplan_priority" required="true"
</code></pre>
<p>The stylesheet will ignore the context and extension parameters, but for
priority, it will automatically inject the following:</p>
<pre><code>[[context,]extension,]priority
</code></pre>
<p>This is the correct oder for applications such as Gosub and Goto.</p>
<h4>res_config_curl.c: Remove unnecessary warnings.</h4>
<p>Author: Sean Bright
Date: 2025-03-17</p>
<p>Resolves: #1164</p>
<h4>README.md: Updates and Fixes</h4>
<p>Author: George Joseph
Date: 2025-03-05</p>
<ul>
<li>Outdated information has been removed.</li>
<li>New links added.</li>
<li>Placeholder added for link to change logs.</li>
</ul>
<p>Going forward, the release process will create HTML versions of the README
and change log and will update the link in the README to the current
change log for the branch...</p>
<ul>
<li>In the development branches, the link will always point to the current
release on GitHub.</li>
<li>In the "releases/*" branches and the tarballs, the link will point to the
ChangeLogs/ChangeLog-<version>.html file in the source directory.</li>
<li>On the downloads website, the link will point to the
ChangeLog-<version>.html file in the same directory.</li>
</ul>
<p>Resolves: #1131</p>
<h4>res_rtp_asterisk.c: Don't truncate spec-compliant <code>ice-ufrag</code> or <code>ice-pwd</code>.</h4>
<p>Author: Sean Bright
Date: 2025-03-07</p>
<p>RFC 8839[1] indicates that the <code>ice-ufrag</code> and <code>ice-pwd</code> attributes
can be up to 256 bytes long. While we don't generate values of that
size, we should be able to accomodate them without truncating.</p>
<ol>
<li>https://www.rfc-editor.org/rfc/rfc8839#name-ice-ufrag-and-ice-pwd-attri</li>
</ol>
<h4>fix: Correct default flag for tcp_keepalive_enable option</h4>
<p>Author: Joshua Elson
Date: 2025-03-06</p>
<p>Resolves an issue where the tcp_keepalive_enable option was not properly enabled in the sample configuration due to an incorrect default flag setting.</p>
<p>Fixes: #1149</p>
<h4>docs: AMI documentation fixes.</h4>
<p>Author: Sean Bright
Date: 2025-02-18</p>
<p>Most of this patch is adding missing PJSIP-related event
documentation, but the one functional change was adding a sorcery
to-string handler for endpoint's <code>redirect_method</code> which was not
showing up in the AMI event details or <code>pjsip show endpoint
&lt;endpoint&gt;</code> output.</p>
<p>The rest of the changes are summarized below:</p>
<ul>
<li>app_agent_pool.c: Typo fix Epoche -&gt; Epoch.</li>
<li>stasis_bridges.c: Add missing AttendedTransfer properties.</li>
<li>stasis_channels.c: Add missing AgentLogoff properties.</li>
<li>pjsip_manager.xml:<ul>
<li>Add missing AorList properties.</li>
<li>Add missing AorDetail properties.</li>
<li>Add missing ContactList properties.</li>
<li>Add missing ContactStatusDetail properties.</li>
<li>Add missing EventDetail properties.</li>
<li>Add missing AuthList properties.</li>
<li>Add missing AuthDetail properties.</li>
<li>Add missing TransportDetail properties.</li>
<li>Add missing EndpointList properties.</li>
<li>Add missing IdentifyDetail properties.</li>
</ul>
</li>
<li>res_pjsip_registrar.c: Add missing InboundRegistrationDetail documentation.</li>
<li>res_pjsip_pubsub.c:<ul>
<li>Add missing ResourceListDetail documentation.</li>
<li>Add missing InboundSubscriptionDetail documentation.</li>
<li>Add missing OutboundSubscriptionDetail documentation.</li>
</ul>
</li>
<li>res_pjsip_outbound_registration.c: Add missing OutboundRegistrationDetail documentation.</li>
</ul>
<h4>config.c: #include of non-existent file should not crash</h4>
<p>Author: Allan Nathanson
Date: 2025-03-03</p>
<p>Corrects a segmentation fault when a configuration file has a #include
statement that referenced a file that does not exist.</p>
<p>Resolves: https://github.com/asterisk/asterisk/issues/1139</p>
<h4>manager.c: Check for restricted file in action_createconfig.</h4>
<p>Author: George Joseph
Date: 2025-03-03</p>
<p>The <code>CreateConfig</code> manager action now ensures that a config file can
only be created in the AST_CONFIG_DIR unless <code>live_dangerously</code> is set.</p>
<p>Resolves: #1122</p>
<h4>swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().</h4>
<p>Author: George Joseph
Date: 2025-03-04</p>
<p>Recent python versions complain when backslashes in strings create invalid
escape sequences. This causes issues for strings used as regex patterns like
<code>'^List\[(.*)\]$'</code> where you want the regex parser to treat <code>[</code> and <code>]</code>
as literals. Double-backslashing is one way to fix it but simply converting
the string to a raw string <code>re.match(r'^List\[(.*)\]$', text)</code> is easier
and less error prone.</p>
<h4>Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"</h4>
<p>Author: Maximilian Fridrich
Date: 2025-02-28</p>
<p>This reverts commit f30ad96b3f467739c38ff415e80bffc4afff1da7.</p>
<p>The original change was not RFC compliant and caused issues because it
set the RTP marker bit in cases when it shouldn't be set. See the
linked issue #1135 for a detailed explanation.</p>
<p>Fixes: #1135.</p>
<h4>res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.</h4>
<p>Author: Sean Bright
Date: 2025-02-24</p>
<p>Found while reviewing #1128</p>
<h4>docs: Fix typos in cdr/ Found via codespell</h4>
<p>Author: Luz Paz
Date: 2025-02-12</p>
<h4>docs: Fix various typos in channels/ Found via `codespell -q 3 -S "./CREDITS,*..</h4>
<p>Author: Luz Paz
Date: 2025-02-04</p>
<h4>docs: Fix various typos in main/ Found via `codespell -q 3 -S "./CREDITS" -L a..</h4>
<p>Author: Luz Paz
Date: 2025-02-04</p>
<h4>bridging: Fix multiple bridging issues causing SEGVs and FRACKs.</h4>
<p>Author: George Joseph
Date: 2025-01-22</p>
<p>Issues:</p>
<ul>
<li>
<p>The bridging core allowed multiple bridges to be created with the same
unique bridgeId at the same time. Only the last bridge created with the
duplicate name was actually saved to the core bridges container.</p>
</li>
<li>
<p>The bridging core was creating a stasis topic for the bridge and saving it
in the bridge-&gt;topic field but not increasing its reference count. In the
case where two bridges were created with the same uniqueid (which is also
the topic name), the second bridge would get the <em>existing</em> topic the first
bridge created. When the first bridge was destroyed, it would take the
topic with it so when the second bridge attempted to publish a message to
it it either FRACKed or SEGVd.</p>
</li>
<li>
<p>The bridge destructor, which also destroys the bridge topic, is run from the
bridge manager thread not the caller's thread. This makes it possible for
an ARI developer to create a new one with the same uniqueid believing the
old one was destroyed when, in fact, the old one's destructor hadn't
completed. This could cause the new bridge to get the old one's topic just
before the topic was destroyed. When the new bridge attempted to publish
a message on that topic, asterisk could either FRACK or SEGV.</p>
</li>
<li>
<p>The ARI bridges resource also allowed multiple bridges to be created with
the same uniqueid but it kept the duplicate bridges in its app_bridges
container. This created a situation where if you added two bridges with
the same "bridge1" uniqueid, all operations on "bridge1" were performed on
the first bridge created and the second was basically orphaned. If you
attempted to delete what you thought was the second bridge, you actually
deleted the first one created.</p>
</li>
</ul>
<p>Changes:</p>
<ul>
<li>
<p>A new API <code>ast_bridge_topic_exists(uniqueid)</code> was created to determine if
a topic already exists for a bridge.</p>
</li>
<li>
<p><code>bridge_base_init()</code> in bridge.c and <code>ast_ari_bridges_create()</code> in
resource_bridges.c now call <code>ast_bridge_topic_exists(uniqueid)</code> to check
if a bridge with the requested uniqueid already exists and will fail if it
does.</p>
</li>
<li>
<p><code>bridge_register()</code> in bridges.c now checks the core bridges container to
make sure a bridge doesn't already exist with the requested uniqueid.
Although most callers of <code>bridge_register()</code> will have already called
<code>bridge_base_init()</code>, which will now fail on duplicate bridges, there
is no guarantee of this so we must check again.</p>
</li>
<li>
<p>The core bridges container allocation was changed to reject duplicate
uniqueids instead of silently replacing an existing one. This is a "belt
and suspenders" check.</p>
</li>
<li>
<p>A global mutex was added to bridge.c to prevent concurrent calls to
<code>bridge_base_init()</code> and <code>bridge_register()</code>.</p>
</li>
<li>
<p>Even though you can no longer create multiple bridges with the same uniqueid
at the same time, it's still possible that the bridge topic might be
destroyed while a second bridge with the same uniqueid was trying to use
it. To address this, the bridging core now increments the reference count
on bridge-&gt;topic when a bridge is created and decrements it when the
bridge is destroyed.</p>
</li>
<li>
<p><code>bridge_create_common()</code> in res_stasis.c now checks the stasis app_bridges
container to make sure a bridge with the requested uniqueid doesn't already
exist. This may seem like overkill but there are so many entrypoints to
bridge creation that we need to be safe and catch issues as soon in the
process as possible.</p>
</li>
<li>
<p>The stasis app_bridges container allocation was changed to reject duplicate
uniqueids instead of adding them. This is a "belt and suspenders" check.</p>
</li>
<li>
<p>The <code>bridge show all</code> CLI command now shows the bridge name as well as the
bridge id.</p>
</li>
<li>
<p>Response code 409 "Conflict" was added as a possible response from the ARI
bridge create resources to signal that a bridge with the requested uniqueid
already exists.</p>
</li>
<li>
<p>Additional debugging was added to multiple bridging and stasis files.</p>
</li>
</ul>
<p>Resolves: #211</p>
<h4>bridge_channel: don't set cause code on channel during bridge delete if alread..</h4>
<p>Author: Mike Bradeen
Date: 2025-02-18</p>
<p>Due to a potential race condition via ARI when hanging up a channel hangup with cause
while also deleting a bridge containing that channel, the bridge delete can over-write
the hangup cause code resulting in Normal Call Clearing instead of the set value.</p>
<p>With this change, bridge deletion will only set the hangup code if it hasn't been
previously set.</p>
<p>Resolves: #1124</p>
<h4>res_config_pgsql: Fix regression that removed dbname config.</h4>
<p>Author: George Joseph
Date: 2025-02-11</p>
<p>A recent commit accidentally removed the code that sets dbname.
This commit adds it back in.</p>
<p>Resolves: #1119</p>
<h4>res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.</h4>
<p>Author: George Joseph
Date: 2025-02-05</p>
<p>The verification check for missing or anonymous callerid was happening before
the endpoint's profile was retrieved which meant that the failure_action
parameter wasn't available. Therefore, if verification was enabled and there
was no callerid or it was "anonymous", the call was immediately terminated
instead of giving the dialplan the ability to decide what to do with the call.</p>
<ul>
<li>
<p>The callerid check now happens after the verification context is created and
the endpoint's stir_shaken_profile is available.</p>
</li>
<li>
<p>The check now processes the callerid failure just as it does for other
verification failures and respects the failure_action parameter. If set
to "continue" or "continue_return_reason", <code>STIR_SHAKEN(0,verify_result)</code>
in the dialplan will return "invalid_or_no_callerid".</p>
</li>
<li>
<p>If the endpoint's failure_action is "reject_request", the call will be
rejected with <code>433 "Anonymity Disallowed"</code>.</p>
</li>
<li>
<p>If the endpoint's failure_action is "continue_return_reason", the call will
continue but a <code>Reason: STIR; cause=433; text="Anonymity Disallowed"</code>
header will be added to the next provisional or final response.</p>
</li>
</ul>
<p>Resolves: #1112</p>
<h4>resource_channels.c: Fix memory leak in ast_ari_channels_external_media.</h4>
<p>Author: George Joseph
Date: 2025-02-04</p>
<p>Between ast_ari_channels_external_media(), external_media_rtp_udp(),
and external_media_audiosocket_tcp(), the <code>variables</code> structure being passed
around wasn't being cleaned up properly when there was a failure.</p>
<ul>
<li>
<p>In ast_ari_channels_external_media(), the <code>variables</code> structure is now
defined with RAII_VAR to ensure it always gets cleaned up.</p>
</li>
<li>
<p>The ast_variables_destroy() call was removed from external_media_rtp_udp().</p>
</li>
<li>
<p>The ast_variables_destroy() call was removed from
external_media_audiosocket_tcp(), its <code>endpoint</code> allocation was changed to
to use ast_asprintf() as external_media_rtp_udp() does, and it now
returns an error on failure.</p>
</li>
<li>
<p>ast_ari_channels_external_media() now checks the new return code from
external_media_audiosocket_tcp() and sets the appropriate error response.</p>
</li>
</ul>
<p>Resolves: #1109</p>
<h4>ari/pjsip: Make it possible to control transfers through ARI</h4>
<p>Author: Holger Hans Peter Freyther
Date: 2024-06-15</p>
<p>Introduce a ChannelTransfer event and the ability to notify progress to
ARI. Implement emitting this event from the PJSIP channel instead of
handling the transfer in Asterisk when configured.</p>
<p>Introduce a dialplan function to the PJSIP channel to switch between the
"core" and "ari-only" behavior.</p>
<p>UserNote: Call transfers on the PJSIP channel can now be controlled by
ARI. This can be enabled by using the PJSIP_TRANSFER_HANDLING(ari-only)
dialplan function.</p>
<h4>channel.c: Remove dead AST_GENERATOR_FD code.</h4>
<p>Author: Sean Bright
Date: 2025-02-06</p>
<p>Nothing ever sets the <code>AST_GENERATOR_FD</code>, so this block of code will
never execute. It also is the only place where the <code>generate</code> callback
is called with the channel lock held which made it difficult to reason
about the thread safety of <code>ast_generator</code>s.</p>
<p>In passing, also note that <code>AST_AGENT_FD</code> isn't used either.</p>
<h4>func_strings.c: Prevent SEGV in HASH single-argument mode.</h4>
<p>Author: George Joseph
Date: 2025-01-30</p>
<p>When in single-argument mode (very rarely used), a malformation of a column
name (also very rare) could cause a NULL to be returned when retrieving the
channel variable for that column. Passing that to strncat causes a SEGV. We
now check for the NULL and print a warning message.</p>
<p>Resolves: #1101</p>
<h4>docs: Add version information to AGI command XML elements.</h4>
<p>Author: George Joseph
Date: 2025-01-24</p>
<p>This process was a bit different than the others because everything
is in the same file, there's an array that contains the command
names and their handler functions, and the last command was created
over 15 years ago.</p>
<ul>
<li>Dump a <code>git blame</code> of res/res_agi.c from BEFORE the handle_* prototypes
were changed.</li>
<li>Create a command &lt;&gt; handler function xref by parsing the the agi_command
array.</li>
<li>For each entry, grep the function definition line "static int handle_*"
from the git blame output and capture the commit. This will be the
commit the command was created in.</li>
<li>Do a <code>git tag --contains &lt;commit&gt; | sort -V | head -1</code> to get the
tag the function was created in.</li>
<li>Add a single since/version element to the command XML. Multiple versions
aren't supported here because the branching and tagging scheme changed
several times in the 2000's.</li>
</ul>
<h4>docs: Fix minor typo in MixMonitor AMI action</h4>
<p>Author: Jeremy Lainé
Date: 2025-01-28</p>
<p>The <code>Options</code> argument was erroneously documented as lowercase
<code>options</code>.</p>
<h4>utils: Disable old style definition warnings for libdb.</h4>
<p>Author: Naveen Albert
Date: 2025-01-23</p>
<p>Newer versions of gcc now warn about old style definitions, such
as those in libdb, which causes compilation failure with DEVMODE
enabled. Ignore these warnings for libdb.</p>
<p>Resolves: #1085</p>
<h4>rtp.conf.sample: Correct stunaddr example.</h4>
<p>Author: fabriziopicconi
Date: 2024-09-25</p>
<h4>docs: Add version information to ARI resources and methods.</h4>
<p>Author: George Joseph
Date: 2025-01-27</p>
<ul>
<li>
<p>Dump a git blame of each file in rest-api/api-docs.</p>
</li>
<li>
<p>Get the commit for each "resourcePath" and "httpMethod" entry.</p>
</li>
<li>
<p>Find the tags for each commit (same as other processes).</p>
</li>
<li>
<p>Insert a "since" array after each "resourcePath" and "httpMethod" entry.</p>
</li>
</ul>
<h4>docs: Indent <since> tags.</h4>
<p>Author: Sean Bright
Date: 2025-01-23</p>
<p>Also updates the 'since' of applications/functions that existed before
XML documentation was introduced (1.6.2.0).</p>
</body></html>

@ -0,0 +1,573 @@
## Change Log for Release asterisk-22.3.0-rc1
### Links:
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-22.3.0-rc1.html)
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/22.2.0...22.3.0-rc1)
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22.3.0-rc1.tar.gz)
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
### Summary:
- Commits: 28
- Commit Authors: 12
- Issues Resolved: 12
- Security Advisories Resolved: 0
### User Notes:
- #### ari/pjsip: Make it possible to control transfers through ARI
Call transfers on the PJSIP channel can now be controlled by
ARI. This can be enabled by using the PJSIP_TRANSFER_HANDLING(ari-only)
dialplan function.
### Upgrade Notes:
### Commit Authors:
- Allan Nathanson: (1)
- Ben Ford: (1)
- Fabriziopicconi: (1)
- George Joseph: (10)
- Holger Hans Peter Freyther: (1)
- Jeremy Lainé: (1)
- Joshua Elson: (1)
- Luz Paz: (3)
- Maximilian Fridrich: (1)
- Mike Bradeen: (1)
- Naveen Albert: (1)
- Sean Bright: (6)
## Issue and Commit Detail:
### Closed Issues:
- 211: [bug]: stasis: Off-nominal channel leave causes bridge to be destroyed
- 1085: [bug]: utils: Compilation failure with DEVMODE due to old-style definitions
- 1101: [bug]: when setting a var with a double quotes and using Set(HASH)
- 1109: [bug]: Off nominal memory leak in res/ari/resource_channels.c
- 1112: [bug]: STIR/SHAKEN verification doesn't allow anonymous callerid to be passed to the dialplan.
- 1119: [bug]: Realtime database not working after upgrade from 22.0.0 to 22.2.0
- 1122: Need status on CVE-2024-57520 claim.
- 1124: [bug]: Race condition between bridge and channel delete can over-write cause code set in hangup.
- 1131: [bug]: CHANGES link broken in README.md
- 1135: [bug]: Problems with video decoding due to RTP marker bit set
- 1149: [bug]: res_pjsip: Mismatch in tcp_keepalive_enable causes not to enable
- 1164: [bug]: WARNING Message in messages.log for res_curl.conf [globals]
### Commits By Author:
- #### Allan Nathanson (1):
- config.c: #include of non-existent file should not crash
- #### Ben Ford (1):
- documentation: Update Gosub, Goto, and add new documentationtype.
- #### George Joseph (10):
- docs: Add version information to ARI resources and methods.
- docs: Add version information to AGI command XML elements.
- func_strings.c: Prevent SEGV in HASH single-argument mode.
- resource_channels.c: Fix memory leak in ast_ari_channels_external_media.
- res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.
- res_config_pgsql: Fix regression that removed dbname config.
- bridging: Fix multiple bridging issues causing SEGVs and FRACKs.
- swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().
- manager.c: Check for restricted file in action_createconfig.
- README.md: Updates and Fixes
- #### Holger Hans Peter Freyther (1):
- ari/pjsip: Make it possible to control transfers through ARI
- #### Jeremy Lainé (1):
- docs: Fix minor typo in MixMonitor AMI action
- #### Joshua Elson (1):
- fix: Correct default flag for tcp_keepalive_enable option
- #### Luz Paz (3):
- docs: Fix various typos in main/ Found via `codespell -q 3 -S "./CREDITS" -L a..
- docs: Fix various typos in channels/ Found via `codespell -q 3 -S "./CREDITS,*..
- docs: Fix typos in cdr/ Found via codespell
- #### Maximilian Fridrich (1):
- Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"
- #### Mike Bradeen (1):
- bridge_channel: don't set cause code on channel during bridge delete if alread..
- #### Naveen Albert (1):
- utils: Disable old style definition warnings for libdb.
- #### Sean Bright (6):
- docs: Indent <since> tags.
- channel.c: Remove dead AST_GENERATOR_FD code.
- res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.
- docs: AMI documentation fixes.
- res_rtp_asterisk.c: Don't truncate spec-compliant `ice-ufrag` or `ice-pwd`.
- res_config_curl.c: Remove unnecessary warnings.
- #### fabriziopicconi (1):
- rtp.conf.sample: Correct stunaddr example.
### Commit List:
- documentation: Update Gosub, Goto, and add new documentationtype.
- res_config_curl.c: Remove unnecessary warnings.
- README.md: Updates and Fixes
- res_rtp_asterisk.c: Don't truncate spec-compliant `ice-ufrag` or `ice-pwd`.
- fix: Correct default flag for tcp_keepalive_enable option
- docs: AMI documentation fixes.
- config.c: #include of non-existent file should not crash
- manager.c: Check for restricted file in action_createconfig.
- swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().
- Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"
- res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.
- docs: Fix typos in cdr/ Found via codespell
- bridging: Fix multiple bridging issues causing SEGVs and FRACKs.
- res_config_pgsql: Fix regression that removed dbname config.
- res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.
- resource_channels.c: Fix memory leak in ast_ari_channels_external_media.
- ari/pjsip: Make it possible to control transfers through ARI
- channel.c: Remove dead AST_GENERATOR_FD code.
- func_strings.c: Prevent SEGV in HASH single-argument mode.
- docs: Add version information to AGI command XML elements.
- docs: Fix minor typo in MixMonitor AMI action
- utils: Disable old style definition warnings for libdb.
- rtp.conf.sample: Correct stunaddr example.
- docs: Add version information to ARI resources and methods.
- docs: Indent <since> tags.
### Commit Details:
#### documentation: Update Gosub, Goto, and add new documentationtype.
Author: Ben Ford
Date: 2025-03-14
Gosub and Goto were not displaying their syntax correctly on the docs
site. This change adds a new way to specify an optional context, an
optional extension, and a required priority that the xml stylesheet can
parse without having to know which optional parameters come in which
order. In Asterisk, it looks like this:
parameter name="context" documentationtype="dialplan_context"
parameter name="extension" documentationtype="dialplan_extension"
parameter name="priority" documentationtype="dialplan_priority" required="true"
The stylesheet will ignore the context and extension parameters, but for
priority, it will automatically inject the following:
[[context,]extension,]priority
This is the correct oder for applications such as Gosub and Goto.
#### res_config_curl.c: Remove unnecessary warnings.
Author: Sean Bright
Date: 2025-03-17
Resolves: #1164
#### README.md: Updates and Fixes
Author: George Joseph
Date: 2025-03-05
* Outdated information has been removed.
* New links added.
* Placeholder added for link to change logs.
Going forward, the release process will create HTML versions of the README
and change log and will update the link in the README to the current
change log for the branch...
* In the development branches, the link will always point to the current
release on GitHub.
* In the "releases/*" branches and the tarballs, the link will point to the
ChangeLogs/ChangeLog-<version>.html file in the source directory.
* On the downloads website, the link will point to the
ChangeLog-<version>.html file in the same directory.
Resolves: #1131
#### res_rtp_asterisk.c: Don't truncate spec-compliant `ice-ufrag` or `ice-pwd`.
Author: Sean Bright
Date: 2025-03-07
RFC 8839[1] indicates that the `ice-ufrag` and `ice-pwd` attributes
can be up to 256 bytes long. While we don't generate values of that
size, we should be able to accomodate them without truncating.
1. https://www.rfc-editor.org/rfc/rfc8839#name-ice-ufrag-and-ice-pwd-attri
#### fix: Correct default flag for tcp_keepalive_enable option
Author: Joshua Elson
Date: 2025-03-06
Resolves an issue where the tcp_keepalive_enable option was not properly enabled in the sample configuration due to an incorrect default flag setting.
Fixes: #1149
#### docs: AMI documentation fixes.
Author: Sean Bright
Date: 2025-02-18
Most of this patch is adding missing PJSIP-related event
documentation, but the one functional change was adding a sorcery
to-string handler for endpoint's `redirect_method` which was not
showing up in the AMI event details or `pjsip show endpoint
<endpoint>` output.
The rest of the changes are summarized below:
* app_agent_pool.c: Typo fix Epoche -> Epoch.
* stasis_bridges.c: Add missing AttendedTransfer properties.
* stasis_channels.c: Add missing AgentLogoff properties.
* pjsip_manager.xml:
- Add missing AorList properties.
- Add missing AorDetail properties.
- Add missing ContactList properties.
- Add missing ContactStatusDetail properties.
- Add missing EventDetail properties.
- Add missing AuthList properties.
- Add missing AuthDetail properties.
- Add missing TransportDetail properties.
- Add missing EndpointList properties.
- Add missing IdentifyDetail properties.
* res_pjsip_registrar.c: Add missing InboundRegistrationDetail documentation.
* res_pjsip_pubsub.c:
- Add missing ResourceListDetail documentation.
- Add missing InboundSubscriptionDetail documentation.
- Add missing OutboundSubscriptionDetail documentation.
* res_pjsip_outbound_registration.c: Add missing OutboundRegistrationDetail documentation.
#### config.c: #include of non-existent file should not crash
Author: Allan Nathanson
Date: 2025-03-03
Corrects a segmentation fault when a configuration file has a #include
statement that referenced a file that does not exist.
Resolves: https://github.com/asterisk/asterisk/issues/1139
#### manager.c: Check for restricted file in action_createconfig.
Author: George Joseph
Date: 2025-03-03
The `CreateConfig` manager action now ensures that a config file can
only be created in the AST_CONFIG_DIR unless `live_dangerously` is set.
Resolves: #1122
#### swagger_model.py: Fix invalid escape sequence in get_list_parameter_type().
Author: George Joseph
Date: 2025-03-04
Recent python versions complain when backslashes in strings create invalid
escape sequences. This causes issues for strings used as regex patterns like
`'^List\[(.*)\]$'` where you want the regex parser to treat `[` and `]`
as literals. Double-backslashing is one way to fix it but simply converting
the string to a raw string `re.match(r'^List\[(.*)\]$', text)` is easier
and less error prone.
#### Revert "res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big"
Author: Maximilian Fridrich
Date: 2025-02-28
This reverts commit f30ad96b3f467739c38ff415e80bffc4afff1da7.
The original change was not RFC compliant and caused issues because it
set the RTP marker bit in cases when it shouldn't be set. See the
linked issue #1135 for a detailed explanation.
Fixes: #1135.
#### res_rtp_asterisk.c: Use correct timeout value for T.140 RED timer.
Author: Sean Bright
Date: 2025-02-24
Found while reviewing #1128
#### docs: Fix typos in cdr/ Found via codespell
Author: Luz Paz
Date: 2025-02-12
#### docs: Fix various typos in channels/ Found via `codespell -q 3 -S "./CREDITS,*..
Author: Luz Paz
Date: 2025-02-04
#### docs: Fix various typos in main/ Found via `codespell -q 3 -S "./CREDITS" -L a..
Author: Luz Paz
Date: 2025-02-04
#### bridging: Fix multiple bridging issues causing SEGVs and FRACKs.
Author: George Joseph
Date: 2025-01-22
Issues:
* The bridging core allowed multiple bridges to be created with the same
unique bridgeId at the same time. Only the last bridge created with the
duplicate name was actually saved to the core bridges container.
* The bridging core was creating a stasis topic for the bridge and saving it
in the bridge->topic field but not increasing its reference count. In the
case where two bridges were created with the same uniqueid (which is also
the topic name), the second bridge would get the _existing_ topic the first
bridge created. When the first bridge was destroyed, it would take the
topic with it so when the second bridge attempted to publish a message to
it it either FRACKed or SEGVd.
* The bridge destructor, which also destroys the bridge topic, is run from the
bridge manager thread not the caller's thread. This makes it possible for
an ARI developer to create a new one with the same uniqueid believing the
old one was destroyed when, in fact, the old one's destructor hadn't
completed. This could cause the new bridge to get the old one's topic just
before the topic was destroyed. When the new bridge attempted to publish
a message on that topic, asterisk could either FRACK or SEGV.
* The ARI bridges resource also allowed multiple bridges to be created with
the same uniqueid but it kept the duplicate bridges in its app_bridges
container. This created a situation where if you added two bridges with
the same "bridge1" uniqueid, all operations on "bridge1" were performed on
the first bridge created and the second was basically orphaned. If you
attempted to delete what you thought was the second bridge, you actually
deleted the first one created.
Changes:
* A new API `ast_bridge_topic_exists(uniqueid)` was created to determine if
a topic already exists for a bridge.
* `bridge_base_init()` in bridge.c and `ast_ari_bridges_create()` in
resource_bridges.c now call `ast_bridge_topic_exists(uniqueid)` to check
if a bridge with the requested uniqueid already exists and will fail if it
does.
* `bridge_register()` in bridges.c now checks the core bridges container to
make sure a bridge doesn't already exist with the requested uniqueid.
Although most callers of `bridge_register()` will have already called
`bridge_base_init()`, which will now fail on duplicate bridges, there
is no guarantee of this so we must check again.
* The core bridges container allocation was changed to reject duplicate
uniqueids instead of silently replacing an existing one. This is a "belt
and suspenders" check.
* A global mutex was added to bridge.c to prevent concurrent calls to
`bridge_base_init()` and `bridge_register()`.
* Even though you can no longer create multiple bridges with the same uniqueid
at the same time, it's still possible that the bridge topic might be
destroyed while a second bridge with the same uniqueid was trying to use
it. To address this, the bridging core now increments the reference count
on bridge->topic when a bridge is created and decrements it when the
bridge is destroyed.
* `bridge_create_common()` in res_stasis.c now checks the stasis app_bridges
container to make sure a bridge with the requested uniqueid doesn't already
exist. This may seem like overkill but there are so many entrypoints to
bridge creation that we need to be safe and catch issues as soon in the
process as possible.
* The stasis app_bridges container allocation was changed to reject duplicate
uniqueids instead of adding them. This is a "belt and suspenders" check.
* The `bridge show all` CLI command now shows the bridge name as well as the
bridge id.
* Response code 409 "Conflict" was added as a possible response from the ARI
bridge create resources to signal that a bridge with the requested uniqueid
already exists.
* Additional debugging was added to multiple bridging and stasis files.
Resolves: #211
#### bridge_channel: don't set cause code on channel during bridge delete if alread..
Author: Mike Bradeen
Date: 2025-02-18
Due to a potential race condition via ARI when hanging up a channel hangup with cause
while also deleting a bridge containing that channel, the bridge delete can over-write
the hangup cause code resulting in Normal Call Clearing instead of the set value.
With this change, bridge deletion will only set the hangup code if it hasn't been
previously set.
Resolves: #1124
#### res_config_pgsql: Fix regression that removed dbname config.
Author: George Joseph
Date: 2025-02-11
A recent commit accidentally removed the code that sets dbname.
This commit adds it back in.
Resolves: #1119
#### res_stir_shaken: Allow missing or anonymous CID to continue to the dialplan.
Author: George Joseph
Date: 2025-02-05
The verification check for missing or anonymous callerid was happening before
the endpoint's profile was retrieved which meant that the failure_action
parameter wasn't available. Therefore, if verification was enabled and there
was no callerid or it was "anonymous", the call was immediately terminated
instead of giving the dialplan the ability to decide what to do with the call.
* The callerid check now happens after the verification context is created and
the endpoint's stir_shaken_profile is available.
* The check now processes the callerid failure just as it does for other
verification failures and respects the failure_action parameter. If set
to "continue" or "continue_return_reason", `STIR_SHAKEN(0,verify_result)`
in the dialplan will return "invalid_or_no_callerid".
* If the endpoint's failure_action is "reject_request", the call will be
rejected with `433 "Anonymity Disallowed"`.
* If the endpoint's failure_action is "continue_return_reason", the call will
continue but a `Reason: STIR; cause=433; text="Anonymity Disallowed"`
header will be added to the next provisional or final response.
Resolves: #1112
#### resource_channels.c: Fix memory leak in ast_ari_channels_external_media.
Author: George Joseph
Date: 2025-02-04
Between ast_ari_channels_external_media(), external_media_rtp_udp(),
and external_media_audiosocket_tcp(), the `variables` structure being passed
around wasn't being cleaned up properly when there was a failure.
* In ast_ari_channels_external_media(), the `variables` structure is now
defined with RAII_VAR to ensure it always gets cleaned up.
* The ast_variables_destroy() call was removed from external_media_rtp_udp().
* The ast_variables_destroy() call was removed from
external_media_audiosocket_tcp(), its `endpoint` allocation was changed to
to use ast_asprintf() as external_media_rtp_udp() does, and it now
returns an error on failure.
* ast_ari_channels_external_media() now checks the new return code from
external_media_audiosocket_tcp() and sets the appropriate error response.
Resolves: #1109
#### ari/pjsip: Make it possible to control transfers through ARI
Author: Holger Hans Peter Freyther
Date: 2024-06-15
Introduce a ChannelTransfer event and the ability to notify progress to
ARI. Implement emitting this event from the PJSIP channel instead of
handling the transfer in Asterisk when configured.
Introduce a dialplan function to the PJSIP channel to switch between the
"core" and "ari-only" behavior.
UserNote: Call transfers on the PJSIP channel can now be controlled by
ARI. This can be enabled by using the PJSIP_TRANSFER_HANDLING(ari-only)
dialplan function.
#### channel.c: Remove dead AST_GENERATOR_FD code.
Author: Sean Bright
Date: 2025-02-06
Nothing ever sets the `AST_GENERATOR_FD`, so this block of code will
never execute. It also is the only place where the `generate` callback
is called with the channel lock held which made it difficult to reason
about the thread safety of `ast_generator`s.
In passing, also note that `AST_AGENT_FD` isn't used either.
#### func_strings.c: Prevent SEGV in HASH single-argument mode.
Author: George Joseph
Date: 2025-01-30
When in single-argument mode (very rarely used), a malformation of a column
name (also very rare) could cause a NULL to be returned when retrieving the
channel variable for that column. Passing that to strncat causes a SEGV. We
now check for the NULL and print a warning message.
Resolves: #1101
#### docs: Add version information to AGI command XML elements.
Author: George Joseph
Date: 2025-01-24
This process was a bit different than the others because everything
is in the same file, there's an array that contains the command
names and their handler functions, and the last command was created
over 15 years ago.
* Dump a `git blame` of res/res_agi.c from BEFORE the handle_* prototypes
were changed.
* Create a command <> handler function xref by parsing the the agi_command
array.
* For each entry, grep the function definition line "static int handle_*"
from the git blame output and capture the commit. This will be the
commit the command was created in.
* Do a `git tag --contains <commit> | sort -V | head -1` to get the
tag the function was created in.
* Add a single since/version element to the command XML. Multiple versions
aren't supported here because the branching and tagging scheme changed
several times in the 2000's.
#### docs: Fix minor typo in MixMonitor AMI action
Author: Jeremy Lainé
Date: 2025-01-28
The `Options` argument was erroneously documented as lowercase
`options`.
#### utils: Disable old style definition warnings for libdb.
Author: Naveen Albert
Date: 2025-01-23
Newer versions of gcc now warn about old style definitions, such
as those in libdb, which causes compilation failure with DEVMODE
enabled. Ignore these warnings for libdb.
Resolves: #1085
#### rtp.conf.sample: Correct stunaddr example.
Author: fabriziopicconi
Date: 2024-09-25
#### docs: Add version information to ARI resources and methods.
Author: George Joseph
Date: 2025-01-27
* Dump a git blame of each file in rest-api/api-docs.
* Get the commit for each "resourcePath" and "httpMethod" entry.
* Find the tags for each commit (same as other processes).
* Insert a "since" array after each "resourcePath" and "httpMethod" entry.
#### docs: Indent <since> tags.
Author: Sean Bright
Date: 2025-01-23
Also updates the 'since' of applications/functions that existed before
XML documentation was introduced (1.6.2.0).

@ -0,0 +1,174 @@
<html><head><title>Readme for asterisk-22.3.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-22.3.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>

@ -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-22.3.0-rc1.html)
<!-- END-CHANGELOGS -->
### NEW INSTALLATIONS

Loading…
Cancel
Save