media formats: re-architect handling of media for performance improvements
[asterisk/asterisk.git] / UPGRADE.txt
index c726aca..535782a 100644 (file)
 === UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
 === UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
 === UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
-=== UPGRADE-10.txt -- Upgrade info for 1.8 to 10
-=== UPGRADE-11.txt -- Upgrade info for 10 to 11
-===
+=== UPGRADE-10.txt  -- Upgrade info for 1.8 to 10
+=== UPGRADE-11.txt  -- Upgrade info for 10 to 11
+=== UPGRADE-12.txt  -- Upgrade info for 11 to 12
 ===========================================================
 
-From 11 to 12:
+From 12 to 13:
+
+ - Sample config files have been moved from configs/ to a subfolder of that
+   directory, 'samples'.
+
+ - The menuselect utility has been pulled into the Asterisk repository. As a
+   result, the libxml2 development library is now a required dependency for
+   Asterisk.
+
+ - The asterisk command line -I option and the asterisk.conf internal_timing
+   option are removed and always enabled if any timing module is loaded.
+
+ - The per console verbose level feature as previously implemented caused a
+   large performance penalty.  The fix required some minor incompatibilities
+   if the new rasterisk is used to connect to an earlier version.  If the new
+   rasterisk connects to an older Asterisk version then the root console verbose
+   level is always affected by the "core set verbose" command of the remote
+   console even though it may appear to only affect the current console.  If
+   an older version of rasterisk connects to the new version then the
+   "core set verbose" command will have no effect.
+
+ - Added a new Compiler Flag, REF_DEBUG. When enabled, reference counted
+   objects will emit additional debug information to the refs log file located
+   in the standard Asterisk log file directory. This log file is useful in
+   tracking down object leaks and other reference counting issues. Prior to
+   this version, this option was only available by modifying the source code
+   directly. This change also includes a new script, refcounter.py, in the
+   contrib folder that will process the refs log file.
+
+ - The asterisk compatibility options in asterisk.conf have been removed.
+   These options enabled certain backwards compatibility features for
+   pbx_realtime, res_agi, and app_set that made their behaviour similar to
+   Asterisk 1.4. Users who used these backwards compatibility settings should
+   update their dialplans to use ',' instead of '|' as a delimiter, and should
+   use the Set dialplan application instead of the MSet dialplan application.
+
+ARI:
+ - The ARI version has been changed from 1.0.0 to 1.1.0. This is to reflect
+   the backwards compatible changes listed below.
+
+ - Added a new ARI resource 'mailboxes' which allows the creation and
+   modification of mailboxes managed by external MWI. Modules res_mwi_external
+   and res_stasis_mailbox must be enabled to use this resource.
+
+ - Added new events for externally initiated transfers. The event
+   BridgeBlindTransfer is now raised when a channel initiates a blind transfer
+   of a bridge in the ARI controlled application to the dialplan; the
+   BridgeAttendedTransfer event is raised when a channel initiates an
+   attended transfer of a bridge in the ARI controlled application to the
+   dialplan.
+
+ - Channel variables may now be specified as a body parameter to the
+   POST /channels operation. The 'variables' key in the JSON is interpreted
+   as a sequence of key/value pairs that will be added to the created channel
+   as channel variables. Other parameters in the JSON body are treated as
+   query parameters of the same name.
+
+ - A bug fix in bridge creation has caused a behavioural change in how
+   subscriptions are created for bridges. A bridge created through ARI, does
+   not, by itself, have a subscription created for any particular Stasis
+   application. When a channel in a Stasis application joins a bridge, an
+   implicit event subscription is created for that bridge as well. Previously,
+   when a channel left such a bridge, the subscription was leaked; this allowed
+   for later bridge events to continue to be pushed to the subscribed
+   applications. That leak has been fixed; as a result, bridge events that were
+   delivered after a channel left the bridge are no longer delivered. An
+   application must subscribe to a bridge through the applications resource if
+   it wishes to receive all events related to a bridge.
 
 AMI:
