--- /dev/null
+
+## Change Log for Release asterisk-21.7.0-rc1
+
+### Links:
+
+ - [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.7.0-rc1.md)
+ - [GitHub Diff](https://github.com/asterisk/asterisk/compare/21.6.1...21.7.0-rc1)
+ - [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.7.0-rc1.tar.gz)
+ - [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
+
+### Summary:
+
+- Commits: 50
+- Commit Authors: 20
+- Issues Resolved: 17
+- Security Advisories Resolved: 0
+
+### User Notes:
+
+- #### sig_analog: Add Last Number Redial feature.
+ Users can now redial the last number
+ called if the lastnumredial setting is set to yes.
+ Resolves: #437
+
+- #### Add SHA-256 and SHA-512-256 as authentication digest algorithms
+ The SHA-256 and SHA-512-256 algorithms are now available
+ for authentication as both a UAS and a UAC.
+
+- #### Upgrade bundled pjproject to 2.15.1 Resolves: asterisk#1016
+ Bundled pjproject has been upgraded to 2.15.1. For more
+ information visit pjproject Github page: https://github.com/pjsip/pjproject/releases/tag/2.15.1
+
+- #### res_pjsip: Add new AOR option "qualify_2xx_only"
+ The pjsip.conf AOR section now has a "qualify_2xx_only"
+ option that can be set so that only 2XX responses to OPTIONS requests
+ used to qualify a contact will mark the contact as available.
+
+- #### app_queue: allow dynamically adding a queue member in paused state.
+ use the p option of AddQueueMember() for paused member state.
+ Optionally, use the r(reason) option to specify a custom reason for the pause.
+
+- #### manager.c: Add Processed Call Count to CoreStatus output
+ The current processed call count is now returned as CoreProcessedCalls from the
+ CoreStatus AMI Action.
+
+- #### func_curl.c: Add additional CURL options for SSL requests
+ The following new configuration options are now available
+ in the res_curl.conf file, and the CURL() function: 'ssl_verifyhost'
+ (CURLOPT_SSL_VERIFYHOST), 'ssl_cainfo' (CURLOPT_CAINFO), 'ssl_capath'
+ (CURLOPT_CAPATH), 'ssl_cert' (CURLOPT_SSLCERT), 'ssl_certtype'
+ (CURLOPT_SSLCERTTYPE), 'ssl_key' (CURLOPT_SSLKEY), 'ssl_keytype',
+ (CURLOPT_SSLKEYTYPE) and 'ssl_keypasswd' (CURLOPT_KEYPASSWD). See the
+ libcurl documentation for more details.
+
+- #### res_stir_shaken: Allow sending Identity headers for unknown TNs
+ You can now set the "unknown_tn_attest_level" option
+ in the attestation and/or profile objects in stir_shaken.conf to
+ enable sending Identity headers for callerid TNs not explicitly
+ configured.
+
+
+### Upgrade Notes:
+
+
+### Commit Authors:
+
+- Abdelkader Boudih: (3)
+- Alexey Khabulyak: (1)
+- Alexey Vasilyev: (1)
+- Allan Nathanson: (2)
+- Artem Umerov: (1)
+- George Joseph: (14)
+- Jaco Kroon: (1)
+- James Terhune: (1)
+- Joshua C. Colp: (1)
+- Kent: (1)
+- Maksim Nesterov: (1)
+- Maximilian Fridrich: (1)
+- Mike Pultz: (3)
+- Naveen Albert: (6)
+- Sean Bright: (6)
+- Sperl Viktor: (2)
+- Stanislav Abramenkov: (2)
+- Steffen Arntz: (1)
+- Tinet-Mucw: (1)
+- Viktor Litvinov: (1)
+
+## Issue and Commit Detail:
+
+### Closed Issues:
+
+ - 437: [new-feature]: sig_analog: Add Last Number Redial
+ - 851: [bug]: unable to read audiohook both side when packet lost on one side of the call
+ - 921: [bug]: Stir-Shaken doesn’t allow B or C attestation for unknown callerid which is allowed by ATIS-1000074.v003, §5.2.4
+ - 927: [bug]: no audio when media source changed during the call
+ - 948: [improvement]: Support SHA-256 algorithm on REGISTER and INVITE challenges
+ - 993: [bug]: sig_analog: Feature Group D / E911 no longer work
+ - 999: [bug]: Crash when setting a global variable with invalid UTF8 characters
+ - 1007: [improvement]: Cannot dynamically add queue member in paused state from dialplan or command line
+ - 1013: [improvement]: chan_pjsip: Send VIDUPDATE RTP frames for H.264 streams on endpoints without WebRTC
+ - 1021: [improvement]: proper queue_log paused state when member added dynamically
+ - 1023: [improvement]: Improve PJSIP_MEDIA_OFFER documentation
+ - 1028: [bug]: "pjsip show endpoints" shows some identifies on endpoints that shouldn't be there
+ - 1029: [bug]: chan_dahdi: Wrong channel state set when RINGING received
+ - 1054: [bug]: chan_iax2: Frames unnecessarily backlogged with jitterbuffer if no voice frames have been received yet
+ - 1058: [bug]: Asterisk fails to compile following commit 71a2e8c on Ubuntu 20.04
+ - 1064: [improvement]: ast_tls_script: Add option to skip passphrase for CA private key
+ - 1075: [bug]: res_prometheus does not set Content-Type header in HTTP response
+
+### Commits By Author:
+
+- #### Abdelkader Boudih (3):
+ - normalize contrib/ast-db-manage/queue_log.ini.sample
+ - res_config_pgsql: normalize database connection option with cel and cdr by sup..
+ - samples: Use "asterisk" instead of "postgres" for username
+
+- #### Alexey Khabulyak (1):
+ - format_gsm.c: Added mime type
+
+- #### Alexey Vasilyev (1):
+ - res_rtp_asterisk.c: Fix bridged_payload matching with sample rate for DTMF
+
+- #### Allan Nathanson (2):
+ - config.c: retain leading whitespace before comments
+ - config.c: fix #tryinclude being converted to #include on rewrite
+
+- #### Artem Umerov (1):
+ - logger.h: Fix build when AST_DEVMODE is not defined.
+
+- #### George Joseph (14):
+ - res_stir_shaken: Allow sending Identity headers for unknown TNs
+ - Allow C++ source files (as extension .cc) in the main directory
+ - Add ability to pass arguments to unit tests from the CLI
+ - Header fixes for compiling C++ source files
+ - gcc14: Fix issues caught by gcc 14
+ - Add C++ Standard detection to configure and fix a new C++20 compile issue
+ - Add SHA-256 and SHA-512-256 as authentication digest algorithms
+ - docs: Enable since/version handling for XML, CLI and ARI documentation
+ - docs: Various XML fixes
+ - res_pjsip_authenticator_digest: Fix issue with missing auth and DONT_OPTIMIZE
+ - docs: Add version information to configObject and configOption XML elements
+ - README.md, asterisk.c: Update Copyright Dates
+ - docs: Add version information to manager event instance XML elements
+ - docs: Add version information to application and function XML elements
+
+- #### Jaco Kroon (1):
+ - res_odbc: release threads from potential starvation.
+
+- #### James Terhune (1):
+ - main/stasis_channels.c: Fix crash when setting a global variable with invalid ..
+
+- #### Joshua C. Colp (1):
+ - LICENSE: Update company name, email, and address.
+
+- #### Kent (1):
+ - res_pjsip: Add new AOR option "qualify_2xx_only"
+
+- #### Maksim Nesterov (1):
+ - func_uuid: Add a new dialplan function to generate UUIDs
+
+- #### Maximilian Fridrich (1):
+ - chan_pjsip: Send VIDUPDATE RTP frame for all H.264 streams
+
+- #### Mike Pultz (3):
+ - func_curl.c: Add additional CURL options for SSL requests
+ - manager.c: Add Processed Call Count to CoreStatus output
+ - res_curl.conf.sample: clean up sample configuration and add new SSL options
+
+- #### Naveen Albert (6):
+ - sig_analog: Fix regression with FGD and E911 signaling.
+ - chan_iax2: Add log message for rejected calls.
+ - chan_dahdi: Fix wrong channel state when RINGING recieved.
+ - sig_analog: Add Last Number Redial feature.
+ - chan_iax2: Avoid unnecessarily backlogging non-voice frames.
+ - ast_tls_cert: Add option to skip passphrase for CA private key.
+
+- #### Sean Bright (6):
+ - config.c: Fix off-nominal reference leak.
+ - manager.c: Rename restrictedFile to is_restricted_file.
+ - manager: Add `<since>` tags for all AMI actions.
+ - dialplan_functions_doc.xml: Document PJSIP_MEDIA_OFFER's `media` argument.
+ - strings.c: Improve numeric detection in `ast_strings_match()`.
+ - res_prometheus.c: Set Content-Type header on /metrics response.
+
+- #### Sperl Viktor (2):
+ - app_queue: allow dynamically adding a queue member in paused state.
+ - app_queue: indicate the paused state of a dynamically added member in queue_log.
+
+- #### Stanislav Abramenkov (2):
+ - Upgrade bundled pjproject to 2.15.1 Resolves: asterisk#1016
+ - res_pjproject: Fix typo (OpenmSSL->OpenSSL)
+
+- #### Steffen Arntz (1):
+ - logger.c fix: malformed JSON template
+
+- #### Tinet-mucw (1):
+ - audiohook.c: resolving the issue with audiohook both reading when packet loss ..
+
+- #### Viktor Litvinov (1):
+ - res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big
+
+
+### Commit List:
+
+- docs: Add version information to application and function XML elements
+- docs: Add version information to manager event instance XML elements
+- LICENSE: Update company name, email, and address.
+- res_prometheus.c: Set Content-Type header on /metrics response.
+- README.md, asterisk.c: Update Copyright Dates
+- docs: Add version information to configObject and configOption XML elements
+- res_pjsip_authenticator_digest: Fix issue with missing auth and DONT_OPTIMIZE
+- ast_tls_cert: Add option to skip passphrase for CA private key.
+- chan_iax2: Avoid unnecessarily backlogging non-voice frames.
+- config.c: fix #tryinclude being converted to #include on rewrite
+- sig_analog: Add Last Number Redial feature.
+- docs: Various XML fixes
+- strings.c: Improve numeric detection in `ast_strings_match()`.
+- docs: Enable since/version handling for XML, CLI and ARI documentation
+- logger.h: Fix build when AST_DEVMODE is not defined.
+- dialplan_functions_doc.xml: Document PJSIP_MEDIA_OFFER's `media` argument.
+- samples: Use "asterisk" instead of "postgres" for username
+- manager: Add `<since>` tags for all AMI actions.
+- logger.c fix: malformed JSON template
+- manager.c: Rename restrictedFile to is_restricted_file.
+- res_pjproject: Fix typo (OpenmSSL->OpenSSL)
+- Add SHA-256 and SHA-512-256 as authentication digest algorithms
+- config.c: retain leading whitespace before comments
+- config.c: Fix off-nominal reference leak.
+- normalize contrib/ast-db-manage/queue_log.ini.sample
+- Add C++ Standard detection to configure and fix a new C++20 compile issue
+- chan_dahdi: Fix wrong channel state when RINGING recieved.
+- Upgrade bundled pjproject to 2.15.1 Resolves: asterisk#1016
+- gcc14: Fix issues caught by gcc 14
+- Header fixes for compiling C++ source files
+- Add ability to pass arguments to unit tests from the CLI
+- res_pjsip: Add new AOR option "qualify_2xx_only"
+- res_odbc: release threads from potential starvation.
+- Allow C++ source files (as extension .cc) in the main directory
+- format_gsm.c: Added mime type
+- func_uuid: Add a new dialplan function to generate UUIDs
+- app_queue: allow dynamically adding a queue member in paused state.
+- chan_iax2: Add log message for rejected calls.
+- chan_pjsip: Send VIDUPDATE RTP frame for all H.264 streams
+- res_curl.conf.sample: clean up sample configuration and add new SSL options
+- res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big
+- res_rtp_asterisk.c: Fix bridged_payload matching with sample rate for DTMF
+- manager.c: Add Processed Call Count to CoreStatus output
+- func_curl.c: Add additional CURL options for SSL requests
+- sig_analog: Fix regression with FGD and E911 signaling.
+- res_stir_shaken: Allow sending Identity headers for unknown TNs
+
+### Commit Details:
+
+#### docs: Add version information to application and function XML elements
+ Author: George Joseph
+ Date: 2025-01-23
+
+ * Do a git blame on the embedded XML application or function element.
+
+ * From the commit hash, grab the summary line.
+
+ * Do a git log --grep <summary> to find the cherry-pick commits in all
+ branches that match.
+
+ * Do a git patch-id to ensure the commits are all related and didn't get
+ a false match on the summary.
+
+ * Do a git tag --contains <commit> to find the tags that contain each
+ commit.
+
+ * Weed out all tags not ..0.
+
+ * Sort and discard any .0.0 and following tags where the commit
+ appeared in an earlier branch.
+
+ * The result is a single tag for each branch where the application or function
+ was defined.
+
+ The applications and functions defined in the following files were done by
+ hand because the XML was extracted from the C source file relatively recently.
+ * channels/pjsip/dialplan_functions_doc.xml
+ * main/logger_doc.xml
+ * main/manager_doc.xml
+ * res/res_geolocation/geoloc_doc.xml
+ * res/res_stir_shaken/stir_shaken_doc.xml
+
+
+#### docs: Add version information to manager event instance XML elements
+ Author: George Joseph
+ Date: 2025-01-20
+
+ * Do a git blame on the embedded XML managerEvent elements.
+
+ * From the commit hash, grab the summary line.
+
+ * Do a git log --grep <summary> to find the cherry-pick commits in all
+ branches that match.
+
+ * Do a git patch-id to ensure the commits are all related and didn't get
+ a false match on the summary.
+
+ * Do a git tag --contains <commit> to find the tags that contain each
+ commit.
+
+ * Weed out all tags not ..0.
+
+ * Sort and discard any .0.0 and following tags where the commit
+ appeared in an earlier branch.
+
+ * The result is a single tag for each branch where the application or function
+ was defined.
+
+ The events defined in res/res_pjsip/pjsip_manager.xml were done by hand
+ because the XML was extracted from the C source file relatively recently.
+
+ Two bugs were fixed along the way...
+
+ * The get_documentation awk script was exiting after it processed the first
+ DOCUMENTATION block it found in a file. We have at least 1 source file
+ with multiple DOCUMENTATION blocks so only the first one in them was being
+ processed. The awk script was changed to continue searching rather
+ than exiting after the first block.
+
+ * Fixing the awk script revealed an issue in logger.c where the third
+ DOCUMENTATION block contained a XML fragment that consisted only of
+ a managerEventInstance element that wasn't wrapped in a managerEvent
+ element. Since logger_doc.xml already existed, the remaining fragments
+ in logger.c were moved to it and properly organized.
+
+
+#### LICENSE: Update company name, email, and address.
+ Author: Joshua C. Colp
+ Date: 2025-01-21
+
+
+#### res_prometheus.c: Set Content-Type header on /metrics response.
+ Author: Sean Bright
+ Date: 2025-01-21
+
+ This should resolve the Prometheus error:
+
+ > Error scraping target: non-compliant scrape target
+ sending blank Content-Type and no
+ fallback_scrape_protocol specified for target.
+
+ Resolves: #1075
+
+#### README.md, asterisk.c: Update Copyright Dates
+ Author: George Joseph
+ Date: 2025-01-20
+
+
+#### docs: Add version information to configObject and configOption XML elements
+ Author: George Joseph
+ Date: 2025-01-16
+
+ Most of the configObjects and configOptions that are implemented with
+ ACO or Sorcery now have `<since>/<version>` elements added. There are
+ probably some that the script I used didn't catch. The version tags were
+ determined by the following...
+ * Do a git blame on the API call that created the object or option.
+ * From the commit hash, grab the summary line.
+ * Do a `git log --grep <summary>` to find the cherry-pick commits in all
+ branches that match.
+ * Do a `git patch-id` to ensure the commits are all related and didn't get
+ a false match on the summary.
+ * Do a `git tag --contains <commit>` to find the tags that contain each
+ commit.
+ * Weed out all tags not <major>.<minor>.0.
+ * Sort and discard any <major>.0.0 and following tags where the commit
+ appeared in an earlier branch.
+ * The result is a single tag for each branch where the API was last touched.
+
+ configObjects and configOptions elements implemented with the base
+ ast_config APIs were just not possible to find due to the non-deterministic
+ way they are accessed.
+
+ Also note that if the API call was on modified after it was added, the
+ version will be the one it was last modified in.
+
+ Final note: The configObject and configOption elements were introduced in
+ 12.0.0 so options created before then may not have any XML documentation.
+
+
+#### res_pjsip_authenticator_digest: Fix issue with missing auth and DONT_OPTIMIZE
+ Author: George Joseph
+ Date: 2025-01-17
+
+ The return code fom digest_check_auth wasn't explicitly being initialized.
+ The return code also wasn't explicitly set to CHALLENGE when challenges
+ were sent. When optimization was turned off (DONT_OPTIMIZE), the compiler
+ was setting it to "0"(CHALLENGE) which worked fine. However, with
+ optimization turned on, it was setting it to "1" (SUCCESS) so if there was
+ no incoming Authorization header, the function was returning SUCCESS to the
+ distributor allowing the request to incorrectly succeed.
+
+ The return code is now initialized correctly and is now explicitly set
+ to CHALLENGE when we send challenges.
+
+
+#### ast_tls_cert: Add option to skip passphrase for CA private key.
+ Author: Naveen Albert
+ Date: 2025-01-14
+
+ Currently, the ast_tls_cert file is hardcoded to use the -des3 option
+ for 3DES encryption, and the script needs to be manually modified
+ to not require a passphrase. Add an option (-e) that disables
+ encryption of the CA private key so no passphrase is required.
+
+ Resolves: #1064
+
+#### chan_iax2: Avoid unnecessarily backlogging non-voice frames.
+ Author: Naveen Albert
+ Date: 2025-01-09
+
+ Currently, when receiving an unauthenticated call, we keep track
+ of the negotiated format in the chosenformat, which allows us
+ to later create the channel using the right format. However,
+ this was not done for authenticated calls. This meant that in
+ certain circumstances, if we had not yet received a voice frame
+ from the peer, only certain other types of frames (e.g. text),
+ there were no variables containing the appropriate frame.
+ This led to problems in the jitterbuffer callback where we
+ unnecessarily bailed out of retrieving a frame from the jitterbuffer.
+ This was logic intentionally added in commit 73103bdcd5b342ce5dfa32039333ffadad551151
+ in response to an earlier regression, and while this prevents
+ crashes, it also backlogs legitimate frames unnecessarily.
+
+ The abort logic was initially added because at this point in the
+ code, we did not have the negotiated format available to us.
+ However, it should always be available to us as a last resort
+ in chosenformat, so we now pull it from there if needed. This
+ allows us to process frames the jitterbuffer even if voicefmt
+ and peerfmt aren't set and still avoid the crash. The failsafe
+ logic is retained, but now it shouldn't be triggered anymore.
+
+ Resolves: #1054
+
+#### config.c: fix #tryinclude being converted to #include on rewrite
+ Author: Allan Nathanson
+ Date: 2024-09-16
+
+ Correct an issue in ast_config_text_file_save2() when updating configuration
+ files with "#tryinclude" statements. The API currently replaces "#tryinclude"
+ with "#include". The API also creates empty template files if the referenced
+ files do not exist. This change resolves these problems.
+
+ Resolves: https://github.com/asterisk/asterisk/issues/920
+
+#### sig_analog: Add Last Number Redial feature.
+ Author: Naveen Albert
+ Date: 2023-11-10
+
+ This adds the Last Number Redial feature to
+ simple switch.
+
+ UserNote: Users can now redial the last number
+ called if the lastnumredial setting is set to yes.
+
+ Resolves: #437
+
+#### docs: Various XML fixes
+ Author: George Joseph
+ Date: 2025-01-15
+
+ * channels/pjsip/dialplan_functions_doc.xml: Added xmlns:xi to docs element.
+
+ * main/bucket.c: Removed XML completely since the "bucket" and "file" objects
+ are internal only with no config file.
+
+ * main/named_acl.c: Fixed the configFile element name. It was "named_acl.conf"
+ and should have been "acl.conf"
+
+ * res/res_geolocation/geoloc_doc.xml: Added xmlns:xi to docs element.
+
+ * res/res_http_media_cache.c: Fixed the configFile element name. It was
+ "http_media_cache.conf" and should have been "res_http_media_cache.conf".
+
+
+#### strings.c: Improve numeric detection in `ast_strings_match()`.
+ Author: Sean Bright
+ Date: 2025-01-15
+
+ Essentially, we were treating 1234x1234 and 1234x5678 as 'equal'
+ because we were able to convert the prefix of each of these strings to
+ the same number.
+
+ Resolves: #1028
+
+#### docs: Enable since/version handling for XML, CLI and ARI documentation
+ Author: George Joseph
+ Date: 2025-01-09
+
+ * Added the "since" element to the XML configObject and configOption elements
+ in appdocsxml.dtd.
+
+ * Added the "Since" section to the following CLI output:
+ ```
+ config show help <module> <object>
+ config show help <module> <object> <option>
+ core show application <app>
+ core show function <func>
+ manager show command <command>
+ manager show event <event>
+ agi show commands topic <topic>
+ ```
+
+ * Refactored the commands above to output their sections in the same order:
+ Synopsis, Since, Description, Syntax, Arguments, SeeAlso
+
+ * Refactored the commands above so they all use the same pattern for writing
+ the output to the CLI.
+
+ * Fixed several memory leaks caused by failure to free temporary output
+ buffers.
+
+ * Added a "since" array to the mustache template for the top-level resources
+ (Channel, Endpoint, etc.) and to the paths/methods underneath them. These
+ will be added to the generated markdown if present.
+ Example:
+ ```
+ "resourcePath": "/api-docs/channels.{format}",
+ "requiresModules": [
+ "res_stasis_answer",
+ "res_stasis_playback",
+ "res_stasis_recording",
+ "res_stasis_snoop"
+ ],
+ "since": [
+ "18.0.0",
+ "21.0.0"
+ ],
+ "apis": [
+ {
+ "path": "/channels",
+ "description": "Active channels",
+ "operations": [
+ {
+ "httpMethod": "GET",
+ "since": [
+ "18.6.0",
+ "21.8.0"
+ ],
+ "summary": "List all active channels in Asterisk.",
+ "nickname": "list",
+ "responseClass": "List[Channel]"
+ },
+
+ ```
+
+ NOTE: No versioning information is actually added in this commit.
+ Those will be added separately and instructions for adding and maintaining
+ them will be published on the documentation site at a later date.
+
+
+#### logger.h: Fix build when AST_DEVMODE is not defined.
+ Author: Artem Umerov
+ Date: 2025-01-13
+
+ Resolves: #1058
+
+#### dialplan_functions_doc.xml: Document PJSIP_MEDIA_OFFER's `media` argument.
+ Author: Sean Bright
+ Date: 2025-01-14
+
+ Resolves: #1023
+
+#### samples: Use "asterisk" instead of "postgres" for username
+ Author: Abdelkader Boudih
+ Date: 2025-01-07
+
+
+#### manager: Add `<since>` tags for all AMI actions.
+ Author: Sean Bright
+ Date: 2025-01-02
+
+
+#### logger.c fix: malformed JSON template
+ Author: Steffen Arntz
+ Date: 2025-01-08
+
+ this typo was mentioned before, but never got fixed.
+ https://community.asterisk.org/t/logger-cannot-log-long-json-lines-properly/87618/6
+
+
+#### manager.c: Rename restrictedFile to is_restricted_file.
+ Author: Sean Bright
+ Date: 2025-01-09
+
+ Also correct the spelling of 'privileges.'
+
+
+#### res_config_pgsql: normalize database connection option with cel and cdr by sup..
+ Author: Abdelkader Boudih
+ Date: 2025-01-08
+
+
+#### res_pjproject: Fix typo (OpenmSSL->OpenSSL)
+ Author: Stanislav Abramenkov
+ Date: 2025-01-10
+
+ Fix typo (OpenmSSL->OpenSSL) mentioned by bkford in #972
+
+
+#### Add SHA-256 and SHA-512-256 as authentication digest algorithms
+ Author: George Joseph
+ Date: 2024-10-17
+
+ * Refactored pjproject code to support the new algorithms and
+ added a patch file to third-party/pjproject/patches
+
+ * Added new parameters to the pjsip auth object:
+ * password_digest = <algorithm>:<digest>
+ * supported_algorithms_uac = List of algorithms to support
+ when acting as a UAC.
+ * supported_algorithms_uas = List of algorithms to support
+ when acting as a UAS.
+ See the auth object in pjsip.conf.sample for detailed info.
+
+ * Updated both res_pjsip_authenticator_digest.c (for UAS) and
+ res_pjsip_outbound_authentocator_digest.c (UAC) to suport the
+ new algorithms.
+
+ The new algorithms are only available with the bundled version
+ of pjproject, or an external version > 2.14.1. OpenSSL version
+ 1.1.1 or greater is required to support SHA-512-256.
+
+ Resolves: #948
+
+ UserNote: The SHA-256 and SHA-512-256 algorithms are now available
+ for authentication as both a UAS and a UAC.
+
+
+#### config.c: retain leading whitespace before comments
+ Author: Allan Nathanson
+ Date: 2024-10-30
+
+ Configurations loaded with the ast_config_load2() API and later written
+ out with ast_config_text_file_save2() will have any leading whitespace
+ stripped away. The APIs should make reasonable efforts to maintain the
+ content and formatting of the configuration files.
+
+ This change retains any leading whitespace from comment lines that start
+ with a ";".
+
+ Resolves: https://github.com/asterisk/asterisk/issues/970
+
+#### config.c: Fix off-nominal reference leak.
+ Author: Sean Bright
+ Date: 2025-01-07
+
+ This was identified and fixed by @Allan-N in #918 but it is an
+ important fix in its own right.
+
+ The fix here is slightly different than Allan's in that we just move
+ the initialization of the problematic AO2 container to where it is
+ first used.
+
+ Fixes #1046
+
+
+#### normalize contrib/ast-db-manage/queue_log.ini.sample
+ Author: Abdelkader Boudih
+ Date: 2025-01-05
+
+
+#### Add C++ Standard detection to configure and fix a new C++20 compile issue
+ Author: George Joseph
+ Date: 2025-01-03
+
+ * The autoconf-archive package contains macros useful for detecting C++
+ standard and testing other C++ capabilities but that package was never
+ included in the install_prereq script so many existing build environments
+ won't have it. Even if it is installed, older versions won't newer C++
+ standards and will actually cause an error if you try to test for that
+ version. To make it available for those environments, the
+ ax_cxx_compile_stdcxx.m4 macro has copied from the latest release of
+ autoconf-archive into the autoconf directory.
+
+ * A convenience wrapper(ast_cxx_check_std) around ax_cxx_compile_stdcxx was
+ also added so checking the standard version and setting the
+ asterisk-specific PBX_ variables becomes a one-liner:
+ `AST_CXX_CHECK_STD([std], [force_latest_std])`.
+ Calling that with a version of `17` for instance, will set PBX_CXX17
+ to 0 or 1 depending on whether the current c++ compiler supports stdc++17.
+ HAVE_CXX17 will also be 'defined" or not depending on the result.
+
+ * C++ compilers hardly ever default to the latest standard they support. g++
+ version 14 for instance supports up to C++23 but only uses C++17 by default.
+ If you want to use C++23, you have to add `-std=gnu++=23` to the g++
+ command line. If you set the second argument of AST_CXX_CHECK_STD to "yes",
+ the macro will automatically keep the highest `-std=gnu++` value that
+ worked and pass that to the Makefiles.
+
+ * The autoconf-archive package was added to install_prereq for future use.
+
+ * Updated configure.ac to use AST_CXX_CHECK_STD() to check for C++
+ versions 11, 14, 17, 20 and 23.
+
+ * Updated configure.ac to accept the `--enable-latest-cxx-std` option which
+ will set the second option to AST_CXX_CHECK_STD() to "yes". The default
+ is "no".
+
+ * ast_copy_string() in strings.h declares the 'sz' variable as volatile and
+ does an `sz--` on it later. C++20 no longer allows the `++` and `--`
+ increment and decrement operators to be used on variables declared as
+ volatile however so that was changed to `sz -= 1`.
+
+
+#### chan_dahdi: Fix wrong channel state when RINGING recieved.
+ Author: Naveen Albert
+ Date: 2024-12-16
+
+ Previously, when AST_CONTROL_RINGING was received by
+ a DAHDI device, it would set its channel state to
+ AST_STATE_RINGING. However, an analysis of the codebase
+ and other channel drivers reveals RINGING corresponds to
+ physical power ringing, whereas AST_STATE_RING should be
+ used for audible ringback on the channel. This also ensures
+ the correct device state is returned by the channel state
+ to device state conversion.
+
+ Since there seems to be confusion in various places regarding
+ AST_STATE_RING vs. AST_STATE_RINGING, some documentation has
+ been added or corrected to clarify the actual purposes of these
+ two channel states, and the associated device state mapping.
+
+ An edge case that prompted this fix, but isn't explicitly
+ addressed here, is that of an incoming call to an FXO port.
+ The channel state will be "Ring", which maps to a device state
+ of "In Use", not "Ringing" as would be more intuitive. However,
+ this is semantic, since technically, Asterisk is treating this
+ the same as any other incoming call, and so "Ring" is the
+ semantic state (put another way, Asterisk isn't ringing anything,
+ like in the cases where channels are in the "Ringing" state).
+
+ Since FXO ports don't currently support Call Waiting, a suitable
+ workaround for the above would be to ignore the device state and
+ instead check the channel state (e.g. IMPORT(DAHDI/1-1,CHANNEL(state)))
+ since it will be Ring if the FXO port is idle (but a call is ringing
+ on it) and Up if the FXO port is actually in use. (In both cases,
+ the device state would misleadingly be "In Use".)
+
+ Resolves: #1029
+
+#### Upgrade bundled pjproject to 2.15.1 Resolves: asterisk#1016
+ Author: Stanislav Abramenkov
+ Date: 2024-12-03
+
+ UserNote: Bundled pjproject has been upgraded to 2.15.1. For more
+ information visit pjproject Github page: https://github.com/pjsip/pjproject/releases/tag/2.15.1
+
+
+#### gcc14: Fix issues caught by gcc 14
+ Author: George Joseph
+ Date: 2025-01-03
+
+ * test_message.c: Fix segfaults caused by passing NULL as an sprintf fmt.
+
+
+#### Header fixes for compiling C++ source files
+ Author: George Joseph
+ Date: 2024-12-31
+
+ A few tweaks needed to be done to some existing header files to allow them to
+ be compiled when included from C++ source files.
+
+ logger.h had declarations for ast_register_verbose() and
+ ast_unregister_verbose() which caused C++ issues but those functions were
+ actually removed from logger.c many years ago so the declarations were just
+ removed from logger.h.
+
+
+#### Add ability to pass arguments to unit tests from the CLI
+ Author: George Joseph
+ Date: 2024-12-27
+
+ Unit tests can now be passed custom arguments from the command
+ line. For example, the following command would run the "mytest" test
+ in the "/main/mycat" category with the option "myoption=54"
+
+ `CLI> test execute category /main/mycat name mytest options myoption=54`
+
+ You can also pass options to an entire category...
+
+ `CLI> test execute category /main/mycat options myoption=54`
+
+ Basically, everything after the "options" keyword is passed verbatim to
+ the test which must decide what to do with it.
+
+ * A new API ast_test_get_cli_args() was created to give the tests access to
+ the cli_args->argc and cli_args->argv elements.
+
+ * Although not needed for the option processing, a new macro
+ ast_test_validate_cleanup_custom() was added to test.h that allows you
+ to specify a custom error message instead of just "Condition failed".
+
+ * The test_skel.c was updated to demonstrate parsing options and the use
+ of the ast_test_validate_cleanup_custom() macro.
+
+
+#### res_pjsip: Add new AOR option "qualify_2xx_only"
+ Author: Kent
+ Date: 2024-12-03
+
+ Added a new option "qualify_2xx_only" to the res_pjsip AOR qualify
+ feature to mark a contact as available only if an OPTIONS request
+ returns a 2XX response. If the option is not specified or is false,
+ any response to the OPTIONS request marks the contact as available.
+
+ UserNote: The pjsip.conf AOR section now has a "qualify_2xx_only"
+ option that can be set so that only 2XX responses to OPTIONS requests
+ used to qualify a contact will mark the contact as available.
+
+
+#### res_odbc: release threads from potential starvation.
+ Author: Jaco Kroon
+ Date: 2024-12-10
+
+ Whenever a slot is freed up due to a failed connection, wake up a waiter
+ before failing.
+
+ In the case of a dead connection there could be waiters, for example,
+ let's say two threads tries to acquire objects at the same time, with
+ one in the cached connections, one will acquire the dead connection, and
+ the other will enter into the wait state. The thread with the dead
+ connection will clear up the dead connection, and then attempt a
+ re-acquire (at this point there cannot be cached connections else the
+ other thread would have received that and tried to clean up), as such,
+ at this point we're guaranteed that either there are no waiting threads,
+ or that the maxconnections - connection_cnt threads will attempt to
+ re-acquire connections, and then either succeed, using those
+ connections, or failing, and then signalling to release more waiters.
+
+ Also fix the pointer log for ODBC handle %p dead which would always
+ reflect NULL.
+
+ Signed-off-by: Jaco Kroon <jaco@uls.co.za>
+
+#### app_queue: indicate the paused state of a dynamically added member in queue_log.
+ Author: Sperl Viktor
+ Date: 2024-12-05
+
+ Fixes: #1021
+
+#### Allow C++ source files (as extension .cc) in the main directory
+ Author: George Joseph
+ Date: 2024-12-09
+
+ Although C++ files (as extension .cc) have been handled in the module
+ directories for many years, the main directory was missing one line in its
+ Makefile that prevented C++ files from being recognised there.
+
+
+#### format_gsm.c: Added mime type
+ Author: Alexey Khabulyak
+ Date: 2024-12-03
+
+ Sometimes it's impossible to get a file extension from URL
+ (eg. http://example.com/gsm/your) so we have to rely on content-type header.
+ Currenly, asterisk does not support content-type for gsm format(unlike wav).
+ Added audio/gsm according to https://www.rfc-editor.org/rfc/rfc4856.html
+
+
+#### func_uuid: Add a new dialplan function to generate UUIDs
+ Author: Maksim Nesterov
+ Date: 2024-12-01
+
+ This function is useful for uniquely identifying calls, recordings, and other entities in distributed environments, as well as for generating an argument for the AudioSocket application.
+
+
+#### app_queue: allow dynamically adding a queue member in paused state.
+ Author: Sperl Viktor
+ Date: 2024-11-27
+
+ Fixes: #1007
+
+ UserNote: use the p option of AddQueueMember() for paused member state.
+ Optionally, use the r(reason) option to specify a custom reason for the pause.
+
+
+#### chan_iax2: Add log message for rejected calls.
+ Author: Naveen Albert
+ Date: 2023-11-06
+
+ Add a log message for a path that currently silently drops IAX2
+ frames without indicating that anything is wrong.
+
+
+#### chan_pjsip: Send VIDUPDATE RTP frame for all H.264 streams
+ Author: Maximilian Fridrich
+ Date: 2024-12-02
+
+ Currently, when a chan_pjsip channel receives a VIDUPDATE indication,
+ an RTP VIDUPDATE frame is only queued on a H.264 stream if WebRTC is
+ enabled on that endpoint. This restriction does not really make sense.
+
+ Now, a VIDUPDATE RTP frame is written even if WebRTC is not enabled (as
+ is the case with VP8, VP9, and H.265 streams).
+
+ Resolves: #1013
+
+#### audiohook.c: resolving the issue with audiohook both reading when packet loss ..
+ Author: Tinet-mucw
+ Date: 2024-08-22
+
+ When there is 0% packet loss on one side of the call and 15% packet loss on the other side, reading frame is often failed when reading direction_both audiohook. when read_factory available = 0, write_factory available = 320; i think write factory is usable read; because after reading one frame, there is still another frame that can be read together with the next read factory frame.
+
+ Resolves: #851
+
+#### res_curl.conf.sample: clean up sample configuration and add new SSL options
+ Author: Mike Pultz
+ Date: 2024-11-21
+
+ This update properly documents all the current configuration options supported
+ by the curl implementation, including the new ssl_* options.
+
+
+#### res_rtp_asterisk.c: Set Mark on rtp when timestamp skew is too big
+ Author: Viktor Litvinov
+ Date: 2024-10-02
+
+ Set Mark bit in rtp stream when timestamp skew is bigger than MAX_TIMESTAMP_SKEW.
+
+ Fixes: #927
+
+#### res_rtp_asterisk.c: Fix bridged_payload matching with sample rate for DTMF
+ Author: Alexey Vasilyev
+ Date: 2024-11-25
+
+ Fixes #1004
+
+
+#### manager.c: Add Processed Call Count to CoreStatus output
+ Author: Mike Pultz
+ Date: 2024-11-21
+
+ This update adds the processed call count to the CoreStatus AMI Action responsie. This output is
+ similar to the values returned by "core show channels" or "core show calls" in the CLI.
+
+ UserNote: The current processed call count is now returned as CoreProcessedCalls from the
+ CoreStatus AMI Action.
+
+
+#### func_curl.c: Add additional CURL options for SSL requests
+ Author: Mike Pultz
+ Date: 2024-11-09
+
+ This patch adds additional CURL TLS options / options to support mTLS authenticated requests:
+
+ * ssl_verifyhost - perform a host verification on the peer certificate (CURLOPT_SSL_VERIFYHOST)
+ * ssl_cainfo - define a CA certificate file (CURLOPT_CAINFO)
+ * ssl_capath - define a CA certificate directory (CURLOPT_CAPATH)
+ * ssl_cert - define a client certificate for the request (CURLOPT_SSLCERT)
+ * ssl_certtype - specify the client certificate type (CURLOPT_SSLCERTTYPE)
+ * ssl_key - define a client private key for the request (CURLOPT_SSLKEY)
+ * ssl_keytype - specify the client private key type (CURLOPT_SSLKEYTYPE)
+ * ssl_keypasswd - set a password for the private key, if required (CURLOPT_KEYPASSWD)
+
+ UserNote: The following new configuration options are now available
+ in the res_curl.conf file, and the CURL() function: 'ssl_verifyhost'
+ (CURLOPT_SSL_VERIFYHOST), 'ssl_cainfo' (CURLOPT_CAINFO), 'ssl_capath'
+ (CURLOPT_CAPATH), 'ssl_cert' (CURLOPT_SSLCERT), 'ssl_certtype'
+ (CURLOPT_SSLCERTTYPE), 'ssl_key' (CURLOPT_SSLKEY), 'ssl_keytype',
+ (CURLOPT_SSLKEYTYPE) and 'ssl_keypasswd' (CURLOPT_KEYPASSWD). See the
+ libcurl documentation for more details.
+
+
+#### sig_analog: Fix regression with FGD and E911 signaling.
+ Author: Naveen Albert
+ Date: 2024-11-14
+
+ Commit 466eb4a52b69e6dead7ebba13a83f14ef8a559c1 introduced a regression
+ which completely broke Feature Group D and E911 signaling, by removing
+ the call to analog_my_getsigstr, which affected multiple switch cases.
+ Restore the original behavior for all protocols except Feature Group C
+ CAMA (MF), which is all that patch was attempting to target.
+
+ Resolves: #993
+
+#### main/stasis_channels.c: Fix crash when setting a global variable with invalid ..
+ Author: James Terhune
+ Date: 2024-11-18
+
+ Add check for null value of chan before referencing it with ast_channel_name()
+
+ Resolves: #999
+
+#### res_stir_shaken: Allow sending Identity headers for unknown TNs
+ Author: George Joseph
+ Date: 2024-11-08
+
+ Added a new option "unknown_tn_attest_level" to allow Identity
+ headers to be sent when a callerid TN isn't explicitly configured
+ in stir_shaken.conf. Since there's no TN object, a private_key_file
+ and public_cert_url must be configured in the attestation or profile
+ objects.
+
+ Since "unknown_tn_attest_level" uses the same enum as attest_level,
+ some of the sorcery macros had to be refactored to allow sharing
+ the enum and to/from string conversion functions.
+
+ Also fixed a memory leak in crypto_utils:pem_file_cb().
+
+ Resolves: #921
+
+ UserNote: You can now set the "unknown_tn_attest_level" option
+ in the attestation and/or profile objects in stir_shaken.conf to
+ enable sending Identity headers for callerid TNs not explicitly
+ configured.
+
+