Change Log for Release asterisk-20.6.0 ======================================== Links: ---------------------------------------- - [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.6.0.md) - [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.5.2...20.6.0) - [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.6.0.tar.gz) - [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk) Summary: ---------------------------------------- - logger: Fix linking regression. - Revert "core & res_pjsip: Improve topology change handling." - menuselect: Use more specific error message. - res_pjsip_nat: Fix potential use of uninitialized transport details - app_if: Fix faulty EndIf branching. - manager.c: Fix regression due to using wrong free function. - config_options.c: Fix truncation of option descriptions. - manager.c: Improve clarity of "manager show connected". - make_xml_documentation: Really collect LOCAL_MOD_SUBDIRS documentation. - general: Fix broken links. - MergeApproved.yml: Remove unneeded concurrency - app_dial: Add option "j" to preserve initial stream topology of caller - ast_coredumper: Increase reliability - logger.c: Move LOG_GROUP documentation to dedicated XML file. - res_odbc.c: Allow concurrent access to request odbc connections - res_pjsip_header_funcs.c: Check URI parameter length before copying. - config.c: Log #exec include failures. - make_xml_documentation: Properly handle absolute LOCAL_MOD_SUBDIRS. - app_voicemail.c: Completely resequence mailbox folders. - sig_analog: Fix channel leak when mwimonitor is enabled. - res_rtp_asterisk.c: Update for OpenSSL 3+. - alembic: Update list of TLS methods available on ps_transports. - func_channel: Expose previously unsettable options. - app.c: Allow ampersands in playback lists to be escaped. - uri.c: Simplify ast_uri_make_host_with_port() - func_curl.c: Remove CURLOPT() plaintext documentation. - res_http_websocket.c: Set hostname on client for certificate validation. - live_ast: Add astcachedir to generated asterisk.conf. - SECURITY.md: Update with correct documentation URL - func_lock: Add missing see-also refs to documentation. - app_followme.c: Grab reference on nativeformats before using it - configs: Improve documentation for bandwidth in iax.conf. - logger: Add channel-based filtering. - chan_iax2.c: Don't send unsanitized data to the logger. - codec_ilbc: Disable system ilbc if version >= 3.0.0 - resource_channels.c: Explicit codec request when creating UnicastRTP. - doc: Update IP Quality of Service links. - chan_pjsip: Add PJSIPHangup dialplan app and manager action - chan_iax2.c: Ensure all IEs are displayed when dumping frame contents. - chan_dahdi: Warn if nonexistent cadence is requested. - stasis: Update the snapshot after setting the redirect - ari: Provide the caller ID RDNIS for the channels - main/utils: Implement ast_get_tid() for OpenBSD - res_rtp_asterisk.c: Fix runtime issue with LibreSSL - app_directory: Add ADSI support to Directory. - core_local: Fix local channel parsing with slashes. - Remove files that are no longer updated - app_voicemail: Add AMI event for mailbox PIN changes. - app_queue.c: Emit unpause reason with PauseQueueMember event. - bridge_simple: Suppress unchanged topology change requests - res_pjsip: Include cipher limit in config error message. - res_speech: allow speech to translate input channel - res_rtp_asterisk.c: Fix memory leak in ephemeral certificate creation. - res_pjsip_dtmf_info.c: Add 'INFO' to Allow header. - api.wiki.mustache: Fix indentation in generated markdown - pjsip_configuration.c: Disable DTLS renegotiation if WebRTC is enabled. - configs: Fix typo in pjsip.conf.sample. - res_pjsip_exten_state,res_pjsip_mwi: Allow unload on shutdown - res_pjsip: Expanding PJSIP endpoint ID and relevant resource length to 255 characters - .github: PRSubmitActions: Fix adding reviewers to PR - .github: New PR Submit workflows - .github: New PR Submit workflows - res_stasis: signal when new command is queued - ari/stasis: Indicate progress before playback on a bridge - func_curl.c: Ensure channel is locked when manipulating datastores. - .github: Fix job prereqs in PROpenedUpdated - .github: Block PR tests until approved - Update config.yml - logger.h: Add ability to change the prefix on SCOPE_TRACE output - Add libjwt to third-party - res_pjsip: update qualify_timeout documentation with DNS note - chan_dahdi: Clarify scope of callgroup/pickupgroup. - func_json: Fix crashes for some types - res_speech_aeap: add aeap error handling - app_voicemail: Disable ADSI if unavailable. - codec_builtin: Use multiples of 20 for maximum_ms - lock.c: Separate DETECT_DEADLOCKS from DEBUG_THREADS - asterisk.c: Use the euid's home directory to read/write cli history - res_pjsip_transport_websocket: Prevent transport from being destroyed before message finishes. - cel: add publish user event helper - chan_console: Fix deadlock caused by unclean thread exit. - file.c: Add ability to search custom dir for sounds - chan_iax2: Improve authentication debugging. - res_rtp_asterisk: fix wrong counter management in ioqueue objects - make_buildopts_h, et. al. Allow adding all cflags to buildopts.h - func_periodic_hook: Add hangup step to avoid timeout - res_stasis_recording.c: Save recording state when unmuted. - res_speech_aeap: check for null format on response - func_periodic_hook: Don't truncate channel name - safe_asterisk: Change directory permissions to 755 - chan_rtp: Implement RTP glue for UnicastRTP channels - app_queue: periodic announcement configurable start time. - variables: Add additional variable dialplan functions. - Restore CHANGES and UPGRADE.txt to allow cherry-picks to work User Notes: ---------------------------------------- - ### app_dial: Add option "j" to preserve initial stream topology of caller The option "j" is now available for the Dial application which uses the initial stream topology of the caller to create the outgoing channels. - ### logger: Add channel-based filtering. The console log can now be filtered by channels or groups of channels, using the logger filter CLI commands. - ### chan_pjsip: Add PJSIPHangup dialplan app and manager action A new dialplan app PJSIPHangup and AMI action allows you to hang up an unanswered incoming PJSIP call with a specific SIP response code in the 400 -> 699 range. - ### app_voicemail: Add AMI event for mailbox PIN changes. The VoicemailPasswordChange event is now emitted whenever a mailbox password is updated, containing the mailbox information and the new password. Resolves: #398 - ### res_speech: allow speech to translate input channel res_speech now supports translation of an input channel to a format supported by the speech provider, provided a translation path is available between the source format and provider capabilites. - ### res_pjsip: Expanding PJSIP endpoint ID and relevant resource length to 255 characters With this update, the PJSIP realm lengths have been extended to support up to 255 characters. - ### res_stasis: signal when new command is queued Call setup times should be significantly improved when using ARI. - ### lock.c: Separate DETECT_DEADLOCKS from DEBUG_THREADS You no longer need to select DEBUG_THREADS to use DETECT_DEADLOCKS. This removes a significant amount of overhead if you just want to detect possible deadlocks vs needing full lock tracing. - ### file.c: Add ability to search custom dir for sounds A new option "sounds_search_custom_dir" has been added to asterisk.conf that allows asterisk to search AST_DATA_DIR/sounds/custom for sounds files before searching the standard AST_DATA_DIR/sounds/ directory. - ### make_buildopts_h, et. al. Allow adding all cflags to buildopts.h The "Build Options" entry in the "core show settings" CLI command has been renamed to "ABI related Build Options" and a new entry named "All Build Options" has been added that shows both breaking and non-breaking options. - ### chan_rtp: Implement RTP glue for UnicastRTP channels The dial string option 'g' was added to the UnicastRTP channel which enables RTP glue and therefore native RTP bridges with those channels. - ### app_queue: periodic announcement configurable start time. Introduce a new queue configuration option called 'periodic-announce-startdelay' which will vary the normal (historic) behavior of starting the periodic announcement cycle at periodic-announce-frequency seconds after entering the queue to start the periodic announcement cycle at period-announce-startdelay seconds after joining the queue. The default behavior if this config option is not set remains unchanged. Signed-off-by: Jaco Kroon - ### variables: Add additional variable dialplan functions. Four new dialplan functions have been added. GLOBAL_DELETE and DELETE have been added which allows the deletion of global and channel variables. GLOBAL_EXISTS and VARIABLE_EXISTS have been added which checks whether a global or channel variable has been set. Upgrade Notes: ---------------------------------------- - ### app.c: Allow ampersands in playback lists to be escaped. Ampersands in URLs passed to the `Playback()`, `Background()`, `SpeechBackground()`, `Read()`, `Authenticate()`, or `Queue()` applications as filename arguments can now be escaped by single quoting the filename. Additionally, this is also possible when using the `CONFBRIDGE` dialplan function, or configuring various features in `confbridge.conf` and `queues.conf`. - ### pjsip_configuration.c: Disable DTLS renegotiation if WebRTC is enabled. The dtls_rekey will be disabled if webrtc support is requested on an endpoint. A warning will also be emitted. - ### res_pjsip: Expanding PJSIP endpoint ID and relevant resource length to 255 characters As part of this update, the maximum allowable length for PJSIP endpoints and relevant resources has been increased from 40 to 255 characters. To take advantage of this enhancement, it is recommended to run the necessary procedures (e.g., Alembic) to update your schemas. Closed Issues: ---------------------------------------- - #84: [bug]: codec_ilbc: Fails to build with ilbc version 3.0.4 - #129: [bug]: res_speech_aeap: Crash due to NULL format on setup - #242: [new-feature]: logger: Allow filtering logs in CLI by channel - #248: [bug]: core_local: Local channels cannot have slashes in the destination - #260: [bug]: maxptime must be changed to multiples of 20 - #286: [improvement]: chan_iax2: Improve authentication debugging - #289: [new-feature]: Add support for deleting channel and global variables - #294: [improvement]: chan_dahdi: Improve call pickup documentation - #298: [improvement]: chan_rtp: Implement RTP glue - #301: [bug]: Number of ICE TURN threads continually growing - #303: [bug]: SpeechBackground never exits - #308: [bug]: chan_console: Deadlock when hanging up console channels - #315: [improvement]: Search /var/lib/asterisk/sounds/custom for sound files before /var/lib/asterisk/sounds/ - #316: [bug]: Privilege Escalation in Astrisk's Group permissions. - #319: [bug]: func_periodic_hook truncates long channel names when setting EncodedChannel - #321: [bug]: Performance suffers unnecessarily when debugging deadlocks - #325: [bug]: hangup after beep to avoid waiting for timeout - #330: [improvement]: Add cel user event helper function - #337: [bug]: asterisk.c: The CLI history file is written to the wrong directory in some cases - #341: [bug]: app_if.c : nested EndIf incorrectly exits parent If - #345: [improvement]: Increase pj_sip Realm Size to 255 Characters for Improved Functionality - #349: [improvement]: Add libjwt to third-party - #352: [bug]: Update qualify_timeout documentation to include DNS note - #354: [improvement]: app_voicemail: Disable ADSI if unavailable on a line - #356: [new-feature]: app_directory: Add ADSI support. - #360: [improvement]: Update documentation for CHANGES/UPGRADE files - #362: [improvement]: Speed up ARI command processing - #379: [bug]: Orphaned taskprocessors cause shutdown delays - #384: [bug]: Unnecessary re-INVITE after answer - #388: [bug]: Crash in app_followme.c due to not acquiring a reference to nativeformats - #396: [improvement]: res_pjsip: Specify max ciphers allowed if too many provided - #398: [new-feature]: app_voicemail: Add AMI event for password change - #409: [improvement]: chan_dahdi: Emit warning if specifying nonexistent cadence - #423: [improvement]: func_lock: Add missing see-also refs - #425: [improvement]: configs: Improve documentation for bandwidth in iax.conf.sample - #428: [bug]: cli: Output is truncated from "config show help" - #430: [bug]: Fix broken links - #442: [bug]: func_channel: Some channel options are not settable - #445: [bug]: ast_coredumper isn't figuring out file locations properly in all cases - #458: [bug]: Memory leak in chan_dahdi when mwimonitor=yes on FXO - #462: [new-feature]: app_dial: Add new option to preserve initial stream topology of caller - #465: [improvement]: Change res_odbc connection pool request logic to not lock around blocking operations - #482: [improvement]: manager.c: Improve clarity of "manager show connected" output - #509: [bug]: res_pjsip: Crash when looking up transport state in use - #513: [bug]: manager.c: Crash due to regression using wrong free function when built with MALLOC_DEBUG - #520: [improvement]: menuselect: Use more specific error message. - #530: [bug]: bridge_channel.c: Stream topology change amplification with multiple layers of Local channels - #539: [bug]: Existence of logger.xml causes linking failure Commits By Author: ---------------------------------------- - ### Asterisk Development Team (2): - Update for 20.6.0-rc1 - Update for 20.6.0-rc2 - ### Bastian Triller (1): - func_json: Fix crashes for some types - ### Brad Smith (2): - res_rtp_asterisk.c: Fix runtime issue with LibreSSL - main/utils: Implement ast_get_tid() for OpenBSD - ### Eduardo (1): - codec_builtin: Use multiples of 20 for maximum_ms - ### George Joseph (23): - Restore CHANGES and UPGRADE.txt to allow cherry-picks to work - safe_asterisk: Change directory permissions to 755 - func_periodic_hook: Don't truncate channel name - make_buildopts_h, et. al. Allow adding all cflags to buildopts.h - file.c: Add ability to search custom dir for sounds - asterisk.c: Use the euid's home directory to read/write cli history - lock.c: Separate DETECT_DEADLOCKS from DEBUG_THREADS - Add libjwt to third-party - logger.h: Add ability to change the prefix on SCOPE_TRACE output - .github: Block PR tests until approved - .github: Fix job prereqs in PROpenedUpdated - .github: New PR Submit workflows - .github: New PR Submit workflows - .github: PRSubmitActions: Fix adding reviewers to PR - res_pjsip_exten_state,res_pjsip_mwi: Allow unload on shutdown - api.wiki.mustache: Fix indentation in generated markdown - bridge_simple: Suppress unchanged topology change requests - chan_pjsip: Add PJSIPHangup dialplan app and manager action - codec_ilbc: Disable system ilbc if version >= 3.0.0 - SECURITY.md: Update with correct documentation URL - ast_coredumper: Increase reliability - MergeApproved.yml: Remove unneeded concurrency - Revert "core & res_pjsip: Improve topology change handling." - ### Holger Hans Peter Freyther (3): - ari/stasis: Indicate progress before playback on a bridge - ari: Provide the caller ID RDNIS for the channels - stasis: Update the snapshot after setting the redirect - ### Jaco Kroon (1): - app_queue: periodic announcement configurable start time. - ### Joshua C. Colp (2): - variables: Add additional variable dialplan functions. - Update config.yml - ### Mark Murawski (1): - Remove files that are no longer updated - ### Matthew Fredrickson (2): - app_followme.c: Grab reference on nativeformats before using it - res_odbc.c: Allow concurrent access to request odbc connections - ### Maximilian Fridrich (3): - chan_rtp: Implement RTP glue for UnicastRTP channels - app_dial: Add option "j" to preserve initial stream topology of caller - res_pjsip_nat: Fix potential use of uninitialized transport details - ### Mike Bradeen (7): - res_speech_aeap: check for null format on response - func_periodic_hook: Add hangup step to avoid timeout - cel: add publish user event helper - res_speech_aeap: add aeap error handling - res_pjsip: update qualify_timeout documentation with DNS note - res_stasis: signal when new command is queued - res_speech: allow speech to translate input channel - ### Naveen Albert (21): - chan_iax2: Improve authentication debugging. - chan_console: Fix deadlock caused by unclean thread exit. - app_voicemail: Disable ADSI if unavailable. - chan_dahdi: Clarify scope of callgroup/pickupgroup. - res_pjsip: Include cipher limit in config error message. - app_voicemail: Add AMI event for mailbox PIN changes. - core_local: Fix local channel parsing with slashes. - app_directory: Add ADSI support to Directory. - chan_dahdi: Warn if nonexistent cadence is requested. - logger: Add channel-based filtering. - configs: Improve documentation for bandwidth in iax.conf. - func_lock: Add missing see-also refs to documentation. - func_channel: Expose previously unsettable options. - sig_analog: Fix channel leak when mwimonitor is enabled. - general: Fix broken links. - manager.c: Improve clarity of "manager show connected". - config_options.c: Fix truncation of option descriptions. - manager.c: Fix regression due to using wrong free function. - app_if: Fix faulty EndIf branching. - menuselect: Use more specific error message. - logger: Fix linking regression. - ### Samuel Olaechea (1): - configs: Fix typo in pjsip.conf.sample. - ### Sean Bright (23): - res_stasis_recording.c: Save recording state when unmuted. - func_curl.c: Ensure channel is locked when manipulating datastores. - pjsip_configuration.c: Disable DTLS renegotiation if WebRTC is enabled. - res_pjsip_dtmf_info.c: Add 'INFO' to Allow header. - res_rtp_asterisk.c: Fix memory leak in ephemeral certificate creation. - app_queue.c: Emit unpause reason with PauseQueueMember event. - chan_iax2.c: Ensure all IEs are displayed when dumping frame contents. - doc: Update IP Quality of Service links. - resource_channels.c: Explicit codec request when creating UnicastRTP. - chan_iax2.c: Don't send unsanitized data to the logger. - live_ast: Add astcachedir to generated asterisk.conf. - res_http_websocket.c: Set hostname on client for certificate validation. - func_curl.c: Remove CURLOPT() plaintext documentation. - uri.c: Simplify ast_uri_make_host_with_port() - app.c: Allow ampersands in playback lists to be escaped. - alembic: Update list of TLS methods available on ps_transports. - res_rtp_asterisk.c: Update for OpenSSL 3+. - app_voicemail.c: Completely resequence mailbox folders. - make_xml_documentation: Properly handle absolute LOCAL_MOD_SUBDIRS. - config.c: Log #exec include failures. - res_pjsip_header_funcs.c: Check URI parameter length before copying. - logger.c: Move LOG_GROUP documentation to dedicated XML file. - make_xml_documentation: Really collect LOCAL_MOD_SUBDIRS documentation. - ### Tinet-mucw (1): - res_pjsip_transport_websocket: Prevent transport from being destroyed before message finishes. - ### Vitezslav Novy (1): - res_rtp_asterisk: fix wrong counter management in ioqueue objects - ### sungtae kim (1): - res_pjsip: Expanding PJSIP endpoint ID and relevant resource length to 255 characters Detail: ---------------------------------------- - ### logger: Fix linking regression. Author: Naveen Albert Date: 2024-01-16 Commit 008731b0a4b96c4e6c340fff738cc12364985b64 caused a regression by resulting in logger.xml being compiled and linked into the asterisk binary in lieu of logger.c on certain platforms if Asterisk was compiled in dev mode. To fix this, we ensure the file has a unique name without the extension. Most existing .xml files have been named differently from any .c files in the same directory or did not pose this issue. channels/pjsip/dialplan_functions.xml does not pose this issue but is also being renamed to adhere to this policy. Resolves: #539 - ### Revert "core & res_pjsip: Improve topology change handling." Author: George Joseph Date: 2024-01-12 This reverts commit 315eb551dbd18ecd424a2f32179d4c1f6f6edd26. Over the past year, we've had several reports of "topology storms" occurring where 2 external facing channels connected by one or more local channels and bridges will get themselves in a state where they continually send each other topology change requests. This usually manifests itself in no-audio calls and a flood of "Exceptionally long queue length" messages. It appears that this commit is the cause so we're reverting it for now until we can determine a more appropriate solution. Resolves: #530 - ### menuselect: Use more specific error message. Author: Naveen Albert Date: 2024-01-04 Instead of using the same error message for missing dependencies and conflicts, be specific about what actually went wrong. Resolves: #520 - ### res_pjsip_nat: Fix potential use of uninitialized transport details Author: Maximilian Fridrich Date: 2024-01-08 The ast_sip_request_transport_details must be zero initialized, otherwise this could lead to a SEGV. Resolves: #509 - ### app_if: Fix faulty EndIf branching. Author: Naveen Albert Date: 2023-12-23 This fixes faulty branching logic for the EndIf application. Instead of computing the next priority, which should be done for false conditionals or ExitIf, we should simply advance to the next priority. Resolves: #341 - ### manager.c: Fix regression due to using wrong free function. Author: Naveen Albert Date: 2023-12-26 Commit 424be345639d75c6cb7d0bd2da5f0f407dbd0bd5 introduced a regression by calling ast_free on memory allocated by realpath. This causes Asterisk to abort when executing this function. Since the memory is allocated by glibc, it should be freed using ast_std_free. Resolves: #513 - ### config_options.c: Fix truncation of option descriptions. Author: Naveen Albert Date: 2023-11-09 This increases the format width of option descriptions to avoid needless truncation for longer descriptions. Resolves: #428 - ### manager.c: Improve clarity of "manager show connected". Author: Naveen Albert Date: 2023-12-05 Improve the "manager show connected" CLI command to clarify that the last two columns are permissions related, not counts, and use sufficient widths to consistently display these values. ASTERISK-30143 #close Resolves: #482 - ### make_xml_documentation: Really collect LOCAL_MOD_SUBDIRS documentation. Author: Sean Bright Date: 2023-12-01 Although `make_xml_documentation`'s `print_dependencies` command was corrected by the previous fix (#461) for #142, the `create_xml` was not properly handling `LOCAL_MOD_SUBDIRS` XML documentation. - ### general: Fix broken links. Author: Naveen Albert Date: 2023-11-09 This fixes a number of broken links throughout the tree, mostly caused by wiki.asterisk.org being replaced with docs.asterisk.org, which should eliminate the need for sporadic fixes as in f28047db36a70e81fe373a3d19132c43adf3f74b. Resolves: #430 - ### MergeApproved.yml: Remove unneeded concurrency Author: George Joseph Date: 2023-12-06 The concurrency parameter on the MergeAndCherryPick job has been rmeoved. It was a hold-over from earlier days. - ### app_dial: Add option "j" to preserve initial stream topology of caller Author: Maximilian Fridrich Date: 2023-11-30 Resolves: #462 UserNote: The option "j" is now available for the Dial application which uses the initial stream topology of the caller to create the outgoing channels. - ### ast_coredumper: Increase reliability Author: George Joseph Date: 2023-11-11 Instead of searching for the asterisk binary and the modules in the filesystem, we now get their locations, along with libdir, from the coredump itself... For the binary, we can use `gdb -c ... "info proc exe"`. gdb can print this even without having the executable and symbols. Once we have the binary, we can get the location of the modules with `gdb ... "print ast_config_AST_MODULE_DIR` If there was no result then either it's not an asterisk coredump or there were no symbols loaded. Either way, it's not usable. For libdir, we now run "strings" on the note0 section of the coredump (which has the shared library -> memory address xref) and search for "libasteriskssl|libasteriskpj", then take the dirname. Since we're now getting everything from the coredump, it has to be correct as long as we're not crossing namespace boundaries like running asterisk in a docker container but trying to run ast_coredumper from the host using a shared file system (which you shouldn't be doing). There is still a case for using --asterisk-bin and/or --libdir: If you've updated asterisk since the coredump was taken, the binary, libraries and modules won't match the coredump which will render it useless. If you can restore or rebuild the original files that match the coredump and place them in a temporary directory, you can use --asterisk-bin, --libdir, and a new --moddir option to point to them and they'll be correctly captured in a tarball created with --tarball-coredumps. If you also use --tarball-config, you can use a new --etcdir option to point to what normally would be the /etc/asterisk directory. Also addressed many "shellcheck" findings. Resolves: #445 - ### logger.c: Move LOG_GROUP documentation to dedicated XML file. Author: Sean Bright Date: 2023-12-01 The `get_documentation` awk script will only extract the first DOCUMENTATION block that it finds in a given file. This is by design (9bc2127) to prevent AMI event documentation from being pulled in to the core.xml documentation file. Because of this, the `LOG_GROUP` documentation added in 89709e2 was not being properly extracted and was missing fom the resulting XML documentation file. This commit moves the `LOG_GROUP` documentation to a separate `logger.xml` file. - ### res_odbc.c: Allow concurrent access to request odbc connections Author: Matthew Fredrickson Date: 2023-11-30 There are valid scenarios where res_odbc's connection pool might have some dead or stuck connections while others are healthy (imagine network elements/firewalls/routers silently timing out connections to a single DB and a single IP address, or a heterogeneous connection pool connected to potentially multiple IPs/instances of a replicated DB using a DNS front end for load balancing and one replica fails). In order to time out those unhealthy connections without blocking access to other parts of Asterisk that may attempt access to the connection pool, it would be beneficial to not lock/block access around the entire pool in _ast_odbc_request_obj2 while doing potentially blocking operations on connection pool objects such as the connection_dead() test, odbc_obj_connect(), or by dereferencing a struct odbc_obj for the last time and triggering a odbc_obj_disconnect(). This would facilitate much quicker and concurrent timeout of dead connections via the connection_dead() test, which could block potentially for a long period of time depending on odbc.ini or other odbc connector specific timeout settings. This also would make rapid failover (in the clustered DB scenario) much quicker. This patch changes the locking in _ast_odbc_request_obj2() to not lock around odbc_obj_connect(), _disconnect(), and connection_dead(), while continuing to lock around truly shared, non-immutable state like the connection_cnt member and the connections list on struct odbc_class. Fixes: #465 - ### res_pjsip_header_funcs.c: Check URI parameter length before copying. Author: Sean Bright Date: 2023-12-04 Fixes #477 - ### config.c: Log #exec include failures. Author: Sean Bright Date: 2023-11-22 If the script referenced by `#exec` does not exist, writes anything to stderr, or exits abnormally or with a non-zero exit status, we log that to Asterisk's error logging channel. Additionally, write out a warning if the script produces no output. Fixes #259 - ### make_xml_documentation: Properly handle absolute LOCAL_MOD_SUBDIRS. Author: Sean Bright Date: 2023-11-27 If LOCAL_MOD_SUBDIRS contains absolute paths, do not prefix them with the path to Asterisk's source tree. Fixes #142 - ### app_voicemail.c: Completely resequence mailbox folders. Author: Sean Bright Date: 2023-11-27 Resequencing is a process that occurs when we open a voicemail folder and discover that there are gaps between messages (e.g. `msg0000.txt` is missing but `msg0001.txt` exists). Resequencing involves shifting the existing messages down so we end up with a sequential list of messages. Currently, this process stops after reaching a threshold based on the message limit (`maxmsg`) configured on the current folder. However, if `maxmsg` is lowered when a voicemail folder contains more than `maxmsg + 10` messages, resequencing will not run completely leaving the mailbox in an inconsistent state. We now resequence up to the maximum number of messages permitted by `app_voicemail` (currently hard-coded at 9999 messages). Fixes #86 - ### sig_analog: Fix channel leak when mwimonitor is enabled. Author: Naveen Albert Date: 2023-11-24 When mwimonitor=yes is enabled for an FXO port, the do_monitor thread will launch mwi_thread if it thinks there could be MWI on an FXO channel, due to the noise threshold being satisfied. This, in turns, calls analog_ss_thread_start in sig_analog. However, unlike all other instances where __analog_ss_thread is called in sig_analog, this call path does not properly set pvt->ss_astchan to the Asterisk channel, which means that the Asterisk channel is NULL when __analog_ss_thread starts executing. As a result, the thread exits and the channel is never properly cleaned up by calling ast_hangup. This caused issues with do_monitor on incoming calls, as it would think the channel was still owned even while receiving events, leading to an infinite barrage of warning messages; additionally, the channel would persist improperly. To fix this, the assignment is added to the call path where it is missing (which is only used for mwi_thread). A warning message is also added since previously there was no indication that __analog_ss_thread was exiting abnormally. This resolves both the channel leak and the condition that led to the warning messages. Resolves: #458 - ### res_rtp_asterisk.c: Update for OpenSSL 3+. Author: Sean Bright Date: 2023-11-20 In 5ac5c2b0 we defined `OPENSSL_SUPPRESS_DEPRECATED` to silence deprecation warnings. This commit switches over to using non-deprecated API. - ### alembic: Update list of TLS methods available on ps_transports. Author: Sean Bright Date: 2023-11-14 Related to #221 and #222. Also adds `*.ini` to the `.gitignore` file in ast-db-manage for convenience. - ### func_channel: Expose previously unsettable options. Author: Naveen Albert Date: 2023-11-11 Certain channel options are not set anywhere or exposed in any way to users, making them unusable. This exposes some of these options which make sense for users to manipulate at runtime. Resolves: #442 - ### app.c: Allow ampersands in playback lists to be escaped. Author: Sean Bright Date: 2023-11-07 Any function or application that accepts a `&`-separated list of filenames can now include a literal `&` in a filename by wrapping the entire filename in single quotes, e.g.: ``` exten = _X.,n,Playback('https://example.com/sound.cgi?a=b&c=d'&hello-world) ``` Fixes #172 UpgradeNote: Ampersands in URLs passed to the `Playback()`, `Background()`, `SpeechBackground()`, `Read()`, `Authenticate()`, or `Queue()` applications as filename arguments can now be escaped by single quoting the filename. Additionally, this is also possible when using the `CONFBRIDGE` dialplan function, or configuring various features in `confbridge.conf` and `queues.conf`. - ### uri.c: Simplify ast_uri_make_host_with_port() Author: Sean Bright Date: 2023-11-09 - ### func_curl.c: Remove CURLOPT() plaintext documentation. Author: Sean Bright Date: 2023-11-13 I assume this was missed when initially converting to XML documentation and we've been kicking the can down the road since. - ### res_http_websocket.c: Set hostname on client for certificate validation. Author: Sean Bright Date: 2023-11-09 Additionally add a `assert()` to in the TLS client setup code to ensure that hostname is set when it is supposed to be. Fixes #433 - ### live_ast: Add astcachedir to generated asterisk.conf. Author: Sean Bright Date: 2023-11-09 `astcachedir` (added in b0842713) was not added to `live_ast` so continued to point to the system `/var/cache` directory instead of the one in the live environment. - ### SECURITY.md: Update with correct documentation URL Author: George Joseph Date: 2023-11-09 - ### func_lock: Add missing see-also refs to documentation. Author: Naveen Albert Date: 2023-11-09 Resolves: #423 - ### app_followme.c: Grab reference on nativeformats before using it Author: Matthew Fredrickson Date: 2023-10-25 Fixes a crash due to a lack of proper reference on the nativeformats object before passing it into ast_request(). Also found potentially similar use case bugs in app_chanisavail.c, bridge.c, and bridge_basic.c Fixes: #388 - ### configs: Improve documentation for bandwidth in iax.conf. Author: Naveen Albert Date: 2023-11-09 This improves the documentation for the bandwidth setting in iax.conf by making it clearer what the ramifications of this setting are. It also changes the sample default from low to high, since only high is compatible with good codecs that people will want to use in the vast majority of cases, and this is a common gotcha that trips up new users. Resolves: #425 - ### logger: Add channel-based filtering. Author: Naveen Albert Date: 2023-08-09 This adds the ability to filter console logging by channel or groups of channels. This can be useful on busy systems where an administrator would like to analyze certain calls in detail. A dialplan function is also included for the purpose of assigning a channel to a group (e.g. by tenant, or some other metric). ASTERISK-30483 #close Resolves: #242 UserNote: The console log can now be filtered by channels or groups of channels, using the logger filter CLI commands. - ### chan_iax2.c: Don't send unsanitized data to the logger. Author: Sean Bright Date: 2023-11-08 This resolves an issue where non-printable characters could be sent to the console/log files. - ### codec_ilbc: Disable system ilbc if version >= 3.0.0 Author: George Joseph Date: 2023-11-07 Fedora 37 started shipping ilbc 3.0.4 which we don't yet support. configure.ac now checks the system for "libilbc < 3" instead of just "libilbc". If true, the system version of ilbc will be used. If not, the version included at codecs/ilbc will be used. Resolves: #84 - ### resource_channels.c: Explicit codec request when creating UnicastRTP. Author: Sean Bright Date: 2023-11-06 Fixes #394 - ### doc: Update IP Quality of Service links. Author: Sean Bright Date: 2023-11-07 Fixes #328 - ### chan_pjsip: Add PJSIPHangup dialplan app and manager action Author: George Joseph Date: 2023-10-31 See UserNote below. Exposed the existing Hangup AMI action in manager.c so we can use all of it's channel search and AMI protocol handling without duplicating that code in dialplan_functions.c. Added a lookup function to res_pjsip.c that takes in the string represenation of the pjsip_status_code enum and returns the actual status code. I.E. ast_sip_str2rc("DECLINE") returns 603. This allows the caller to specify PJSIPHangup(decline) in the dialplan, just like Hangup(call_rejected). Also extracted the XML documentation to its own file since it was almost as large as the code itself. UserNote: A new dialplan app PJSIPHangup and AMI action allows you to hang up an unanswered incoming PJSIP call with a specific SIP response code in the 400 -> 699 range. - ### chan_iax2.c: Ensure all IEs are displayed when dumping frame contents. Author: Sean Bright Date: 2023-11-06 When IAX2 debugging was enabled (`iax2 set debug on`), if the last IE in a frame was one that may not have any data - such as the CALLTOKEN IE in an NEW request - it was not getting displayed. - ### chan_dahdi: Warn if nonexistent cadence is requested. Author: Naveen Albert Date: 2023-11-02 If attempting to ring a channel using a nonexistent cadence, emit a warning, before falling back to the default cadence. Resolves: #409 - ### stasis: Update the snapshot after setting the redirect Author: Holger Hans Peter Freyther Date: 2023-10-21 The previous commit added the caller_rdnis attribute. Make it avialble during a possible ChanngelHangupRequest. - ### ari: Provide the caller ID RDNIS for the channels Author: Holger Hans Peter Freyther Date: 2023-10-14 Provide the caller ID RDNIS when available. This will allow an application to follow the redirect. - ### main/utils: Implement ast_get_tid() for OpenBSD Author: Brad Smith Date: 2023-11-01 Implement the ast_get_tid() function for OpenBSD. OpenBSD supports getting the TID via getthrid(). - ### res_rtp_asterisk.c: Fix runtime issue with LibreSSL Author: Brad Smith Date: 2023-11-02 The module will fail to load. Use proper function DTLS_method() with LibreSSL. - ### app_directory: Add ADSI support to Directory. Author: Naveen Albert Date: 2023-09-27 This adds optional ADSI support to the Directory application, which allows callers with ADSI CPE to navigate the Directory system significantly faster than is possible using the audio prompts. Callers can see the directory name (and optionally extension) on their screenphone and confirm or reject a match immediately rather than waiting for it to be spelled out, enhancing usability. Resolves: #356 - ### core_local: Fix local channel parsing with slashes. Author: Naveen Albert Date: 2023-08-09 Currently, trying to call a Local channel with a slash in the extension will fail due to the parsing of characters after such a slash as being dial modifiers. Additionally, core_local is inconsistent and incomplete with its parsing of Local dial strings in that sometimes it uses the first slash and at other times it uses the last. For instance, something like DAHDI/5 or PJSIP/device is a perfectly usable extension in the dialplan, but Local channels in particular prevent these from being called. This creates inconsistent behavior for users, since using a slash in an extension is perfectly acceptable, and using a Goto to accomplish this works fine, but if specified through a Local channel, the parsing prevents this. This fixes this by explicitly parsing options from the last slash in the extension, rather than the first one, which doesn't cause an issue for extensions with slashes. ASTERISK-30013 #close Resolves: #248 - ### Remove files that are no longer updated Author: Mark Murawski Date: 2023-10-30 Fixes: #360 - ### app_voicemail: Add AMI event for mailbox PIN changes. Author: Naveen Albert Date: 2023-10-30 This adds an AMI event that is emitted whenever a mailbox password is successfully changed, allowing AMI consumers to process these. UserNote: The VoicemailPasswordChange event is now emitted whenever a mailbox password is updated, containing the mailbox information and the new password. Resolves: #398 - ### app_queue.c: Emit unpause reason with PauseQueueMember event. Author: Sean Bright Date: 2023-10-30 Fixes #395 - ### bridge_simple: Suppress unchanged topology change requests Author: George Joseph Date: 2023-10-30 In simple_bridge_join, we were sending topology change requests even when the new and old topologies were the same. In some circumstances, this can cause unnecessary re-invites and even a re-invite flood. We now suppress those. Resolves: #384 - ### res_pjsip: Include cipher limit in config error message. Author: Naveen Albert Date: 2023-10-30 If too many ciphers are specified in the PJSIP config, include the maximum number of ciphers that may be specified in the user-facing error message. Resolves: #396 - ### res_speech: allow speech to translate input channel Author: Mike Bradeen Date: 2023-09-07 * Allow res_speech to translate the input channel if the format is translatable to a format suppored by the speech provider. Resolves: #129 UserNote: res_speech now supports translation of an input channel to a format supported by the speech provider, provided a translation path is available between the source format and provider capabilites. - ### res_rtp_asterisk.c: Fix memory leak in ephemeral certificate creation. Author: Sean Bright Date: 2023-10-25 Fixes #386 - ### res_pjsip_dtmf_info.c: Add 'INFO' to Allow header. Author: Sean Bright Date: 2023-10-17 Fixes #376 - ### api.wiki.mustache: Fix indentation in generated markdown Author: George Joseph Date: 2023-10-25 The '*' list indicator for default values and allowable values for path, query and POST parameters need to be indented 4 spaces instead of 2. Should resolve issue 38 in the documentation repo. - ### pjsip_configuration.c: Disable DTLS renegotiation if WebRTC is enabled. Author: Sean Bright Date: 2023-10-23 Per RFC8827: Implementations MUST NOT implement DTLS renegotiation and MUST reject it with a "no_renegotiation" alert if offered. So we disable it when webrtc=yes is set. Fixes #378 UpgradeNote: The dtls_rekey will be disabled if webrtc support is requested on an endpoint. A warning will also be emitted. - ### configs: Fix typo in pjsip.conf.sample. Author: Samuel Olaechea Date: 2023-10-12 - ### res_pjsip_exten_state,res_pjsip_mwi: Allow unload on shutdown Author: George Joseph Date: 2023-10-19 Commit f66f77f last year prevents the res_pjsip_exten_state and res_pjsip_mwi modules from unloading due to possible pjproject asserts if the modules are reloaded. A side effect of the implementation is that the taskprocessors these modules use aren't being released. When asterisk is doing a graceful shutdown, it waits AST_TASKPROCESSOR_SHUTDOWN_MAX_WAIT seconds for all taskprocessors to stop but since those 2 modules don't release theirs, the shutdown hangs for that amount of time. This change allows the modules to be unloaded and their resources to be released when ast_shutdown_final is true. Resolves: #379 - ### res_pjsip: Expanding PJSIP endpoint ID and relevant resource length to 255 characters Author: sungtae kim Date: 2023-09-23 This commit introduces an extension to the endpoint and relevant resource sizes for PJSIP, transitioning from its current 40-character constraint to a more versatile 255-character capacity. This enhancement significantly overcomes limitations related to domain qualification and practical usage, ultimately delivering improved functionality. In addition, it includes adjustments to accommodate the expanded realm size within the ARI, specifically enhancing the maximum realm length. Resolves: #345 UserNote: With this update, the PJSIP realm lengths have been extended to support up to 255 characters. UpgradeNote: As part of this update, the maximum allowable length for PJSIP endpoints and relevant resources has been increased from 40 to 255 characters. To take advantage of this enhancement, it is recommended to run the necessary procedures (e.g., Alembic) to update your schemas. - ### .github: PRSubmitActions: Fix adding reviewers to PR Author: George Joseph Date: 2023-10-19 - ### .github: New PR Submit workflows Author: George Joseph Date: 2023-10-17 The workflows that get triggered when PRs are submitted or updated have been replaced with ones that are more secure and have a higher level of parallelism. - ### .github: New PR Submit workflows Author: George Joseph Date: 2023-10-17 The workflows that get triggered when PRs are submitted or updated have been replaced with ones that are more secure and have a higher level of parallelism. - ### res_stasis: signal when new command is queued Author: Mike Bradeen Date: 2023-10-02 res_statsis's app loop sleeps for up to .2s waiting on input to a channel before re-checking the command queue. This can cause delays between channel setup and bridge. This change is to send a SIGURG on the sleeping thread when a new command is enqueued. This exits the sleeping thread out of the ast_waitfor() call triggering the new command being processed on the channel immediately. Resolves: #362 UserNote: Call setup times should be significantly improved when using ARI. - ### ari/stasis: Indicate progress before playback on a bridge Author: Holger Hans Peter Freyther Date: 2023-10-02 Make it possible to start a playback and the calling party to receive audio on a bridge before the call is connected. Model the implementation after play_on_channel and deliver a AST_CONTROL_PROGRESS before starting the playback. For a PJSIP channel this will result in sending a SIP 183 Session Progress. - ### func_curl.c: Ensure channel is locked when manipulating datastores. Author: Sean Bright Date: 2023-10-09 - ### .github: Fix job prereqs in PROpenedUpdated Author: George Joseph Date: 2023-10-09 - ### .github: Block PR tests until approved Author: George Joseph Date: 2023-10-05 - ### Update config.yml Author: Joshua C. Colp Date: 2023-06-15 - ### logger.h: Add ability to change the prefix on SCOPE_TRACE output Author: George Joseph Date: 2023-10-05 You can now define the _TRACE_PREFIX_ macro to change the default trace line prefix of "file:line function" to something else. Full documentation in logger.h. - ### Add libjwt to third-party Author: George Joseph Date: 2023-09-21 The current STIR/SHAKEN implementation is not currently usable due to encryption issues. Rather than trying to futz with OpenSSL and the the current code, we can take advantage of the existing capabilities of libjwt but we first need to add it to the third-party infrastructure already in place for jansson and pjproject. A few tweaks were also made to the third-party infrastructure as a whole. The jansson "dest" install directory was renamed "dist" to better match convention, and the third-party Makefile was updated to clean all product directories not just the ones currently in use. Resolves: #349 - ### res_pjsip: update qualify_timeout documentation with DNS note Author: Mike Bradeen Date: 2023-09-26 The documentation on qualify_timeout does not explicitly state that the timeout includes any time required to perform any needed DNS queries on the endpoint. If the OPTIONS response is delayed due to the DNS query, it can still render an endpoint as Unreachable if the net time is enough for qualify_timeout to expire. Resolves: #352 - ### chan_dahdi: Clarify scope of callgroup/pickupgroup. Author: Naveen Albert Date: 2023-09-04 Internally, chan_dahdi only applies callgroup and pickupgroup to FXO signalled channels, but this is not documented anywhere. This is now documented in the sample config, and a warning is emitted if a user tries configuring these settings for channel types that do not support these settings, since they will not have any effect. Resolves: #294 - ### func_json: Fix crashes for some types Author: Bastian Triller Date: 2023-09-21 This commit fixes crashes in JSON_DECODE() for types null, true, false and real numbers. In addition it ensures that a path is not deeper than 32 levels. Also allow root object to be an array. Add unit tests for above cases. - ### res_speech_aeap: add aeap error handling Author: Mike Bradeen Date: 2023-09-21 res_speech_aeap previously did not register an error handler with aeap, so it was not notified of a disconnect. This resulted in SpeechBackground never exiting upon a websocket disconnect. Resolves: #303 - ### app_voicemail: Disable ADSI if unavailable. Author: Naveen Albert Date: 2023-09-27 If ADSI is available on a channel, app_voicemail will repeatedly try to use ADSI, even if there is no CPE that supports it. This leads to many unnecessary delays during the session. If ADSI is available but ADSI setup fails, we now disable it to prevent further attempts to use ADSI during the session. Resolves: #354 - ### codec_builtin: Use multiples of 20 for maximum_ms Author: Eduardo Date: 2023-07-28 Some providers require a multiple of 20 for the maxptime or fail to complete calls, e.g. Vivo in Brazil. To increase compatibility, only multiples of 20 are now used. Resolves: #260 - ### lock.c: Separate DETECT_DEADLOCKS from DEBUG_THREADS Author: George Joseph Date: 2023-09-13 Previously, DETECT_DEADLOCKS depended on DEBUG_THREADS. Unfortunately, DEBUG_THREADS adds a lot of lock tracking overhead to all of the lock lifecycle calls whereas DETECT_DEADLOCKS just causes the lock calls to loop over trylock in 200us intervals until the lock is obtained and spits out log messages if it takes more than 5 seconds. From a code perspective, the only reason they were tied together was for logging. So... The ifdefs in lock.c were refactored to allow DETECT_DEADLOCKS to be enabled without also enabling DEBUG_THREADS. Resolves: #321 UserNote: You no longer need to select DEBUG_THREADS to use DETECT_DEADLOCKS. This removes a significant amount of overhead if you just want to detect possible deadlocks vs needing full lock tracing. - ### asterisk.c: Use the euid's home directory to read/write cli history Author: George Joseph Date: 2023-09-15 The CLI .asterisk_history file is read from/written to the directory specified by the HOME environment variable. If the root user starts asterisk with the -U/-G options, or with runuser/rungroup set in asterisk.conf, the asterisk process is started as root but then it calls setuid/setgid to set the new user/group. This does NOT reset the HOME environment variable to the new user's home directory though so it's still left as "/root". In this case, the new user will almost certainly NOT have access to read from or write to the history file. * Added function process_histfile() which calls getpwuid(geteuid()) and uses pw->dir as the home directory instead of the HOME environment variable. * ast_el_read_default_histfile() and ast_el_write_default_histfile() have been modified to use the new process_histfile() function. Resolves: #337 - ### res_pjsip_transport_websocket: Prevent transport from being destroyed before message finishes. Author: Tinet-mucw Date: 2023-09-13 From the gdb information, ast_websocket_read reads a message successfully, then transport_read is called in the serializer. During execution of pjsip_transport_down, ws_session->stream->fd is closed; ast_websocket_read encounters an error and exits the while loop. After executing transport_shutdown, the transport's reference count becomes 0, causing a crash when sending SIP messages. This was due to pjsip_transport_dec_ref executing earlier than pjsip_rx_data_clone, leading to this issue. In websocket_cb executeing pjsip_transport_add_ref, this we now ensure the transport is not destroyed while in the loop. Resolves: asterisk#299 - ### cel: add publish user event helper Author: Mike Bradeen Date: 2023-09-14 Add a wrapper function around ast_cel_publish_event that packs event and extras into a blob before publishing Resolves:#330 - ### chan_console: Fix deadlock caused by unclean thread exit. Author: Naveen Albert Date: 2023-09-09 To terminate a console channel, stop_stream causes pthread_cancel to make stream_monitor exit. However, commit 5b8fea93d106332bc0faa4b7fa8a6ea71e546cac added locking to this function which results in deadlock due to the stream_monitor thread being killed while it's holding the pvt lock. To resolve this, a flag is now set and read to indicate abort, so the use of pthread_cancel and pthread_kill can be avoided altogether. Resolves: #308 - ### file.c: Add ability to search custom dir for sounds Author: George Joseph Date: 2023-09-11 To better co-exist with sounds files that may be managed by packages, custom sound files may now be placed in AST_DATA_DIR/sounds/custom instead of the standard AST_DATA_DIR/sounds/ directory. If the new "sounds_search_custom_dir" option in asterisk.conf is set to "true", asterisk will search the custom directory for sounds files before searching the standard directory. For performance reasons, the "sounds_search_custom_dir" defaults to "false". Resolves: #315 UserNote: A new option "sounds_search_custom_dir" has been added to asterisk.conf that allows asterisk to search AST_DATA_DIR/sounds/custom for sounds files before searching the standard AST_DATA_DIR/sounds/ directory. - ### chan_iax2: Improve authentication debugging. Author: Naveen Albert Date: 2023-08-30 Improves and adds some logging to make it easier for users to debug authentication issues. Resolves: #286 - ### res_rtp_asterisk: fix wrong counter management in ioqueue objects Author: Vitezslav Novy Date: 2023-09-05 In function rtp_ioqueue_thread_remove counter in ioqueue object is not decreased which prevents unused ICE TURN threads from being removed. Resolves: #301 - ### make_buildopts_h, et. al. Allow adding all cflags to buildopts.h Author: George Joseph Date: 2023-09-13 The previous behavior of make_buildopts_h was to not add the non-ABI-breaking MENUSELECT_CFLAGS like DETECT_DEADLOCKS, REF_DEBUG, etc. to the buildopts.h file because "it caused ccache to invalidate files and extended compile times". They're only defined by passing them on the gcc command line with '-D' options. In practice, including them in the include file rarely causes any impact because the only time ccache cares is if you actually change an option so the hit occurrs only once after you change it. OK so why would we want to include them? Many IDEs follow the include files to resolve defines and if the options aren't in an include file, it can cause the IDE to mark blocks of "ifdeffed" code as unused when they're really not. So... * Added a new menuselect compile option ADD_CFLAGS_TO_BUILDOPTS_H which tells make_buildopts_h to include the non-ABI-breaking flags in buildopts.h as well as the ABI-breaking ones. The default is disabled to preserve current behavior. As before though, only the ABI-breaking flags appear in AST_BUILDOPTS and only those are used to calculate AST_BUILDOPT_SUM. A new AST_BUILDOPT_ALL define was created to capture all of the flags. * make_version_c was streamlined to use buildopts.h and also to create asterisk_build_opts_all[] and ast_get_build_opts_all(void) * "core show settings" now shows both AST_BUILDOPTS and AST_BUILDOPTS_ALL. UserNote: The "Build Options" entry in the "core show settings" CLI command has been renamed to "ABI related Build Options" and a new entry named "All Build Options" has been added that shows both breaking and non-breaking options. - ### func_periodic_hook: Add hangup step to avoid timeout Author: Mike Bradeen Date: 2023-09-12 func_periodic_hook does not hangup after playback, relying on hangup which keeps the channel alive longer than necessary. Resolves: #325 - ### res_stasis_recording.c: Save recording state when unmuted. Author: Sean Bright Date: 2023-09-12 Fixes #322 - ### res_speech_aeap: check for null format on response Author: Mike Bradeen Date: 2023-09-08 * Fixed issue in res_speech_aeap when unable to provide an input format to check against. - ### func_periodic_hook: Don't truncate channel name Author: George Joseph Date: 2023-09-11 func_periodic_hook was truncating long channel names which causes issues when you need to run other dialplan functions/apps on the channel. Resolves: #319 - ### safe_asterisk: Change directory permissions to 755 Author: George Joseph Date: 2023-09-11 If the safe_asterisk script detects that the /var/lib/asterisk directory doesn't exist, it now creates it with 755 permissions instead of 770. safe_asterisk needing to create that directory should be extremely rare though because it's normally created by 'make install' which already sets the permissions to 755. Resolves: #316 - ### chan_rtp: Implement RTP glue for UnicastRTP channels Author: Maximilian Fridrich Date: 2023-09-05 Resolves: #298 UserNote: The dial string option 'g' was added to the UnicastRTP channel which enables RTP glue and therefore native RTP bridges with those channels. - ### app_queue: periodic announcement configurable start time. Author: Jaco Kroon Date: 2023-02-21 This newly introduced periodic-announce-startdelay makes it possible to configure the initial start delay of the first periodic announcement after which periodic-announce-frequency takes over. UserNote: Introduce a new queue configuration option called 'periodic-announce-startdelay' which will vary the normal (historic) behavior of starting the periodic announcement cycle at periodic-announce-frequency seconds after entering the queue to start the periodic announcement cycle at period-announce-startdelay seconds after joining the queue. The default behavior if this config option is not set remains unchanged. Signed-off-by: Jaco Kroon - ### variables: Add additional variable dialplan functions. Author: Joshua C. Colp Date: 2023-08-31 Using the Set dialplan application does not actually delete channel or global variables. Instead the variables are set to an empty value. This change adds two dialplan functions, GLOBAL_DELETE and DELETE which can be used to delete global and channel variables instead of just setting them to empty. There is also no ability within the dialplan to determine if a global or channel variable has actually been set or not. This change also adds two dialplan functions, GLOBAL_EXISTS and VARIABLE_EXISTS which can be used to determine if a global or channel variable has been set or not. Resolves: #289 UserNote: Four new dialplan functions have been added. GLOBAL_DELETE and DELETE have been added which allows the deletion of global and channel variables. GLOBAL_EXISTS and VARIABLE_EXISTS have been added which checks whether a global or channel variable has been set. - ### Restore CHANGES and UPGRADE.txt to allow cherry-picks to work Author: George Joseph Date: 2024-01-12