- - The SIP SIPqualifypeer action now sends a response indicating it will qualify
-   a peer once a peer has been found to qualify.  Once the qualify has been
-   completed it will now issue a SIPqualifypeerdone event.
-
-Queues:
- - Queue logging for PAUSEALL/UNPAUSEALL now only occurs if the interface this is
-   performed on is a member of at least one queue.
- - Queue strategy rrmemory now has a predictable order similar to strategy
-   rrordered. Members will be called in the order that they are added to the
-   queue.
- - CDR behavior in app_queue has been modified slightly.  The CDR record will
-   now only record a disposition of BUSY if all Queue members were actually
-   busy on a call or some Queue members were busy or paused.  Previously, any
-   Queue member being paused would result in a disposition of BUSY.
-
-Dial:
- - Now recognizes 'W' to pause sending DTMF for one second in addition to
-   the previously existing 'w' that paused sending DTMF for half a second.
-
-ExternalIVR:
- - Now recognizes 'W' to pause sending DTMF for one second in addition to
-   the previously existing 'w' that paused sending DTMF for half a second.
-
-SendDTMF:
- - Now recognizes 'W' to pause sending DTMF for one second in addition to
-   the previously existing 'w' that paused sending DTMF for half a second.
+ - The AMI version has been changed from 2.0.0 to 2.1.0. This is to reflect
+   the backwards compatible changes listed below.
+
+ - The DialStatus field in the DialEnd event can now have additional values.
+   This includes ABORT, CONTINUE, and GOTO.
+
+ - The res_mwi_external_ami module can, if loaded, provide additional AMI
+   actions and events that convey MWI state within Asterisk. This includes
+   the MWIGet, MWIUpdate, and MWIDelete actions, as well as the MWIGet and
+   MWIGetComplete events that occur in response to an MWIGet action.
+
+ - AMI now contains a new class authorization, 'security'. This is used with
+   the following new events: FailedACL, InvalidAccountID, SessionLimit,
+   MemoryLimit, LoadAverageLimit, RequestNotAllowed, AuthMethodNotAllowed,
+   RequestBadFormat, SuccessfulAuth, UnexpectedAddress, ChallengeResponseFailed,
+   InvalidPassword, ChallengeSent, and InvalidTransport.
+
+ - Bridge related events now have two additional fields: BridgeName and
+   BridgeCreator. BridgeName is a descriptive name for the bridge;
+   BridgeCreator is the name of the entity that created the bridge. This
+   affects the following events: ConfbridgeStart, ConfbridgeEnd,
+   ConfbridgeJoin, ConfbridgeLeave, ConfbridgeRecord, ConfbridgeStopRecord,
+   ConfbridgeMute, ConfbridgeUnmute, ConfbridgeTalking, BlindTransfer,
+   AttendedTransfer, BridgeCreate, BridgeDestroy, BridgeEnter, BridgeLeave
+
+ - MixMonitor AMI actions now require users to have authorization classes.
+   * MixMonitor - system
+   * MixMonitorMute - call or system
+   * StopMixMonitor - call or system
+
+ - Removed the undocumented manager.conf block-sockets option.  It interferes with
+   TCP/TLS inactivity timeouts.
+
+ - The response to the PresenceState AMI action has historically contained two
+   Message keys. The first of these is used as an informative message regarding
+   the success/failure of the action; the second contains a Presence state
+   specific message. Having two keys with the same unique name in an AMI
+   message is cumbersome for some client; hence, the Presence specific Message
+   has been deprecated. The message will now contain a PresenceMessage key
+   for the presence specific information; the Message key containing presence
+   information will be removed in the next major version of AMI.
+
+CDRs:
+ - The "endbeforehexten" setting now defaults to "yes", instead of "no".
+   When set to "no", yhis setting will cause a new CDR to be generated when a
+   channel enters into hangup logic (either the 'h' extension or a hangup
+   handler subroutine). In general, this is not the preferred default: this
+   causes extra CDRs to be generated for a channel in many common dialplans.
+
+ - The cdr_sqlite module was deprecated and has been removed. Users of this
+   module should use the cdr_sqlite3_custom module instead.
 
 chan_dahdi:
