From 959babc4729ed8d192a3603a73eaaa56a6ec9690 Mon Sep 17 00:00:00 2001
From: Asterisk Development Team <asteriskteam@digium.com>
Date: Thu, 7 Mar 2024 14:17:30 +0000
Subject: [PATCH] Update for 20.7.0-rc1

---
 .version                                      |   2 +-
 CHANGES.md                                    |   2 +-
 ChangeLogs/ChangeLog-20.7.0-rc1.md            | 721 ++++++++++++++++++
 contrib/realtime/mysql/mysql_config.sql       | 201 +++++
 contrib/realtime/mysql/mysql_voicemail.sql    |   4 +
 .../realtime/postgresql/postgresql_config.sql | 201 +++++
 .../postgresql/postgresql_voicemail.sql       |   4 +
 7 files changed, 1133 insertions(+), 2 deletions(-)
 create mode 100644 ChangeLogs/ChangeLog-20.7.0-rc1.md

diff --git a/.version b/.version
index 1cc433a12a..912db9d971 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-20.6.0
+20.7.0-rc1
diff --git a/CHANGES.md b/CHANGES.md
index fa3bd04520..ac72ee4ebf 120000
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1 +1 @@
-ChangeLogs/ChangeLog-20.6.0.md
\ No newline at end of file
+ChangeLogs/ChangeLog-20.7.0-rc1.md
\ No newline at end of file
diff --git a/ChangeLogs/ChangeLog-20.7.0-rc1.md b/ChangeLogs/ChangeLog-20.7.0-rc1.md
new file mode 100644
index 0000000000..356cba33f3
--- /dev/null
+++ b/ChangeLogs/ChangeLog-20.7.0-rc1.md
@@ -0,0 +1,721 @@
+
+Change Log for Release asterisk-20.7.0-rc1
+========================================
+
+Links:
+----------------------------------------
+
+ - [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-20.7.0-rc1.md)  
+ - [GitHub Diff](https://github.com/asterisk/asterisk/compare/20.6.0...20.7.0-rc1)  
+ - [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20.7.0-rc1.tar.gz)  
+ - [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)  
+
+Summary:
+----------------------------------------
+
+- app_dial: Add dial time for progress/ringing.                                   
+- app_voicemail: Properly reinitialize config after unit tests.                   
+- app_queue.c : fix "queue add member" usage string                               
+- app_voicemail: Allow preventing mark messages as urgent.                        
+- res_pjsip: Use consistent type for boolean columns.                             
+- attestation_config.c: Use ast_free instead of ast_std_free                      
+- Makefile: Add stir_shaken/cache to directories created on install               
+- Stir/Shaken Refactor                                                            
+- alembic: Synchronize alembic heads between supported branches.                  
+- translate.c: implement new direct comp table mode                               
+- README.md: Removed outdated link                                                
+- strings.h: Ensure ast_str_buffer(…) returns a 0 terminated string.              
+- res_rtp_asterisk.c: Correct coefficient in MOS calculation.                     
+- dsp.c: Fix and improve potentially inaccurate log message.                      
+- pjsip show channelstats: Prevent possible segfault when faxing                  
+- Reduce startup/shutdown verbose logging                                         
+- configure: Rerun bootstrap on modern platform.                                  
+- Upgrade bundled pjproject to 2.14.                                              
+- app_speech_utils.c: Allow partial speech results.                               
+- utils: Make behavior of ast_strsep* match strsep.                               
+- app_chanspy: Add 'D' option for dual-channel audio                              
+- app_if: Fix next priority calculation.                                          
+- res_pjsip_t38.c: Permit IPv6 SDP connection addresses.                          
+- BuildSystem: Bump autotools versions on OpenBSD.                                
+- main/utils: Simplify the FreeBSD ast_get_tid() handling                         
+- res_pjsip_session.c: Correctly format SDP connection addresses.                 
+- rtp_engine.c: Correct sample rate typo for L16/44100.                           
+- manager.c: Fix erroneous reloads in UpdateConfig.                               
+- res_calendar_icalendar: Print iCalendar error on parsing failure.               
+- app_confbridge: Don't emit warnings on valid configurations.                    
+- app_voicemail: add NoOp alembic script to maintain sync                         
+- chan_dahdi: Allow MWI to be manually toggled on channels.                       
+- chan_rtp.c: MulticastRTP missing refcount without codec option                  
+- chan_rtp.c: Change MulticastRTP nameing to avoid memory leak                    
+- func_frame_trace: Add CLI command to dump frame queue.                          
+
+User Notes:
+----------------------------------------
+
+- ### app_dial: Add dial time for progress/ringing.                                   
+  The timeout argument to Dial now allows
+  specifying the maximum amount of time to dial if
+  early media is not received.
+
+- ### app_voicemail: Allow preventing mark messages as urgent.                        
+  The leaveurgent mailbox option can now be used to
+  control whether callers may leave messages marked as 'Urgent'.
+
+- ### Stir/Shaken Refactor                                                            
+  Asterisk's stir-shaken feature has been refactored to
+  correct interoperability, RFC compliance, and performance issues.
+  See https://docs.asterisk.org/Deployment/STIR-SHAKEN for more
+  information.
+
+- ### Upgrade bundled pjproject to 2.14.                                              
+  Bundled pjproject has been upgraded to 2.14. For more
+  information on what all is included in this change, check out the
+  pjproject Github page: https://github.com/pjsip/pjproject/releases
+
+- ### app_speech_utils.c: Allow partial speech results.                               
+  The SpeechBackground dialplan application now supports a 'p'
+  option that will return partial results from speech engines that
+  provide them when a timeout occurs.
+
+- ### app_chanspy: Add 'D' option for dual-channel audio                              
+  The ChanSpy application now accepts the 'D' option which
+  will interleave the spied audio within the outgoing frames. The
+  purpose of this is to allow the audio to be read as a Dual channel
+  stream with separate incoming and outgoing audio. Setting both the
+  'o' option and the 'D' option and results in the 'D' option being
+  ignored.
+
+- ### chan_dahdi: Allow MWI to be manually toggled on channels.                       
+  The 'dahdi set mwi' now allows MWI on channels
+  to be manually toggled if needed for troubleshooting.
+  Resolves: #440
+
+
+Upgrade Notes:
+----------------------------------------
+
+- ### Stir/Shaken Refactor                                                            
+  The stir-shaken refactor is a breaking change but since
+  it's not working now we don't think it matters. The
+  stir_shaken.conf file has changed significantly which means that
+  existing ones WILL need to be changed.  The stir_shaken.conf.sample
+  file in configs/samples/ has quite a bit more information.  This is
+  also an ABI breaking change since some of the existing objects
+  needed to be changed or removed, and new ones added.  Additionally,
+  if res_stir_shaken is enabled in menuselect, you'll need to either
+  have the development package for libjwt v1.15.3 installed or use
+  the --with-libjwt-bundled option with ./configure.
+
+
+Closed Issues:
+----------------------------------------
+
+  - #46: [bug]: Stir/Shaken: Wrong CID used when looking up certificates
+  - #351: [improvement]: Refactor res_stir_shaken to use libjwt
+  - #406: [improvement]: pjsip: Upgrade bundled version to pjproject 2.14
+  - #440: [new-feature]: chan_dahdi: Allow manually toggling MWI on channels
+  - #492: [improvement]: res_calendar_icalendar: Print icalendar error if available on parsing failure
+  - #527: [bug]: app_voicemail_odbc no longer working after removal of macrocontext.
+  - #529: [bug]: MulticastRTP without selected codec leeds to "FRACK!, Failed assertion bad magic number 0x0 for object" after ~30 calls
+  - #533: [improvement]: channel.c, func_frame_trace.c: Improve debuggability of channel frame queue
+  - #551: [bug]: manager: UpdateConfig triggers reload with "Reload: no"
+  - #560: [bug]: EndIf() causes next priority to be skipped
+  - #565: [bug]: Application Read() returns immediately
+  - #569: [improvement]: Add option to interleave input and output frames on spied channel
+  - #572: [improvement]: Copy partial speech results when Asterisk is ready to move on but the speech backend is not
+  - #582: [improvement]: Reduce unneeded logging during startup and shutdown
+  - #586: [bug]: The "restrict" keyword used in chan_iax2.c isn't supported in older gcc versions
+  - #588: [new-feature]: app_dial: Allow Dial to be aborted if early media is not received
+  - #592: [bug]: In certain circumstances, "pjsip show channelstats" can segfault when a fax session is active
+  - #595: [improvement]: dsp.c: Fix and improve confusing warning message.
+  - #597: [bug]: wrong MOS calculation
+  - #601: [new-feature]: translate.c: implement new direct comp table mode (PR #585)
+  - #619: [new-feature]: app_voicemail: Allow preventing callers from marking messages as urgent
+  - #629: [bug]: app_voicemail: Multiple executions of unit tests cause segfault
+  - #634: [bug]: make install doesn't create the stir_shaken cache directory
+  - #636: [bug]: Possible SEGV in res_stir_shaken due to wrong free function
+
+Commits By Author:
+----------------------------------------
+
+- ### Ben Ford (1):
+  - Upgrade bundled pjproject to 2.14.
+
+- ### Brad Smith (2):
+  - main/utils: Simplify the FreeBSD ast_get_tid() handling
+  - BuildSystem: Bump autotools versions on OpenBSD.
+
+- ### George Joseph (5):
+  - Reduce startup/shutdown verbose logging
+  - pjsip show channelstats: Prevent possible segfault when faxing
+  - Stir/Shaken Refactor
+  - Makefile: Add stir_shaken/cache to directories created on install
+  - attestation_config.c: Use ast_free instead of ast_std_free
+
+- ### Joshua C. Colp (1):
+  - utils: Make behavior of ast_strsep* match strsep.
+
+- ### Mike Bradeen (2):
+  - app_voicemail: add NoOp alembic script to maintain sync
+  - app_chanspy: Add 'D' option for dual-channel audio
+
+- ### Naveen Albert (10):
+  - func_frame_trace: Add CLI command to dump frame queue.
+  - chan_dahdi: Allow MWI to be manually toggled on channels.
+  - res_calendar_icalendar: Print iCalendar error on parsing failure.
+  - manager.c: Fix erroneous reloads in UpdateConfig.
+  - app_if: Fix next priority calculation.
+  - configure: Rerun bootstrap on modern platform.
+  - dsp.c: Fix and improve potentially inaccurate log message.
+  - app_voicemail: Allow preventing mark messages as urgent.
+  - app_voicemail: Properly reinitialize config after unit tests.
+  - app_dial: Add dial time for progress/ringing.
+
+- ### PeterHolik (2):
+  - chan_rtp.c: Change MulticastRTP nameing to avoid memory leak
+  - chan_rtp.c: MulticastRTP missing refcount without codec option
+
+- ### Sean Bright (7):
+  - app_confbridge: Don't emit warnings on valid configurations.
+  - rtp_engine.c: Correct sample rate typo for L16/44100.
+  - res_pjsip_session.c: Correctly format SDP connection addresses.
+  - res_pjsip_t38.c: Permit IPv6 SDP connection addresses.
+  - strings.h: Ensure ast_str_buffer(…) returns a 0 terminated string.
+  - alembic: Synchronize alembic heads between supported branches.
+  - res_pjsip: Use consistent type for boolean columns.
+
+- ### Sebastian Jennen (1):
+  - translate.c: implement new direct comp table mode
+
+- ### Shaaah (1):
+  - app_queue.c : fix "queue add member" usage string
+
+- ### Shyju Kanaprath (1):
+  - README.md: Removed outdated link
+
+- ### cmaj (1):
+  - app_speech_utils.c: Allow partial speech results.
+
+- ### romryz (1):
+  - res_rtp_asterisk.c: Correct coefficient in MOS calculation.
+
+
+Detail:
+----------------------------------------
+
+- ### app_dial: Add dial time for progress/ringing.                                   
+  Author: Naveen Albert  
+  Date:   2024-02-08  
+
+  Add a timeout option to control the amount of time
+  to wait if no early media is received before giving
+  up. This allows aborting early if the destination
+  is not being responsive.
+
+  Resolves: #588
+
+  UserNote: The timeout argument to Dial now allows
+  specifying the maximum amount of time to dial if
+  early media is not received.
+
+
+- ### app_voicemail: Properly reinitialize config after unit tests.                   
+  Author: Naveen Albert  
+  Date:   2024-02-29  
+
+  Most app_voicemail unit tests were not properly cleaning up
+  after themselves after running. This led to test mailboxes
+  lingering around in the system. It also meant that if any
+  unit tests in app_voicemail that create mailboxes were executed
+  and the module was not unloaded/loaded again prior to running
+  the test_voicemail_vm_info unit test, Asterisk would segfault
+  due to an attempt to copy a NULL string.
+
+  The load_config test did actually have logic to reinitialize
+  the config after the test. However, this did not work in practice
+  since load_config() would not reload the config since voicemail.conf
+  had not changed during the test; thus, additional logic has been
+  added to ensure that voicemail.conf is truly reloaded, after any
+  unit tests which modify the users list.
+
+  This prevents the SEGV due to invalid mailboxes lingering around,
+  and also ensures that the system state is restored to what it was
+  prior to the tests running.
+
+  Resolves: #629
+
+- ### app_queue.c : fix "queue add member" usage string                               
+  Author: Shaaah  
+  Date:   2024-01-23  
+
+  Fixing bracket placement in the "queue add member" cli usage string.
+
+
+- ### app_voicemail: Allow preventing mark messages as urgent.                        
+  Author: Naveen Albert  
+  Date:   2024-02-24  
+
+  This adds an option to allow preventing callers from leaving
+  messages marked as 'urgent'.
+
+  Resolves: #619
+
+  UserNote: The leaveurgent mailbox option can now be used to
+  control whether callers may leave messages marked as 'Urgent'.
+
+
+- ### res_pjsip: Use consistent type for boolean columns.                             
+  Author: Sean Bright  
+  Date:   2024-02-27  
+
+  This migrates the relevant schema objects from the `('yes', 'no')`
+  definition to the `('0', '1', 'off', 'on', 'false', 'true', 'yes', 'no')`
+  one.
+
+  Fixes #617
+
+
+- ### attestation_config.c: Use ast_free instead of ast_std_free                      
+  Author: George Joseph  
+  Date:   2024-03-05  
+
+  In as_check_common_config, we were calling ast_std_free on
+  raw_key but raw_key was allocated with ast_malloc so it
+  should be freed with ast_free.
+
+  Resolves: #636
+
+- ### Makefile: Add stir_shaken/cache to directories created on install               
+  Author: George Joseph  
+  Date:   2024-03-04  
+
+  The default location for the stir_shaken cache is
+  /var/lib/asterisk/keys/stir_shaken/cache but we were only creating
+  /var/lib/asterisk/keys/stir_shaken on istall.  We now create
+  the cache sub-directory.
+
+  Resolves: #634
+
+- ### Stir/Shaken Refactor                                                            
+  Author: George Joseph  
+  Date:   2023-10-26  
+
+  Why do we need a refactor?
+
+  The original stir/shaken implementation was started over 3 years ago
+  when little was understood about practical implementation.  The
+  result was an implementation that wouldn't actually interoperate
+  with any other stir-shaken implementations.
+
+  There were also a number of stir-shaken features and RFC
+  requirements that were never implemented such as TNAuthList
+  certificate validation, sending Reason headers in SIP responses
+  when verification failed but we wished to continue the call, and
+  the ability to send Media Key(mky) grants in the Identity header
+  when the call involved DTLS.
+
+  Finally, there were some performance concerns around outgoing
+  calls and selection of the correct certificate and private key.
+  The configuration was keyed by an arbitrary name which meant that
+  for every outgoing call, we had to scan the entire list of
+  configured TNs to find the correct cert to use.  With only a few
+  TNs configured, this wasn't an issue but if you have a thousand,
+  it could be.
+
+  What's changed?
+
+  * Configuration objects have been refactored to be clearer about
+    their uses and to fix issues.
+      * The "general" object was renamed to "verification" since it
+        contains parameters specific to the incoming verification
+        process.  It also never handled ca_path and crl_path
+        correctly.
+      * A new "attestation" object was added that controls the
+        outgoing attestation process.  It sets default certificates,
+        keys, etc.
+      * The "certificate" object was renamed to "tn" and had it's key
+        change to telephone number since outgoing call attestation
+        needs to look up certificates by telephone number.
+      * The "profile" object had more parameters added to it that can
+        override default parameters specified in the "attestation"
+        and "verification" objects.
+      * The "store" object was removed altogther as it was never
+        implemented.
+
+  * We now use libjwt to create outgoing Identity headers and to
+    parse and validate signatures on incoming Identiy headers.  Our
+    previous custom implementation was much of the source of the
+    interoperability issues.
+
+  * General code cleanup and refactor.
+      * Moved things to better places.
+      * Separated some of the complex functions to smaller ones.
+      * Using context objects rather than passing tons of parameters
+        in function calls.
+      * Removed some complexity and unneeded encapsuation from the
+        config objects.
+
+  Resolves: #351
+  Resolves: #46
+
+  UserNote: Asterisk's stir-shaken feature has been refactored to
+  correct interoperability, RFC compliance, and performance issues.
+  See https://docs.asterisk.org/Deployment/STIR-SHAKEN for more
+  information.
+
+  UpgradeNote: The stir-shaken refactor is a breaking change but since
+  it's not working now we don't think it matters. The
+  stir_shaken.conf file has changed significantly which means that
+  existing ones WILL need to be changed.  The stir_shaken.conf.sample
+  file in configs/samples/ has quite a bit more information.  This is
+  also an ABI breaking change since some of the existing objects
+  needed to be changed or removed, and new ones added.  Additionally,
+  if res_stir_shaken is enabled in menuselect, you'll need to either
+  have the development package for libjwt v1.15.3 installed or use
+  the --with-libjwt-bundled option with ./configure.
+
+
+- ### alembic: Synchronize alembic heads between supported branches.                  
+  Author: Sean Bright  
+  Date:   2024-02-28  
+
+  This adds a dummy migration to 18 and 20 so that our alembic heads are
+  synchronized across all supported branches.
+
+  In this case the migration we are stubbing (24c12d8e9014) is:
+
+  https://github.com/asterisk/asterisk/commit/775352ee6c2a5bcd4f0e3df51aee5d1b0abf4cbe
+
+- ### translate.c: implement new direct comp table mode                               
+  Author: Sebastian Jennen  
+  Date:   2024-02-25  
+
+  The new mode lists for each codec translation the actual real cost in cpu microseconds per second translated audio.
+  This allows to compare the real cpu usage of translations and helps in evaluation of codec implementation changes regarding performance (regression testing).
+
+  - add new table mode
+  - hide the 999999 comp values, as these only indicate an issue with transcoding
+  - hide the 0 values, as these also do not contain any information (only indicate a multistep transcoding)
+
+  Resolves: #601
+
+- ### README.md: Removed outdated link                                                
+  Author: Shyju Kanaprath  
+  Date:   2024-02-23  
+
+  Removed outdated link http://www.quicknet.net from README.md
+
+  cherry-pick-to: 18
+  cherry-pick-to: 20
+  cherry-pick-to: 21
+
+- ### strings.h: Ensure ast_str_buffer(…) returns a 0 terminated string.              
+  Author: Sean Bright  
+  Date:   2024-02-17  
+
+  If a dynamic string is created with an initial length of 0,
+  `ast_str_buffer(…)` will return an invalid pointer.
+
+  This was a secondary discovery when fixing #65.
+
+
+- ### res_rtp_asterisk.c: Correct coefficient in MOS calculation.                     
+  Author: romryz  
+  Date:   2024-02-06  
+
+  Media Experience Score relies on incorrect pseudo_mos variable
+  calculation. According to forming an opinion section of the
+  documentation, calculation relies on ITU-T G.107 standard:
+
+      https://docs.asterisk.org/Deployment/Media-Experience-Score/#forming-an-opinion
+
+  ITU-T G.107 Annex B suggests to calculate MOS with a coefficient
+  "seven times ten to the power of negative six", 7 * 10^(-6). which
+  would mean 6 digits after the decimal point. Current implementation
+  has 7 digits after the decimal point, which downrates the calls.
+
+  Fixes: #597
+
+- ### dsp.c: Fix and improve potentially inaccurate log message.                      
+  Author: Naveen Albert  
+  Date:   2024-02-09  
+
+  If ast_dsp_process is called with a codec besides slin, ulaw,
+  or alaw, a warning is logged that in-band DTMF is not supported,
+  but this message is not always appropriate or correct, because
+  ast_dsp_process is much more generic than just DTMF detection.
+
+  This logs a more generic message in those cases, and also improves
+  codec-mismatch logging throughout dsp.c by ensuring incompatible
+  codecs are printed out.
+
+  Resolves: #595
+
+- ### pjsip show channelstats: Prevent possible segfault when faxing                  
+  Author: George Joseph  
+  Date:   2024-02-09  
+
+  Under rare circumstances, it's possible for the original audio
+  session in the active_media_state default_session to be corrupted
+  instead of removed when switching to the t38/image media session
+  during fax negotiation.  This can cause a segfault when a "pjsip
+  show channelstats" attempts to print that audio media session's
+  rtp statistics.  In these cases, the active_media_state
+  topology is correctly showing only a single t38/image stream
+  so we now check that there's an audio stream in the topology
+  before attempting to use the audio media session to get the rtp
+  statistics.
+
+  Resolves: #592
+
+- ### Reduce startup/shutdown verbose logging                                         
+  Author: George Joseph  
+  Date:   2024-01-31  
+
+  When started with a verbose level of 3, asterisk can emit over 1500
+  verbose message that serve no real purpose other than to fill up
+  logs. When asterisk shuts down, it emits another 1100 that are of
+  even less use. Since the testsuite runs asterisk with a verbose
+  level of 3, and asterisk starts and stops for every one of the 700+
+  tests, the number of log messages is staggering.  Besides taking up
+  resources, it also makes it hard to debug failing tests.
+
+  This commit changes the log level for those verbose messages to 5
+  instead of 3 which reduces the number of log messages to only a
+  handful. Of course, NOTICE, WARNING and ERROR message are
+  unaffected.
+
+  There's also one other minor change...
+  ast_context_remove_extension_callerid2() logs a DEBUG message
+  instead of an ERROR if the extension you're deleting doesn't exist.
+  The pjsip_config_wizard calls that function to clean up the config
+  and has been triggering that annoying error message for years.
+
+  Resolves: #582
+
+- ### configure: Rerun bootstrap on modern platform.                                  
+  Author: Naveen Albert  
+  Date:   2024-02-12  
+
+  The last time configure was run, it was run on a system that
+  did not enable -std=gnu11 by default, which meant that the
+  restrict qualifier would not be recognized on certain platforms.
+  This regenerates the configure files from running bootstrap.sh,
+  so that these should be recognized on all supported platforms.
+
+  Resolves: #586
+
+- ### Upgrade bundled pjproject to 2.14.                                              
+  Author: Ben Ford  
+  Date:   2024-02-05  
+
+  Fixes: #406
+
+  UserNote: Bundled pjproject has been upgraded to 2.14. For more
+  information on what all is included in this change, check out the
+  pjproject Github page: https://github.com/pjsip/pjproject/releases
+
+
+- ### app_speech_utils.c: Allow partial speech results.                               
+  Author: cmaj  
+  Date:   2024-02-02  
+
+  Adds 'p' option to SpeechBackground() application.
+  With this option, when the app timeout is reached,
+  whatever the backend speech engine collected will
+  be returned as if it were the final, full result.
+  (This works for engines that make partial results.)
+
+  Resolves: #572
+
+  UserNote: The SpeechBackground dialplan application now supports a 'p'
+  option that will return partial results from speech engines that
+  provide them when a timeout occurs.
+
+
+- ### utils: Make behavior of ast_strsep* match strsep.                               
+  Author: Joshua C. Colp  
+  Date:   2024-01-31  
+
+  Given the scenario of passing an empty string to the
+  ast_strsep functions the functions would return NULL
+  instead of an empty string. This is counter to how
+  strsep itself works.
+
+  This change alters the behavior of the functions to
+  match that of strsep.
+
+  Fixes: #565
+
+- ### app_chanspy: Add 'D' option for dual-channel audio                              
+  Author: Mike Bradeen  
+  Date:   2024-01-31  
+
+  Adds the 'D' option to app chanspy that causes the input and output
+  frames of the spied channel to be interleaved in the spy output frame.
+  This allows the input and output of the spied channel to be decoded
+  separately by the receiver.
+
+  If the 'o' option is also set, the 'D' option is ignored as the
+  audio being spied is inherently one direction.
+
+  Fixes: #569
+
+  UserNote: The ChanSpy application now accepts the 'D' option which
+  will interleave the spied audio within the outgoing frames. The
+  purpose of this is to allow the audio to be read as a Dual channel
+  stream with separate incoming and outgoing audio. Setting both the
+  'o' option and the 'D' option and results in the 'D' option being
+  ignored.
+
+
+- ### app_if: Fix next priority calculation.                                          
+  Author: Naveen Albert  
+  Date:   2024-01-28  
+
+  Commit fa3922a4d28860d415614347d9f06c233d2beb07 fixed
+  a branching issue but "overshoots" when calculating
+  the next priority. This fixes that; accompanying
+  test suite tests have also been extended.
+
+  Resolves: #560
+
+- ### res_pjsip_t38.c: Permit IPv6 SDP connection addresses.                          
+  Author: Sean Bright  
+  Date:   2024-01-29  
+
+  The existing code prevented IPv6 addresses from being properly parsed.
+
+  Fixes #558
+
+
+- ### BuildSystem: Bump autotools versions on OpenBSD.                                
+  Author: Brad Smith  
+  Date:   2024-01-27  
+
+  Bump up to the more commonly used and modern versions of
+  autoconf and automake.
+
+
+- ### main/utils: Simplify the FreeBSD ast_get_tid() handling                         
+  Author: Brad Smith  
+  Date:   2024-01-27  
+
+  FreeBSD has had kernel threads for 20+ years.
+
+
+- ### res_pjsip_session.c: Correctly format SDP connection addresses.                 
+  Author: Sean Bright  
+  Date:   2024-01-27  
+
+  Resolves a regression identified by @justinludwig involving the
+  rendering of IPv6 addresses in outgoing SDP.
+
+  Also updates `media_address` on PJSIP endpoints so that if we are able
+  to parse the configured value as an IP we store it in a format that we
+  can directly use later. Based on my reading of the code it appeared
+  that one could configure `media_address` as:
+
+  ```
+  [foo]
+  type = endpoint
+  ...
+  media_address = [2001:db8::]
+  ```
+
+  And that value would be blindly copied into the outgoing SDP without
+  regard to its format.
+
+  Fixes #541
+
+
+- ### rtp_engine.c: Correct sample rate typo for L16/44100.                           
+  Author: Sean Bright  
+  Date:   2024-01-28  
+
+  Fixes #555
+
+
+- ### manager.c: Fix erroneous reloads in UpdateConfig.                               
+  Author: Naveen Albert  
+  Date:   2024-01-25  
+
+  Currently, a reload will always occur if the
+  Reload header is provided for the UpdateConfig
+  action. However, we should not be doing a reload
+  if the header value has a falsy value, per the
+  documentation, so this makes the reload behavior
+  consistent with the existing documentation.
+
+  Resolves: #551
+
+- ### res_calendar_icalendar: Print iCalendar error on parsing failure.               
+  Author: Naveen Albert  
+  Date:   2023-12-14  
+
+  If libical fails to parse a calendar, print the error message it provdes.
+
+  Resolves: #492
+
+- ### app_confbridge: Don't emit warnings on valid configurations.                    
+  Author: Sean Bright  
+  Date:   2024-01-21  
+
+  The numeric bridge profile options `internal_sample_rate` and
+  `maximum_sample_rate` are documented to accept the special values
+  `auto` and `none`, respectively. While these values currently work,
+  they also emit warnings when used which could be confusing for users.
+
+  In passing, also ensure that we only accept the documented range of
+  sample rate values between 8000 and 192000.
+
+  Fixes #546
+
+
+- ### app_voicemail: add NoOp alembic script to maintain sync                         
+  Author: Mike Bradeen  
+  Date:   2024-01-17  
+
+  Adding a NoOp alembic script for the voicemail database to maintain
+  version sync with other branches.
+
+  Fixes: #527
+
+- ### chan_dahdi: Allow MWI to be manually toggled on channels.                       
+  Author: Naveen Albert  
+  Date:   2023-11-10  
+
+  This adds a CLI command to manually toggle the MWI status
+  of a channel, useful for troubleshooting or resetting
+  MWI devices, similar to the capabilities offered with
+  SIP messaging to manually control MWI status.
+
+  UserNote: The 'dahdi set mwi' now allows MWI on channels
+  to be manually toggled if needed for troubleshooting.
+
+  Resolves: #440
+
+- ### chan_rtp.c: MulticastRTP missing refcount without codec option                  
+  Author: PeterHolik  
+  Date:   2024-01-15  
+
+  Fixes: #529
+
+- ### chan_rtp.c: Change MulticastRTP nameing to avoid memory leak                    
+  Author: PeterHolik  
+  Date:   2024-01-16  
+
+  Fixes: asterisk#536
+
+- ### func_frame_trace: Add CLI command to dump frame queue.                          
+  Author: Naveen Albert  
+  Date:   2024-01-12  
+
+  This adds a simple CLI command that can be used for
+  analyzing all frames currently queued to a channel.
+
+  A couple log messages are also adjusted to be more
+  useful in tracing bridging problems.
+
+  Resolves: #533
+
diff --git a/contrib/realtime/mysql/mysql_config.sql b/contrib/realtime/mysql/mysql_config.sql
index 8628aa97af..9f5113bd20 100644
--- a/contrib/realtime/mysql/mysql_config.sql
+++ b/contrib/realtime/mysql/mysql_config.sql
@@ -1474,3 +1474,204 @@ ALTER TABLE ps_transports MODIFY method ENUM('default','unspecified','tlsv1','tl
 
 UPDATE alembic_version SET version_num='37a5332640e2' WHERE alembic_version.version_num = 'dac2b4c328b8';
 
+-- Running upgrade 37a5332640e2 -> 24c12d8e9014
+
+UPDATE alembic_version SET version_num='24c12d8e9014' WHERE alembic_version.version_num = '37a5332640e2';
+
+-- Running upgrade 24c12d8e9014 -> bd335bae5d33
+
+CREATE TABLE stir_tn (
+    id VARCHAR(80) NOT NULL, 
+    private_key_file VARCHAR(1024), 
+    public_cert_url VARCHAR(1024), 
+    attest_level VARCHAR(1), 
+    send_mky ENUM('0','1','off','on','false','true','no','yes'), 
+    PRIMARY KEY (id)
+);
+
+UPDATE alembic_version SET version_num='bd335bae5d33' WHERE alembic_version.version_num = '24c12d8e9014';
+
+-- Running upgrade bd335bae5d33 -> 74dc751dfe8e
+
+ALTER TABLE ps_aors MODIFY authenticate_qualify ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_aors MODIFY remove_existing ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_aors MODIFY remove_unavailable ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_aors MODIFY support_path ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_asterisk_publications MODIFY device_state ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_asterisk_publications MODIFY mailbox_state ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_contacts MODIFY authenticate_qualify ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_contacts MODIFY prune_on_boot ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoint_id_ips MODIFY srv_lookups ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY `100rel` ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY accept_multiple_sdp_answers ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY aggregate_mwi ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY allow_overlap ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY allow_subscribe ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY allow_transfer ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY allow_unauthenticated_options ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY asymmetric_rtp_codec ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY bind_rtp_to_media_address ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY bundle ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY direct_media ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY disable_direct_media_on_nat ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY dtls_auto_generate_cert ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY fax_detect ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY follow_early_media_fork ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY force_avp ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY force_rport ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY g726_non_standard ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY ice_support ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY ignore_183_without_sdp ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY inband_progress ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY media_encryption_optimistic ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY media_use_received_transport ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY moh_passthrough ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY mwi_subscribe_replaces_unsolicited ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY notify_early_inuse_ringing ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY one_touch_recording ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY preferred_codec_only ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY refer_blind_progress ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY rewrite_contact ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY rpid_immediate ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY rtcp_mux ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY rtp_ipv6 ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY rtp_symmetric ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY send_aoc ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY send_connected_line ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY send_diversion ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY send_history_info ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY send_pai ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY send_rpid ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY srtp_tag_32 ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY stir_shaken ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY suppress_q850_reason_headers ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY t38_bind_udptl_to_media_address ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY t38_udptl ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY t38_udptl_ipv6 ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY t38_udptl_nat ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY timers ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY trust_connected_line ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY trust_id_inbound ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY trust_id_outbound ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY use_avpf ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY use_ptime ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY user_eq_phone ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_endpoints MODIFY webrtc ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_globals MODIFY all_codecs_on_empty_reinvite ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_globals MODIFY allow_sending_180_after_183 ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_globals MODIFY disable_multi_domain ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_globals MODIFY ignore_uri_user_options ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_globals MODIFY mwi_disable_initial_unsolicited ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_globals MODIFY norefersub ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_globals MODIFY send_contact_status_on_update_registration ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_globals MODIFY use_callerid_contact ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_outbound_publishes MODIFY multi_user ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_registrations MODIFY auth_rejection_permanent ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_registrations MODIFY line ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_registrations MODIFY support_path ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_resource_list MODIFY full_state ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_resource_list MODIFY resource_display_name ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_subscription_persistence MODIFY prune_on_boot ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_systems MODIFY accept_multiple_sdp_answers ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_systems MODIFY compact_headers ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_systems MODIFY disable_rport ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_systems MODIFY disable_tcp_switch ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_systems MODIFY follow_early_media_fork ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_transports MODIFY allow_reload ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_transports MODIFY allow_wildcard_certs ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_transports MODIFY require_client_cert ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_transports MODIFY symmetric_transport ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_transports MODIFY verify_client ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+ALTER TABLE ps_transports MODIFY verify_server ENUM('0','1','off','on','false','true','no','yes') NULL;
+
+UPDATE alembic_version SET version_num='74dc751dfe8e' WHERE alembic_version.version_num = 'bd335bae5d33';
+
diff --git a/contrib/realtime/mysql/mysql_voicemail.sql b/contrib/realtime/mysql/mysql_voicemail.sql
index b30456e41c..8c9d9617c4 100644
--- a/contrib/realtime/mysql/mysql_voicemail.sql
+++ b/contrib/realtime/mysql/mysql_voicemail.sql
@@ -33,3 +33,7 @@ ALTER TABLE voicemail_messages MODIFY recording BLOB(4294967295) NULL;
 
 UPDATE alembic_version SET version_num='39428242f7f5' WHERE alembic_version.version_num = 'a2e9769475e';
 
+-- Running upgrade 39428242f7f5 -> 1c55c341360f
+
+UPDATE alembic_version SET version_num='1c55c341360f' WHERE alembic_version.version_num = '39428242f7f5';
+
diff --git a/contrib/realtime/postgresql/postgresql_config.sql b/contrib/realtime/postgresql/postgresql_config.sql
index bc48664367..52bec6f549 100644
--- a/contrib/realtime/postgresql/postgresql_config.sql
+++ b/contrib/realtime/postgresql/postgresql_config.sql
@@ -1598,5 +1598,206 @@ DROP TYPE pjsip_transport_method_values;
 
 UPDATE alembic_version SET version_num='37a5332640e2' WHERE alembic_version.version_num = 'dac2b4c328b8';
 
+-- Running upgrade 37a5332640e2 -> 24c12d8e9014
+
+UPDATE alembic_version SET version_num='24c12d8e9014' WHERE alembic_version.version_num = '37a5332640e2';
+
+-- Running upgrade 24c12d8e9014 -> bd335bae5d33
+
+CREATE TABLE stir_tn (
+    id VARCHAR(80) NOT NULL, 
+    private_key_file VARCHAR(1024), 
+    public_cert_url VARCHAR(1024), 
+    attest_level VARCHAR(1), 
+    send_mky ast_bool_values, 
+    PRIMARY KEY (id)
+);
+
+UPDATE alembic_version SET version_num='bd335bae5d33' WHERE alembic_version.version_num = '24c12d8e9014';
+
+-- Running upgrade bd335bae5d33 -> 74dc751dfe8e
+
+ALTER TABLE ps_aors ALTER COLUMN authenticate_qualify TYPE ast_bool_values USING "authenticate_qualify"::text::ast_bool_values;
+
+ALTER TABLE ps_aors ALTER COLUMN remove_existing TYPE ast_bool_values USING "remove_existing"::text::ast_bool_values;
+
+ALTER TABLE ps_aors ALTER COLUMN remove_unavailable TYPE ast_bool_values USING "remove_unavailable"::text::ast_bool_values;
+
+ALTER TABLE ps_aors ALTER COLUMN support_path TYPE ast_bool_values USING "support_path"::text::ast_bool_values;
+
+ALTER TABLE ps_asterisk_publications ALTER COLUMN device_state TYPE ast_bool_values USING "device_state"::text::ast_bool_values;
+
+ALTER TABLE ps_asterisk_publications ALTER COLUMN mailbox_state TYPE ast_bool_values USING "mailbox_state"::text::ast_bool_values;
+
+ALTER TABLE ps_contacts ALTER COLUMN authenticate_qualify TYPE ast_bool_values USING "authenticate_qualify"::text::ast_bool_values;
+
+ALTER TABLE ps_contacts ALTER COLUMN prune_on_boot TYPE ast_bool_values USING "prune_on_boot"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoint_id_ips ALTER COLUMN srv_lookups TYPE ast_bool_values USING "srv_lookups"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN "100rel" TYPE ast_bool_values USING "100rel"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN accept_multiple_sdp_answers TYPE ast_bool_values USING "accept_multiple_sdp_answers"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN aggregate_mwi TYPE ast_bool_values USING "aggregate_mwi"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN allow_overlap TYPE ast_bool_values USING "allow_overlap"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN allow_subscribe TYPE ast_bool_values USING "allow_subscribe"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN allow_transfer TYPE ast_bool_values USING "allow_transfer"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN allow_unauthenticated_options TYPE ast_bool_values USING "allow_unauthenticated_options"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN asymmetric_rtp_codec TYPE ast_bool_values USING "asymmetric_rtp_codec"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN bind_rtp_to_media_address TYPE ast_bool_values USING "bind_rtp_to_media_address"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN bundle TYPE ast_bool_values USING "bundle"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN direct_media TYPE ast_bool_values USING "direct_media"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN disable_direct_media_on_nat TYPE ast_bool_values USING "disable_direct_media_on_nat"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN dtls_auto_generate_cert TYPE ast_bool_values USING "dtls_auto_generate_cert"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN fax_detect TYPE ast_bool_values USING "fax_detect"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN follow_early_media_fork TYPE ast_bool_values USING "follow_early_media_fork"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN force_avp TYPE ast_bool_values USING "force_avp"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN force_rport TYPE ast_bool_values USING "force_rport"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN g726_non_standard TYPE ast_bool_values USING "g726_non_standard"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN ice_support TYPE ast_bool_values USING "ice_support"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN ignore_183_without_sdp TYPE ast_bool_values USING "ignore_183_without_sdp"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN inband_progress TYPE ast_bool_values USING "inband_progress"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN media_encryption_optimistic TYPE ast_bool_values USING "media_encryption_optimistic"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN media_use_received_transport TYPE ast_bool_values USING "media_use_received_transport"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN moh_passthrough TYPE ast_bool_values USING "moh_passthrough"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN mwi_subscribe_replaces_unsolicited TYPE ast_bool_values USING "mwi_subscribe_replaces_unsolicited"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN notify_early_inuse_ringing TYPE ast_bool_values USING "notify_early_inuse_ringing"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN one_touch_recording TYPE ast_bool_values USING "one_touch_recording"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN preferred_codec_only TYPE ast_bool_values USING "preferred_codec_only"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN refer_blind_progress TYPE ast_bool_values USING "refer_blind_progress"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN rewrite_contact TYPE ast_bool_values USING "rewrite_contact"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN rpid_immediate TYPE ast_bool_values USING "rpid_immediate"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN rtcp_mux TYPE ast_bool_values USING "rtcp_mux"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN rtp_ipv6 TYPE ast_bool_values USING "rtp_ipv6"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN rtp_symmetric TYPE ast_bool_values USING "rtp_symmetric"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN send_aoc TYPE ast_bool_values USING "send_aoc"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN send_connected_line TYPE ast_bool_values USING "send_connected_line"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN send_diversion TYPE ast_bool_values USING "send_diversion"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN send_history_info TYPE ast_bool_values USING "send_history_info"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN send_pai TYPE ast_bool_values USING "send_pai"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN send_rpid TYPE ast_bool_values USING "send_rpid"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN srtp_tag_32 TYPE ast_bool_values USING "srtp_tag_32"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN stir_shaken TYPE ast_bool_values USING "stir_shaken"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN suppress_q850_reason_headers TYPE ast_bool_values USING "suppress_q850_reason_headers"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN t38_bind_udptl_to_media_address TYPE ast_bool_values USING "t38_bind_udptl_to_media_address"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN t38_udptl TYPE ast_bool_values USING "t38_udptl"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN t38_udptl_ipv6 TYPE ast_bool_values USING "t38_udptl_ipv6"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN t38_udptl_nat TYPE ast_bool_values USING "t38_udptl_nat"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN timers TYPE ast_bool_values USING "timers"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN trust_connected_line TYPE ast_bool_values USING "trust_connected_line"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN trust_id_inbound TYPE ast_bool_values USING "trust_id_inbound"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN trust_id_outbound TYPE ast_bool_values USING "trust_id_outbound"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN use_avpf TYPE ast_bool_values USING "use_avpf"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN use_ptime TYPE ast_bool_values USING "use_ptime"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN user_eq_phone TYPE ast_bool_values USING "user_eq_phone"::text::ast_bool_values;
+
+ALTER TABLE ps_endpoints ALTER COLUMN webrtc TYPE ast_bool_values USING "webrtc"::text::ast_bool_values;
+
+ALTER TABLE ps_globals ALTER COLUMN all_codecs_on_empty_reinvite TYPE ast_bool_values USING "all_codecs_on_empty_reinvite"::text::ast_bool_values;
+
+ALTER TABLE ps_globals ALTER COLUMN allow_sending_180_after_183 TYPE ast_bool_values USING "allow_sending_180_after_183"::text::ast_bool_values;
+
+ALTER TABLE ps_globals ALTER COLUMN disable_multi_domain TYPE ast_bool_values USING "disable_multi_domain"::text::ast_bool_values;
+
+ALTER TABLE ps_globals ALTER COLUMN ignore_uri_user_options TYPE ast_bool_values USING "ignore_uri_user_options"::text::ast_bool_values;
+
+ALTER TABLE ps_globals ALTER COLUMN mwi_disable_initial_unsolicited TYPE ast_bool_values USING "mwi_disable_initial_unsolicited"::text::ast_bool_values;
+
+ALTER TABLE ps_globals ALTER COLUMN norefersub TYPE ast_bool_values USING "norefersub"::text::ast_bool_values;
+
+ALTER TABLE ps_globals ALTER COLUMN send_contact_status_on_update_registration TYPE ast_bool_values USING "send_contact_status_on_update_registration"::text::ast_bool_values;
+
+ALTER TABLE ps_globals ALTER COLUMN use_callerid_contact TYPE ast_bool_values USING "use_callerid_contact"::text::ast_bool_values;
+
+ALTER TABLE ps_outbound_publishes ALTER COLUMN multi_user TYPE ast_bool_values USING "multi_user"::text::ast_bool_values;
+
+ALTER TABLE ps_registrations ALTER COLUMN auth_rejection_permanent TYPE ast_bool_values USING "auth_rejection_permanent"::text::ast_bool_values;
+
+ALTER TABLE ps_registrations ALTER COLUMN line TYPE ast_bool_values USING "line"::text::ast_bool_values;
+
+ALTER TABLE ps_registrations ALTER COLUMN support_path TYPE ast_bool_values USING "support_path"::text::ast_bool_values;
+
+ALTER TABLE ps_resource_list ALTER COLUMN full_state TYPE ast_bool_values USING "full_state"::text::ast_bool_values;
+
+ALTER TABLE ps_resource_list ALTER COLUMN resource_display_name TYPE ast_bool_values USING "resource_display_name"::text::ast_bool_values;
+
+ALTER TABLE ps_subscription_persistence ALTER COLUMN prune_on_boot TYPE ast_bool_values USING "prune_on_boot"::text::ast_bool_values;
+
+ALTER TABLE ps_systems ALTER COLUMN accept_multiple_sdp_answers TYPE ast_bool_values USING "accept_multiple_sdp_answers"::text::ast_bool_values;
+
+ALTER TABLE ps_systems ALTER COLUMN compact_headers TYPE ast_bool_values USING "compact_headers"::text::ast_bool_values;
+
+ALTER TABLE ps_systems ALTER COLUMN disable_rport TYPE ast_bool_values USING "disable_rport"::text::ast_bool_values;
+
+ALTER TABLE ps_systems ALTER COLUMN disable_tcp_switch TYPE ast_bool_values USING "disable_tcp_switch"::text::ast_bool_values;
+
+ALTER TABLE ps_systems ALTER COLUMN follow_early_media_fork TYPE ast_bool_values USING "follow_early_media_fork"::text::ast_bool_values;
+
+ALTER TABLE ps_transports ALTER COLUMN allow_reload TYPE ast_bool_values USING "allow_reload"::text::ast_bool_values;
+
+ALTER TABLE ps_transports ALTER COLUMN allow_wildcard_certs TYPE ast_bool_values USING "allow_wildcard_certs"::text::ast_bool_values;
+
+ALTER TABLE ps_transports ALTER COLUMN require_client_cert TYPE ast_bool_values USING "require_client_cert"::text::ast_bool_values;
+
+ALTER TABLE ps_transports ALTER COLUMN symmetric_transport TYPE ast_bool_values USING "symmetric_transport"::text::ast_bool_values;
+
+ALTER TABLE ps_transports ALTER COLUMN verify_client TYPE ast_bool_values USING "verify_client"::text::ast_bool_values;
+
+ALTER TABLE ps_transports ALTER COLUMN verify_server TYPE ast_bool_values USING "verify_server"::text::ast_bool_values;
+
+UPDATE alembic_version SET version_num='74dc751dfe8e' WHERE alembic_version.version_num = 'bd335bae5d33';
+
 COMMIT;
 
diff --git a/contrib/realtime/postgresql/postgresql_voicemail.sql b/contrib/realtime/postgresql/postgresql_voicemail.sql
index db7d09a930..274749ae60 100644
--- a/contrib/realtime/postgresql/postgresql_voicemail.sql
+++ b/contrib/realtime/postgresql/postgresql_voicemail.sql
@@ -35,5 +35,9 @@ ALTER TABLE voicemail_messages ALTER COLUMN recording TYPE BYTEA;
 
 UPDATE alembic_version SET version_num='39428242f7f5' WHERE alembic_version.version_num = 'a2e9769475e';
 
+-- Running upgrade 39428242f7f5 -> 1c55c341360f
+
+UPDATE alembic_version SET version_num='1c55c341360f' WHERE alembic_version.version_num = '39428242f7f5';
+
 COMMIT;
 
-- 
GitLab