]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Update for 21.8.0-rc1 21.8.0-rc1
authorAsterisk Development Team <asteriskteam@digium.com>
Thu, 20 Mar 2025 18:29:26 +0000 (18:29 +0000)
committerAsterisk Development Team <asteriskteam@digium.com>
Thu, 20 Mar 2025 18:29:26 +0000 (18:29 +0000)
.version
CHANGES.html [new symlink]
CHANGES.md
ChangeLogs/ChangeLog-21.8.0-rc1.html [new file with mode: 0644]
ChangeLogs/ChangeLog-21.8.0-rc1.md [new file with mode: 0644]
README.html [new file with mode: 0644]
README.md

index ff1c240384fe6fc41e780aee1a0c309b0deb0722..b16e65e8f979a83d6c2893504c4caeb9a9793172 100644 (file)
--- a/.version
+++ b/.version
@@ -1 +1 @@
-21.7.0
+21.8.0-rc1
diff --git a/CHANGES.html b/CHANGES.html
new file mode 120000 (symlink)
index 0000000..349d757
--- /dev/null
@@ -0,0 +1 @@
+ChangeLogs/ChangeLog-21.8.0-rc1.html
\ No newline at end of file
index 2125910f7c78d999e800641cbf521fe98303e85e..ba7c2c414415b77a20837dd5a15fed1a67bded9a 120000 (symlink)
@@ -1 +1 @@
-ChangeLogs/ChangeLog-21.7.0.md
\ No newline at end of file
+ChangeLogs/ChangeLog-21.8.0-rc1.md
\ No newline at end of file
diff --git a/ChangeLogs/ChangeLog-21.8.0-rc1.html b/ChangeLogs/ChangeLog-21.8.0-rc1.html
new file mode 100644 (file)
index 0000000..f18a2d7
--- /dev/null
@@ -0,0 +1,562 @@
+<html><head><title>ChangeLog for asterisk-21.8.0-rc1</title></head><body>
+<h2>Change Log for Release asterisk-21.8.0-rc1</h2>
+<h3>Links:</h3>
+<ul>
+<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.8.0-rc1.html">Full ChangeLog</a>  </li>
+<li><a href="https://github.com/asterisk/asterisk/compare/21.7.0...21.8.0-rc1">GitHub Diff</a>  </li>
+<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.8.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>
diff --git a/ChangeLogs/ChangeLog-21.8.0-rc1.md b/ChangeLogs/ChangeLog-21.8.0-rc1.md
new file mode 100644 (file)
index 0000000..121db37
--- /dev/null
@@ -0,0 +1,573 @@
+
+## Change Log for Release asterisk-21.8.0-rc1
+
+### Links:
+
+ - [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.8.0-rc1.html)  
+ - [GitHub Diff](https://github.com/asterisk/asterisk/compare/21.7.0...21.8.0-rc1)  
+ - [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.8.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).
+
+
diff --git a/README.html b/README.html
new file mode 100644 (file)
index 0000000..d742bda
--- /dev/null
@@ -0,0 +1,174 @@
+<html><head><title>Readme for asterisk-21.8.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-21.8.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>
index 063db527e9b5984c79e032a12e669d929461fa72..9c3b5a4c9ff73d4d39b105927391c535d28fdd4d 100644 (file)
--- a/README.md
+++ b/README.md
@@ -55,7 +55,7 @@ If you are updating from a previous version of Asterisk, make sure you
 read the Change Logs.
 
 <!-- CHANGELOGS (the URL will change based on the location of this README) -->
-[Change Logs](https://downloads.asterisk.org/pub/telephony/asterisk)
+[Change Logs](ChangeLogs/ChangeLog-21.8.0-rc1.html)
 <!-- END-CHANGELOGS -->
 
 ### NEW INSTALLATIONS