- - Analog port dialing and deferred DTMF dialing for PRI now distinguishes
-   between 'w' and 'W'.  The 'w' pauses dialing for half a second.  The 'W'
-   pauses dialing for one second.
-
-From 10 to 11:
-
-Voicemail:
- - All voicemails now have a "msg_id" which uniquely identifies a message. For
-   users of filesystem and IMAP storage of voicemail, this should be transparent.
-   For users of ODBC, you will need to add a "msg_id" column to your voice mail
-   messages table. This should be a string capable of holding at least 32 characters.
-   All messages created in old Asterisk installations will have a msg_id added to
-   them when required. This operation should be transparent as well.
-
-Parking:
- - The comebacktoorigin setting must now be set per parking lot. The setting in
-   the general section will not be applied automatically to each parking lot.
- - The BLINDTRANSFER channel variable is deleted from a channel when it is
-   bridged to prevent subtle bugs in the parking feature.  The channel
-   variable is used by Asterisk internally for the Park application to work
-   properly.  If you were using it for your own purposes, copy it to your
-   own channel variable before the channel is bridged.
-
-res_ais:
- - Users of res_ais in versions of Asterisk prior to Asterisk 11 must change
-   to use the res_corosync module, instead.  OpenAIS is deprecated, but
-   Corosync is still actively developed and maintained.  Corosync came out of
-   the OpenAIS project.
-
-Dialplan Functions:
- - MAILBOX_EXISTS has been deprecated. Use VM_INFO with the 'exists' parameter
-   instead.
- - Macro has been deprecated in favor of GoSub.  For redirecting and connected
-   line purposes use the following variables instead of their macro equivalents:
-   REDIRECTING_SEND_SUB, REDIRECTING_SEND_SUB_ARGS,
-   CONNECTED_LINE_SEND_SUB, CONNECTED_LINE_SEND_SUB_ARGS.
- - The REDIRECTING function now supports the redirecting original party id
-   and reason.
- - The HANGUPCAUSE and HANGUPCAUSE_KEYS functions have been introduced to
-   provide a replacement for the SIP_CAUSE hash. The HangupCauseClear
-   application has also been introduced to remove this data from the channel
-   when necessary.
-
-
-func_enum:
- - ENUM query functions now return a count of -1 on lookup error to
-   differentiate between a failed query and a successful query with 0 results
-   matching the specified type.
-
-CDR:
- - cdr_adaptive_odbc now supports specifying a schema so that Asterisk can
-   connect to databases that use schemas.
-
-Configuration Files:
- - Files listed below have been updated to be more consistent with how Asterisk
-   parses configuration files.  This makes configuration files more consistent
-   with what is expected across modules.
+ - SS7 support now requires libss7 v2.0 or later.
 
-   - cdr.conf: [general] and [csv] sections
-   - dnsmgr.conf
-   - dsp.conf
+ - Added the inband_on_setup_ack compatibility option to chan_dahdi.conf to
+   deal with switches that don't send an inband progress indication in the
+   SETUP ACKNOWLEDGE message.
+   Default is now no.
 
- - The 'verbose' setting in logger.conf now takes an optional argument,
-   specifying the verbosity level for each logging destination.  The default,
-   if not otherwise specified, is a verbosity of 3.
+chan_gtalk
+ - This module was deprecated and has been removed. Users of chan_gtalk
+   should use chan_motif.
 
-AMI:
-  - DBDelTree now correctly returns an error when 0 rows are deleted just as
-    the DBDel action does.
-  - The IAX2 PeerStatus event now sends a 'Port' header.  In Asterisk 10, this was
-    erroneously being sent as a 'Post' header.
-
-CCSS:
- - Macro is deprecated. Use cc_callback_sub instead of cc_callback_macro
-   in channel configurations.
+chan_h323
+ - This module was deprecated and has been removed. Users of chan_h323
+   should use chan_ooh323.
 
-app_meetme:
-  - The 'c' option (announce user count) will now work even if the 'q' (quiet)
-    option is enabled.
+chan_jingle
+ - This module was deprecated and has been removed. Users of chan_jingle
+   should use chan_motif.
 
-app_followme:
- - Answered outgoing calls no longer get cut off when the next step is started.
-   You now have until the last step times out to decide if you want to accept
-   the call or not before being disconnected.
+chan_pjsip:
+ - Added a 'force_avp' option to chan_pjsip which will force the usage of
+   'RTP/AVP', 'RTP/AVPF', 'RTP/SAVP', or 'RTP/SAVPF' as the media transport type
+   in SDP offers depending on settings, even when DTLS is used for media
+   encryption.
 
-chan_gtalk:
- - chan_gtalk has been deprecated in favor of the chan_motif channel driver. It is recommended
-   that users switch to using it as it is a core supported module.
+ - Added a 'media_use_received_transport' option to chan_pjsip which will
+   cause the SDP answer to use the media transport as received in the SDP
+   offer.
 
-chan_jingle:
- - chan_jingle has been deprecated in favor of the chan_motif channel driver. It is recommended
-   that users switch to using it as it is a core supported module.
+chan_sip:
+ - Made set SIPREFERREDBYHDR as inheritable for better chan_pjsip
+   interoperability.
+
+ - The SIPPEER dialplan function no longer supports using a colon as a
+   delimiter for parameters. The parameters for the function should be
+   delimited using a comma.
+
+ - The SIPCHANINFO dialplan function was deprecated and has been removed. Users
+   of the function should use the CHANNEL function instead.
+
+ - Added a 'force_avp' option for chan_sip. When enabled this option will
+   cause the media transport in the offer or answer SDP to be 'RTP/AVP',
+   'RTP/AVPF', 'RTP/SAVP', or 'RTP/SAVPF' even if a DTLS stream has been
+   configured. This option can be set to improve interoperability with WebRTC
+   clients that don't use the RFC defined transport for DTLS.
+
+ - The 'dtlsverify' option in chan_sip now has additional values besides
+   'yes' and 'no'. If 'yes' is specified both the certificate and fingerprint
+   will be verified. If 'no' is specified then neither the certificate or
+   fingerprint is verified. If 'certificate' is specified then only the
+   certificate is verified. If 'fingerprint' is specified then only the
+   fingerprint is verified.
+
+ - A 'dtlsfingerprint' option has been added to chan_sip which allows the
+   hash to be specified for the DTLS fingerprint placed in SDP. Supported
+   values are 'sha-1' and 'sha-256' with 'sha-256' being the default.
+
+ - The 'progressinband=never' option is now more zealous in the persecution of
+   progress messages coming from Asterisk. Channels bridged with a SIP channel
+   that has 'progressinband=never' set will not be able to forward their
+   progress indications through to the SIP device. chan_sip will now turn such
+   progress indications into a 180 Ringing (if a 180 has not yet been
+   transmitted) if 'progressinband=never'.
+
+  - The codec preference order in an SDP during an offer is slightly different
+    than previous releases. Prior to Asterisk 13, the preference order of
+    codecs used to be:
+    (1) Our preferred codec
+    (2) Our configured codecs
+    (3) Any non-audio joint codecs
+
+    One of the ways the new media format architecture in Asterisk 13 improves
+    performance is by reference counting formats, such that they can be reused
+    in many places without additional allocation. To not require a large
+    amount of locking, an instance of a format is immutable by convention.
+    This works well except for formats with attributes. Since a media format
+    with an attribute is a different object than the same format without an
+    attribute, we have to carry over the formats with attributes from an
+    inbound offer so that the correct attributes are offered in an outgoing
+    INVITE request. This requires some subtle tweaks to the preference order
+    to ensure that the media format with attributes is offered to a remote
+    peer, as opposed to the same media format (but without attributes) that
+    may be stored in the peer object.
+
+    All of this means that our offer offer list will now be:
+    (1) Our preferred codec
+    (2) Any joint codecs offered by the inbound offer
+    (3) All other codecs that are not the preferred codec and not a joint
+        codec offered by the inbound offer
+
+CLI commands:
+ - "core show settings" now lists the current console verbosity in addition
+   to the root console verbosity.
+
+ - "core set verbose" has not been able to support the by module verbose
+   logging levels since verbose logging levels were made per console.  That
+   syntax is now removed and a silence option added in its place.
+
+ConfBridge:
+- The sound_place_into_conference sound used in Confbridge is now deprecated
+  and is no longer functional since it has been broken since its inception
+  and the fix involved using a different method to achieve the same goal. The
+  new method to achieve this functionality is by using sound_begin to play
+  a sound to the conference when waitmarked users are moved into the conference.
 
-SIP
-===
- - A new option "tonezone" for setting default tonezone for the channel driver
-   or individual devices
- - A new manager event, "SessionTimeout" has been added and is triggered when
-   a call is terminated due to RTP stream inactivity or SIP session timer
-   expiration.
- - SIP_CAUSE is now deprecated.  It has been modified to use the same
-   mechanism as the HANGUPCAUSE function.  Behavior should not change, but
-   performance should be vastly improved.  The HANGUPCAUSE function should now
-   be used instead of SIP_CAUSE. Because of this, the storesipcause option in
-   sip.conf is also deprecated.
- - The sip paramater for Originating Line Information (oli, isup-oli, and
-   ss7-oli) is now parsed out of the From header and copied into the channel's
-   ANI2 information field.  This is readable from the CALLERID(ani2) dialplan
-   function.
- - ICE support has been added and is enabled by default. Some endpoints may have
-   problems with the ICE candidates within the SDP. If this is the case ICE support
-   can be disabled globally or on a per-endpoint basis using the icesupport
-   configuration option. Symptoms of this include one way media or no media flow.
-
-chan_unistim
- - Due to massive update in chan_unistim phone keys functions and on-screen 
-   information changed.
-
-users.conf:
- - A defined user with hasvoicemail=yes now finally uses a Gosub to stdexten
-   as documented in extensions.conf.sample since v1.6.0 instead of a Macro as
-   documented in v1.4.  Set the asterisk.conf stdexten=macro parameter to
-   invoke the stdexten the old way.
-
-res_jabber
- - This module has been deprecated in favor of the res_xmpp module. The res_xmpp
-   module is backwards compatible with the res_jabber configuration file, dialplan
-   functions, and AMI actions. The old CLI commands can also be made available using
-   the res_clialiases template for Asterisk 11.
-
-From 1.8 to 10:
-
-cel_pgsql:
- - This module now expects an 'extra' column in the database for data added
-   using the CELGenUserEvent() application.
-
-ConfBridge
- - ConfBridge's dialplan arguments have changed and are not
-   backwards compatible.
-
-File Interpreters
- - The format interpreter formats/format_sln16.c for the file extension
-   '.sln16' has been removed. The '.sln16' file interpreter now exists
-   in the formats/format_sln.c module along with new support for sln12,
-   sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
 
-HTTP:
- - A bindaddr must be specified in order for the HTTP server
-   to run. Previous versions would default to 0.0.0.0 if no
-   bindaddr was specified.
+Configuration Files:
+ - The 'verbose' setting in logger.conf still takes an optional argument,
+   specifying the verbosity level for each logging destination.  However,
+   the default is now to once again follow the current root console level.
+   As a result, using the AMI Command action with "core set verbose" could
+   again set the root console verbose level and affect the verbose level
+   logged.
 
-Gtalk:
- - The default value for 'context' and 'parkinglots' in gtalk.conf has
-   been changed to 'default', previously they were empty.
+ - The manager.conf 'eventfilter' now takes an "extended" regular expression
+   instead of a "basic" one.
 
-chan_dahdi:
- - The mohinterpret=passthrough setting is deprecated in favor of
-   moh_signaling=notify.
-
-pbx_lua:
- - Execution no longer continues after applications that do dialplan jumps
-   (such as app.goto).  Now when an application such as app.goto() is called,
-   control is returned back to the pbx engine and the current extension
-   function stops executing.
- - the autoservice now defaults to being on by default
- - autoservice_start() and autoservice_start() no longer return a value.
-
-Queue:
- - Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
- - QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
-
-Asterisk Database:
- - The internal Asterisk database has been switched from Berkeley DB 1.86 to
-   SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
-   utility in the UTILS section of menuselect. If an existing astdb is found and no
-   astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
-   convert an existing astdb to the SQLite3 version automatically at runtime. If
-   moving back from Asterisk 10 to Asterisk 1.8, the astdb2bdb utility can be used
-   to create a Berkeley DB copy of the SQLite3 astdb that Asterisk 10 uses.
-
-Manager:
- - The AMI protocol version was incremented to 1.2 as a result of changing two
-   instances of the Unlink event to Bridge events. This change was documented
-   as part of the AMI 1.1 update, but two Unlink events were inadvertently left
-   unchanged.
-
-Module Support Level
- - All modules in the addons, apps, bridge, cdr, cel, channels, codecs, 
-   formats, funcs, pbx, and res have been updated to include MODULEINFO data
-   that includes <support_level> tags with a value of core, extended, or deprecated.
-   More information is available on the Asterisk wiki at 
-   https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
-
-   Deprecated modules are now marked to not build by default and must be explicitly
-   enabled in menuselect.
+ - The unistim.conf 'dateformat' has changed meaning of options values to conform
+   values used inside Unistim protocol
 
-chan_sip:
- - Setting of HASH(SIP_CAUSE,<slave-channel-name>) on channels is now disabled
-   by default. It can be enabled using the 'storesipcause' option. This feature
-   has a significant performance penalty.
-
-UDPTL:
- - The default UDPTL port range in udptl.conf.sample differed from the defaults
-   in the source. If you didn't have a config file, you got 4500 to 4599. Now the
-   default is 4000 to 4999.
+HTTP:
+ - Added http.conf session_inactivity timer option to close HTTP connections
+   that aren't doing anything.
+
+ - Added support for persistent HTTP connections.  To enable persistent
+   HTTP connections configure the keep alive time between HTTP requests.  The
+   keep alive time between HTTP requests is configured in http.conf with the
+   session_keep_alive parameter.
+
+MusicOnHold
+ - The SetMusicOnHold dialplan application was deprecated and has been removed.
+   Users of the application should use the CHANNEL function's musicclass
+   setting instead.
+
+ - The WaitMusicOnHold dialplan application was deprecated and has been
+   removed. Users of the application should use MusicOnHold with a duration
+   parameter instead.
+
+ODBC:
+- The compatibility setting, allow_empty_string_in_nontext, has been removed.
+  Empty column values will be stored as empty strings during realtime updates.
+
+Realtime Configuration:
+ - WARNING: The database migration script that adds the 'extensions' table for
+   realtime had to be modified due to an error when installing for MySQL.  The
+   'extensions' table's 'id' column was changed to be a primary key.  This could
+   potentially cause a migration problem.  If so, it may be necessary to
+   manually alter the affected table/column to bring it back in line with the
+   migration scripts.
+
+ - New columns have been added to realtime tables for 'support_path' on
+   ps_registrations and ps_aors and for 'path' on ps_contacts for the new
+   SIP Path support in chan_pjsip.
+
+ - The following new tables have been added for pjsip realtime: 'ps_systems',
+   'ps_globals', 'ps_tranports', 'ps_registrations'.
+
+ - The following columns were added to the 'ps_aors' realtime table:
+   'maximum_expiration', 'outbound_proxy', and 'support_path'.
+
+ - The following columns were added to the 'ps_contacts' realtime table:
+   'outbound_proxy', 'user_agent', and 'path'.
+
+ - New columns have been added to the ps_endpoints realtime table for the
+   'media_address', 'redirect_method' and 'set_var' options.  Also the
+   'mwi_fromuser' column was renamed to 'mwi_from_user'. A new column
+   'message_context' was added to let users configure how MESSAGE requests are
+   routed to the dialplan.
+
+ - A new column was added to the 'ps_globals' realtime table for the 'debug'
+   option.
+
+ - PJSIP endpoint columns 'tos_audio' and 'tos_video' have been changed from
+   yes/no enumerators to string values. 'cos_audio' and 'cos_video' have been
+   changed from yes/no enumerators to integer values. PJSIP transport column
+   'tos' has been changed from a yes/no enumerator to a string value. 'cos' has
+   been changed from a yes/no enumerator to an integer value.
+
+ - The 'queues' and 'queue_members' realtime tables have been added to the
+   config Alembic scripts.
+
+ - A new set of Alembic scripts has been added for CDR tables. This will create
+   a 'cdr' table with the default schema that Asterisk expects.
+
+res_jabber:
+ - This module was deprecated and has been removed. Users of this module should
+   use res_xmpp instead.
+
+safe_asterisk:
+ - The safe_asterisk script was previously not installed on top of an existing
+   version. This caused bug-fixes in that script not to be deployed. If your
+   safe_asterisk script is customized, be sure to keep your changes. Custom
+   values for variables should be created in *.sh file(s) inside
+   ASTETCDIR/startup.d/. See ASTERISK-21965.
+
+ - Changed a log message in safe_asterisk and the $NOTIFY mail subject. If
+   you use tools to parse either of them, update your parse functions
+   accordingly. The changed strings are:
+   - "Exited on signal $EXITSIGNAL" => "Asterisk exited on signal $EXITSIGNAL."
+   - "Asterisk Died" => "Asterisk on $MACHINE died (sig $EXITSIGNAL)"
+
+Unistim:
+ - Added 'dtmf_duration' option with changing default operation to disable
+   receivied dtmf playback on unistim phone
+
+Utilities:
+ - The refcounter program has been removed in favor of the refcounter.py script
+   in contrib/scripts.
+
+WebSockets:
+ - Added a compatibility option to ari.conf, sip.conf, and pjsip.conf
+   'websocket_write_timeout'. When a websocket connection exists where Asterisk
+   writes a substantial amount of data to the connected client, and the connected
+   client is slow to process the received data, the socket may be disconnected.
+   In such cases, it may be necessary to adjust this value.
+   Default is 100 ms.
 
 ===========================================================
 ===========================================================