Skip to content
Snippets Groups Projects
CHANGES 356 KiB
Newer Older
  • Learn to ignore specific revisions
  • ==============================================================================
    
    === THIS FILE IS AUTOMATICALLY GENERATED DURING THE RELEASE
    === PROCESS. DO NOT MAKE CHANGES HERE. INSTEAD, REFER TO
    === doc/CHANGES-staging/README.md FOR MORE DETAILS.
    ===
    
    === This file documents the new and/or enhanced functionality added in
    === the Asterisk versions listed below. This file does NOT include
    === changes in behavior that would not be backwards compatible with
    === previous versions; for that information see the UPGRADE.txt file
    === and the other UPGRADE files for older releases.
    ===
    
    ==============================================================================
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.8.0 to Asterisk 18.9.0 ------------
    ------------------------------------------------------------------------------
    
    ToneScan application
    ------------------
     * A new application, ToneScan, allows for
       synchronous detection of call progress
       signals such as dial tone, busy tone,
       Special Information Tones, and modems.
    
    app_playback
    ------------------
     * A new option 'mix' is added to the Playback application that 
       will play by filename and say.conf. It will look on the format of the 
       name, if it is like say format it will play with say.conf if not it 
       will play the file name.
    
    app_queue
    ------------------
     * Add field to save the time value when a member enter a queue.
       Shows this time in seconds using 'queue show' command and the
       field LoginTime for responses for AMI the events.
    
       The output for the CLI command `queue show` is changed by added a
       extra data field for the information of the time login time for each
       member.
    
    apps
    ------------------
     * A new option 'mix' is added to the Playback application that 
       will play by filename and say.conf. It will look on the format of the 
       name, if it is like say format it will play with say.conf if not it 
       will play the file name.
    
    ast_coredumper
    ------------------
     * New options:
        --pid=<asterisk_pid>
          Allows specification of an Asterisk instance when trying to
          and the script can't determine it itself.
        --libdir=<system library directory>
          Allows specification of a non-standard installation directory
          containing the Asterisk modules.
        --(no-)rename
          Renames the coredump and the output files with readable
          timestamps. This is the default.
       Removed unneeded or confusing options:
        --append-coredumps
        --conffile
        --no-default-search
        --tarball-uniqueid
       Changed Variables:
        COREDUMPS is now just "/tmp/core!(*.txt)"
        DATEFORMAT is renamed to DATEOPTS and defaults to '-u +%FT%H-%M-%SZ'
       Changed behavior:
        If you use 'running' or 'RUNNING' you no longer need to specify
        '--no-default-search' to ignore existing coredumps.
    
    chan_iax2
    ------------------
     * Both a secret and an outkey may be specified at dial time,
       since encryption is possible with RSA authentication.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.7.0 to Asterisk 18.8.0 ------------
    ------------------------------------------------------------------------------
    
    MessageSend
    ------------------
     * The MessageSend AMI action has been updated to allow the Destination
       and the To addresses to be provided separately. This brings the
       MessageSend manager command in line with the capabilities of the
       MessageSend dialplan application.
    
    func_channel
    ------------------
     * Adds the CHANNEL_EXISTS function to check for the existence
       of a channel by name or unique ID.
    
    func_vmcount
    ------------------
     * Multiple mailboxes may now be specified instead of just one.
    
    logger
    ------------------
     * Added the ability to define custom log levels in logger.conf
       and use them in the Log dialplan application. Also adds a
       logger show levels CLI command.
    
    res_pjsip_registrar
    ------------------
     * Adds new PJSIP AOR option remove_unavailable to either
       remove unavailable contacts when a REGISTER exceeds
       max_contacts when remove_existing is disabled, or
       prioritize unavailable contacts over other existing
       contacts when remove_existing is enabled.
    
    res_pjsip_t38
    ------------------
     * In res_pjsip_sdp_rtp, the bind_rtp_to_media_address option and the
       fallback use of the transport's bind address solve problems sending
       media on systems that cannot send ipv4 packets on ipv6 sockets, and
       certain other situations. This change extends both of these behaviors
       to UDPTL sessions as well in res_pjsip_t38, to fix fax-specific
       problems on these systems, introducing a new option
       endpoint/t38_bind_udptl_to_media_address.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.6.0 to Asterisk 18.7.0 ------------
    ------------------------------------------------------------------------------
    
    Channel-agnostic MF support
    ------------------
     * A SendMF application and PlayMF manager
       application are now included to send
       arbitrary standard R1 MF tones on the
       current channel or another specified channel.
    
    app_milliwatt
    ------------------
     * The Milliwatt application's existing behavior is
       incorrect in that it plays a constant tone, which
       is not how digital milliwatt test lines actually
       work.
    
       An option is added so that a proper milliwatt test
       tone can be provided, including a 1 second silent
       interval every 10 seconds. However, for compatability
       reasons, the default behavior remains unchanged.
    
    app_morsecode
    ------------------
     * Extends the Morsecode application by adding support for
       American Morse code and adds a configurable option
       for the frequency used in off intervals.
    
    app_originate
    ------------------
     * Codecs can now be specified for dialplan-originated
       calls, as with call files and the manager action.
       By default, only the slin codec is now used, instead
       of all the slin* codecs.
    
    app_queue
    ------------------
     * Reload behavior in app_queue has been changed so
       queue and agent stats are not reset during full
       app_queue module reloads. The queue reset stats
       CLI command may still be used to reset stats while
       Asterisk is running.
    
    app_read
    ------------------
     * A new option allows the digit '#' to be read literally,
       rather than used exclusively as the input terminator
       character.
    
    app_voicemail
    ------------------
     * Add a new 'S' option to VoiceMail which prevents the instructions
       (vm-intro) from being played if a busy/unavailable/temporary greeting
       from the voicemail user is played. This is similar to the existing 's'
       option except that instructions will still be played if no user
       greeting is available.
    
    chan_iax2
    ------------------
     * ANI2 (OLI) is now transmitted over IAX2 calls
       as an information element.
    
    func_env.c
    ------------------
     * Two new functions, DIRNAME and BASENAME, are now
       included which allow users to obtain the directory
       or the base filename of any file.
    
    func_framedrop
    ------------------
     * New function to selectively drop specified frames
       in either direction on a channel.
    
    func_scramble
    ------------------
     * Adds an audio scrambler function that may be used to
       distort voice audio on a channel as a privacy
       enhancement.
    
    func_strings
    ------------------
     * A new STRBETWEEN function is now included which
       allows a substring to be inserted between characters
       in a string. This is particularly useful for transforming
       dial strings, such as adding pauses between digits
       for a string of digits that are sent to another channel.
    
    res_pjproject
    ------------------
     * In pjproject.conf you can now map pjproject log levels
       to the Asterisk TRACE log level.  The default mappings
       have therefore changed so that only pjproject levels
       3 and 4 are mapped to DEBUG and 5 and 6 are now mapped
       to TRACE.  Previously 3, 4, 5, and 6 were all mapped to
       DEBUG.
    
    res_rtp_asterisk
    ------------------
     * When the address of the STUN server (stunaddr) is a name resolved via DNS, the
       stunaddr will be recurringly resolved when the DNS answer Time-To-Live (TTL)
       expires. This allows the STUN server to change its IP address without having to
       reload the res_rtp_asterisk module.
    
    res_tonedetect
    ------------------
     * Arbitrary tone detection is now available through a
       WaitForTone application (blocking) and a TONE_DETECT
       function (non-blocking).
    
    say.c
    ------------------
     * Adds SAYFILES function to retrieve the file names that would
       be played by corresponding Say applications, such as
       SayDigits, SayAlpha, etc.
    
       Additionally adds SayMoney and SayOrdinal applications.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.5.0 to Asterisk 18.6.0 ------------
    ------------------------------------------------------------------------------
    
    Handle non-standard Meter metric type safely
    ------------------
     * A meter_support flag has been introduced that defaults to true to maintain current behaviour.
       If disabled, a counter metric type will be used instead wherever a meter metric type was used,
       the counter will have a "_meter" suffix appended to the metric name.
    
    app_dtmfstore
    ------------------
     * New application which collects digits
       dialed and stores them into
       a specified variable.
    
    app_queue.c
    ------------------
     * Allow multiple files to be streamed for agent announcement.
    
    chan_pjsip
    ------------------
     * Add function PJSIP_HEADERS() to get list of headers by pattern in the same way as SIP_HEADERS() do.
    
       Add ability to read header by pattern using PJSIP_HEADER().
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.5.0 to Asterisk 18.5.1 ------------
    ------------------------------------------------------------------------------
    
    New Reload application
    ------------------
     * Adds an application to reload modules
    
    PlaybackFinished has a new error state
    ------------------
     * The PlaybackFinished event now has a new state "failed"
       that is used when the sound file was not played due to an error.
       Before the state on PlaybackFinished was always "done".
    
       In case of multiple sound files to be played,
       the PlaybackFinished is sent only once in the end of the list,
       even in case of error.
    
    WaitForCondition application
    ------------------
     * This application provides a way to halt
       dialplan execution until a provided
       condition evaluates to true.
    
    app_dial announcement option
    ------------------
     * The A option for Dial now supports
       playing audio to the caller as well
       as the called party.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.4.0 to Asterisk 18.5.0 ------------
    ------------------------------------------------------------------------------
    
    AMI Flash event
    ------------------
     * Hook flash events are now exposed as AMI events.
    
    Add variable support to Originate
    ------------------
     * The Originate application now allows
       variables to be set on the new channel
       through a new option.
    
    MessageSend
    ------------------
     * The MessageSend dialplan application now takes an
       optional third argument that can set the message's
       "To" field on outgoing messages.  It's an alternative
       to using the MESSAGE(to) dialplan function.
    
       To prevent confusion with the first argument, currently
       named "to", it's been renamed to "destination".
       Its function, creating the request URI, hasn't changed.
    
       The online documentation has also been enhanced to
       explain the behavior.
    
       Despite the changes in this commit, there should be
       no impact to current users of MessageSend.
    
    New ConfKick application
    ------------------
     * Adds a ConfKick() application, which allows
       a specific channel, all users, or all non-admin
       users to be kicked from a conference bridge.
    
    app_confbridge answer supervision control
    ------------------
     * app_confbridge now provides a user option to prevent
       answer supervision if the channel hasn't been
       answered yet. To use it, set a user profile's
       answer_channel option to no.
    
    app_voicemail
    ------------------
     * You can now customize the "beep" tone or omit it entirely.
    
    func_math: Three new dialplan functions
    ------------------
     * Introduce three new functions, MIN, MAX, and ABS, which can be used to
       obtain the minimum or maximum of up to two integers or absolute value.
    
    func_volume now can be read
    ------------------
     * The VOLUME function can now also be used
       to read existing values previously set.
    
    res_pjsip
    ------------------
     * PJSIP support of registrations of endpoints in multidomain
       scenarios, where the endpoint contains the domain info
    
    
    res_pjsip_dialog_info_body_generator
    ------------------
     * PJSIP now supports RFC 4235 Section 4.1.6 dialog-info+xml local and
       remote elements by iterating through ringing channels and inserting
       that info into NOTIFY packet sent to the endpoint.
    
    res_pjsip_messaging
    ------------------
     * Implemented the new "to" parameter of the MessageSend()
       dialplan application.  This allows a user to specify
       a complete SIP "To" header separate from the Request URI.
       We now also accept a destination in the same format
       as Dial()...  PJSIP/number@endpoint
    
    res_rtp_asterisk
    ------------------
     * By default Asterisk reports the PJSIP version in all
       STUN packets it sends.
    
       This behaviour may not be desired in a production
       environment and can now be disabled by setting the
       stun_software_attribute option to 'no' in rtp.conf.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.3.0 to Asterisk 18.4.0 ------------
    ------------------------------------------------------------------------------
    
    logger
    ------------------
     * The dateformat option in logger.conf will now control the remote
       console (asterisk -r -T) timestamp format.  Previously, dateformat only
       controlled the formatting of the timestamp going to log files and the
       main console (asterisk -c) but only for non-verbose messages.
    
       Internally, Asterisk does not send the logging timestamp with verbose
       messages to console clients. It's up to the Asterisk remote consoles
       to format verbose messages.  Asterisk remote consoles previously did
       not load dateformat from logger.conf.
    
       Previously there was a non-configurable and hard-coded "%b %e %T"
       dateformat that would be used no matter what on all verbose console
       messages printed on remote consoles.
    
       Example:
       logger.conf
        dateformat=%F %T.%3q
    
       # asterisk -rvvv -T
       [2021-03-19 09:54:19.760-0400]  Loading res_stasis_answer.so.
       [Mar 19 09:55:43]     -- Goto (dialExten,s,1)
    
       Given the following example configuration in logger.conf, Asterisk log
       files and the console, will log verbose messages using the given
       timestamp.  Now ensuring that all remote console messages are logged
       with the same dateformat as other log streams.
    
       ---
       [general]
       dateformat=%F %T.%3q
    
       [logfiles]
       console  => notice,warning,error,verbose
       full     => notice,warning,error,debug,verbose
       ---
    
       Now we have a globally-defined dateformat that will be used
       consistently across the Asterisk main console, remote consoles, and
       log files.
    
       Now we have consistent logging:
    
       # asterisk -rvvv -T
       [2021-03-19 09:54:19.760-0400]  Loading res_stasis_answer.so.
       [2021-03-19 09:55:43.920-0400]     -- Goto (dialExten,s,1)
    
    res_pjsip
    ------------------
     * PJSIP transports can now be partially reloaded safely. This allows the
       local_net and external_* options to be updated without restarting Asterisk.
    
     * PJSIP endpoints can now be configured to skip authentication when
       handling OPTIONS requests by setting the allow_unauthenticated_options
       configuration property to 'yes.'
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.2.2 to Asterisk 18.3.0 ------------
    ------------------------------------------------------------------------------
    
    app_mixmonitor
    ------------------
     * app_mixmonitor now sends manager events MixMonitorStart, MixMonitorStop and
       MixMonitorMute when the channel monitoring is started, stopped and muted (or
       unmuted) respectively.
    
    chan_iax2
    ------------------
     * You can now specify a default "auth" method in the
       [general] section of iax.conf
    
    chan_pjsip, app_transfer
    ------------------
     * Added TRANSFERSTATUSPROTOCOL variable.  When transfer is performed,
       transfers can pass a protocol specific error code.
       Example, in SIP 3xx-6xx represent any SIP specific error received when
       performing a REFER.
    
    func_odbc
    ------------------
     * Introduce an ARGC variable for func_odbc functions, along with a minargs
       per-function configuration option.
    
       minargs enables enforcing of minimum count of arguments to pass to
       func_odbc, so if you're unconditionally using ARG1 through ARG4 then
       this should be set to 4.  func_odbc will generate an error in this case,
       so for example
    
       [FOO]
       minargs = 4
    
       and ODBC_FOO(a,b,c) in dialplan will now error out instead of using a
       potentially leaked ARG4 from Gosub().
    
       ARGC is needed if you're using optional argument, to verify whether or
       not an argument has been passed, else it's possible to use a leaked ARGn
       from Gosub (app_stack).  So now you can safely do
       ${IF($[${ARGC}>3]?${ARGV}:default value)} kind of thing.
    
    res_srtp
    ------------------
     * SRTP replay protection has been added to res_srtp and
       a new configuration option "srtpreplayprotection" has
       been added to the rtp.conf config file.  For security
       reasons, the default setting is "yes".  Buggy clients
       may not handle this correctly which could result in
       no, or one way, audio and Asterisk error messages like
       "replay check failed".
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.1.0 to Asterisk 18.2.0 ------------
    ------------------------------------------------------------------------------
    
    Core
    ------------------
     * The location where the media cache stores its temporary files
       is no longer hardcoded to /tmp but can now be configured separately
       via the astcachedir config variable in asterisk.conf. To retain
       backwards compatibility, the default location remains /tmp.
    
    app_voicemail
    ------------------
     * The VoiceMail application can now be configured to send greetings and
       instructions via early media and only answering the channel when it is
       time for the caller to record their message. This behavior can be
       activated by passing the new 'e' option to VoiceMail.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.0.0 to Asterisk 18.1.0 ------------
    ------------------------------------------------------------------------------
    
    Core
    ------------------
     * Added debug logging categories that allow a user to output debug information
       based on a specified category. This lets the user limit, and filter debug
       output to data relevant to a particular context, or topic. For instance the
       following categories are now available for debug logging purposes:
    
         dtls, dtls_packet, ice, rtcp, rtcp_packet, rtp, rtp_packet, stun, stun_packet
    
       These debug categories can be enable/disable via an Asterisk CLI command:
    
         core set debug category <category>[:<sublevel>] [category[:<sublevel] ...]
         core set debug category off [<category> [<category>] ...]
    
       If no sub-level is associated all debug statements for a given category are
       output. If a sub-level is given then only those statements assigned a value
       at or below the associated sub-level are output.
    
    app_confbridge
    ------------------
     * app_confbridge now has the ability to force the estimated bitrate on an SFU
       bridge.  To use it, set a bridge profile's remb_behavior to "force" and
       set remb_estimated_bitrate to a rate in bits per second.  The
       remb_estimated_bitrate parameter is ignored if remb_behavior is something
       other than "force".
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 17.0.0 to Asterisk 18.0.0 ------------
    ------------------------------------------------------------------------------
    
    chan_pjsip
    ------------------
     * The PJSIP_SEND_SESSION_REFRESH dialplan function now issues a warning, and
       returns unsuccessful if it's used on a channel prior to answering.
    
    logger
    ------------------
     * Added a new log formatter called "plain" that always prints
       file, function and line number if available (even for verbose
       messages) and never prints color control characters.  Most
       suitable for file output but can be used for other channels
       as well.
    
       You use it in logger.conf like so:
       debug => [plain]debug
       console => [plain]error,warning,debug,notice,pjsip_history
       messages => [plain]warning,error,verbose
    
    
    ------------------------------------------------------------------------------
    --- New functionality introduced in Asterisk 18.0.0 --------------------------
    ------------------------------------------------------------------------------
    
    Core
    ------------------
     * The Streams API becomes the home for the core ACN capabilities.
       These include...
    
    
    Josh Soref's avatar
    Josh Soref committed
        * Parsing and formatting of codec negotiation preferences.
    
        * Resolving pending streams and topologies with those configured
          using configured preferences.
        * Utility functions for creating string representations of
          streams, topologies, and negotiation preferences.
    
       For codec negotiation preferences:
        * Added ast_stream_codec_prefs_parse() which takes a string
          representation of codec negotiation preferences, which
          may come from a pjsip endpoint for example, and populates
          a ast_stream_codec_negotiation_prefs structure.
        * Added ast_stream_codec_prefs_to_str() which does the reverse.
        * Added many functions to parse individual parameter name
    
    Josh Soref's avatar
    Josh Soref committed
          and value strings to their respective enum values, and the
    
          reverse.
    
       For streams:
        * Added ast_stream_create_resolved() which takes a "live" stream
          and resolves it with a configured stream and the negotiation
          preferences to create a new stream.
        * Added ast_stream_to_str() which create a string representation
          of a stream suitable for debug or display purposes.
    
       For topology:
        * Added ast_stream_topology_create_resolved() which takes a "live"
          topology and resolves it, stream by stream, with a configured
          topology stream and the negotiation preferences to create a new
          topology.
        * Added ast_stream_topology_to_str() which create a string
          representation of a topology suitable for debug or display
          purposes.
        * Renamed ast_format_caps_from_topology() to
          ast_stream_topology_get_formats() to be more consistent with
          the existing ast_stream_get_formats().
    
       Additional changes:
        * A new function ast_format_cap_append_names() appends the results
          to the ast_str buffer instead of replacing buffer contents.
    
    app_bridgeaddchan
    ------------------
     * The BridgeAdd application now behaves more like the Bridge application.
       The application now sets the BRIDGERESULT channel variable to indicate
       what happened when the channel resumes in dialplan.  This is instead of
       hanging up the channel on failure conditions.
    
    res_pjsip
    ------------------
     * Two new options, incoming_call_offer_pref and outgoing_call_offer_pref
       have been added to res_pjsip endpoints that specify the preferred order
       of codecs to use between those received/sent in an SDP offer and those
       set in the endpoint configuration.
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 17.0.0 to Asterisk 18.0.0 ------------
    ------------------------------------------------------------------------------
    
    AMI
    ------------------
     * You can now specify an optional 'Content-Type' as an argument for the Asterisk
       SendText manager action.
    
    ARI
    ------------------
     * A new parameter 'inhibitConnectedLineUpdates' is now available in the
       'bridges.addChannel' call. This prevents the identity of the newly connected
       channel from being presented to other bridge members.
    
    ARI Channels
    ------------------
     * The Channel resource has a new sub-resource "externalMedia".
       This allows an application to create a channel for the sole purpose
       of exchanging media with an external server.  Once created, this
       channel could be placed into a bridge with existing channels to
       allow the external server to inject audio into the bridge or
       receive audio from the bridge.
       See https://wiki.asterisk.org/wiki/display/AST/External+Media+and+ARI
       for more information.
    
    Core
    ------------------
     * H.265/HEVC is now a supported video codec and it can be used by
       specifying "h265" in the allow line.
       Please note however, that handling of the additional SDP parameters
       described in RFC 7798 section 7.2 is not yet supported.
    
    Features
    ------------------
     * Adds support for AudioSocket, a very simple bidirectional audio streaming
       protocol. There are both channel and application interfaces.
    
       A description of the protocol can be found on the referenced wiki page. A
       short talk about the reasons and implementation can be found on YouTube at
       the link provided.
    
       ARI support has also been added via the existing "externalMedia" ARI
       functionality. The UUID is specified using the arbitrary "data" field.
    
       Wiki: https://wiki.asterisk.org/wiki/display/AST/AudioSocket
       YouTube: https://www.youtube.com/watch?v=tjduXbZZEgI
    
    Messaging
    ------------------
     * In order to reduce the amount of AMI and ARI events generated,
       the global "Message/ast_msg_queue" channel can be set to suppress
       it's normal channel housekeeping events such as "Newexten",
       "VarSet", etc. This can greatly reduce load on the manager
       and ARI applications when the Digium Phone Module for Asterisk
       is in use.  To enable, set "hide_messaging_ami_events" in
       asterisk.conf to "yes"  In Asterisk versions <18, the default
       is "no" preserving existing behavior.  Beginning with
       Asterisk 18, the option will default to "yes".
    
    STIR/SHAKEN
    ------------------
     * STIR/SHAKEN support has been added to Asterisk. Configuration is done in
       stir_shaken.conf. There is a sample configuration file to help you get
       started (asterisk/configs/samples/stir_shaken.conf.sample). Once that's
       set up, you can enable STIR/SHAKEN on any endpoint by setting stir_shaken
       to yes on the endpoint configuration object. This will add an Identity
       header on outgoing INVITEs, and check for an Identity header on incoming
       INVITEs. This option has been added to Alembic as well.
    
       The information received on an incoming INVITE can be checked using the
       STIR_SHAKEN dialplan function. There are two variations:
    
       STIR_SHAKEN(count)
       STIR_SHAKEN(0, verify_result)
    
       The first variation will tell you how many STIR/SHAKEN results are on the
       channel. The second fetches information for a specific result. The first
       parameter is the index, followed by what information you want to retrieve.
       The available options are 'verify_result', 'identity', and 'attestation'.
    
    app_chanisavail
    ------------------
     * The ChanIsAvail application now tolerates empty positions in the supplied
       device list.  Dialplan can now be simplified by not having to check for
       empty positions in the device list.
    
    app_confbridge
    ------------------
     * A new bridge profile option, maximum_sample_rate, has been added which sets
       a maximum sample rate that the bridge will be mixed at. This allows the bridge
       to move below the maximum sample rate as needed but caps it at the maximum.
    
     * A new option, "text_messaging", has been added to the user profile
       which allows control over whether text messaging is enabled or
       disabled for a user. If enabled (the default) text messages
       will be sent to the user. If disabled no text messages will be
       sent to the user.
    
    app_dial
    ------------------
     * The Dial application now tolerates empty positions in the supplied
       destination list.  Dialplan can now be simplified by not having to check
       for empty positions in the destination list.  If there are no endpoints to
       dial then DIALSTATUS is set to CHANUNAVAIL.
    
    app_mixmonitor
    ------------------
     * An option 'S' has been added to MixMonitor. If used in combination with
       the r() and/or t() options, if a frame is available to write to one of
       those files but not the other, a frame of silence if written to the file
       that does not have an audio frame. This should prevent the two files
       from "drifting" when mixed after the fact.
    
     * If the 'filename' argument to MixMonitor() ended with '.wav49,'
       Asterisk would silently convert the extension to '.WAV' when opening
       the file for writing. This caused the MIXMONITOR_FILENAME variable to
       reference the wrong file. The MIXMONITOR_FILENAME variable will now
       reflect the name of the file that Asterisk actually used instead of
       the filename that was passed to the application.
    
    app_page
    ------------------
     * The Page application now tolerates empty positions in the supplied
       destination list.  Dialplan can now be simplified by not having to check
       for empty positions in the destination list.
    
    app_voicemail
    ------------------
     * A feature was added in Asterisk 13.27.0 and 16.4.0 that removed lock files from
       the Asterisk voicemail directory on startup. Some users that store their
       voicemails on network storage devices experienced slow startup times due to the
       relative expense of traversing the voicemail directory structure looking for
       orphaned lock files. This feature has now been removed.
    
       Users who require the lock files to be removed at startup should modify their
       startup scripts to do so before starting the asterisk process.
    
    chan_pjsip
    ------------------
    
    Josh Soref's avatar
    Josh Soref committed
     * A new dialplan function, PJSIP_MOH_PASSTHROUGH, has been added to chan_pjsip. This
    
       allows the behaviour of the moh_passthrough endpoint option to be read or changed
       in the dialplan. This allows control on a per-call basis.
    
    chan_rtp
    ------------------
     * The UnicastRTP channel driver provided by chan_rtp now accepts
       "<hostname>:<port>" as an alternative to "<ip_address>:<port>" in the destination.
       The first AAAA (preferred) or A record resolved will be used as the destination.
       The lookup is synchronous so beware of possible dialplan delays if you specify a
       hostname.
    
    func_curl
    ------------------
     * A new parameter, httpheader, has been added to CURLOPT function. This parameter
       allows to set custom http headers for subsequent calls off CURL function.
       Any setting of headers will replace the default curl headers
       (e.g. "Content-type: application/x-www-form-urlencoded")
    
     * A new option, followlocation, can now be enabled with the CURLOPT()
       dialplan function. Setting this will instruct cURL to follow 3xx
       redirects, which it does not by default.
    
    func_jitterbuffer
    ------------------
     * The JITTERBUFFER dialplan function now has an option to enable video synchronization
       support. When enabled and used with a compatible channel driver (chan_sip, chan_pjsip)
       the video is buffered according to the size of the audio jitterbuffer and is
       synchronized to the audio.
    
    func_volume
    ------------------
     * Accept decimal number as argument.
    
    http
    ------------------
     * You can now disable the /httpstatus page served by Asterisk's built-in
       HTTP server by setting 'enable_status' to 'no' in http.conf.
    
    minmemfree
    ------------------
     * The 'minmemfree' configuration option now counts memory allocated to
       the filesystem cache as "free" because it is memory that is available
       to the process.
    
    res_ari_channels
    ------------------
     * When creating a channel in ARI using the create call
       you can now specify dialplan variables to be set as part
       of the same operation.
    
    res_musiconhold
    ------------------
     * This fix allows a realtime moh class to be unregistered from the command
       line. This is useful when the contents of a directory referenced by a
       realtime moh class have changed.
       The realtime moh class is then reloaded on the next request and uses the
       new directory contents.
    
     * A new mode - playlist - has been added to res_musiconhold. This mode allows the
       user to specify the files (or URLs) to play explicitly by putting them directly
       in musiconhold.conf.
    
    res_pjsip
    ------------------
     * Added a new PJSIP system setting called disable_rport.
       Default is no to keep support working as before.
    
       If it is false (default) it adds the 'rport' parameter in the outgoing request message.
       If it is true it does not add the 'rport' parameter in the outgoing request message.
    
       This is a system option, but working as a global option.
    
    res_pjsip_endpoint_identifier_ip
    ------------------
     * In 'type = identify' sections, the addresses specified for the 'match'
       clause can now include a port number. For IP addresses, the port is
       provided by including a colon after the address, followed by the
       desired port number. If supplied, the netmask should follow the port
       number. To specify a port for IPv6 addresses, the address itself must
       be enclosed in brackets to be parsed correctly.
    
    res_pjsip_logger
    ------------------
     * The PJSIP packet logger now has the following CLI commands:
    
       pjsip set logger pcap <filename>
    
       When used this will create a pcap file containing the incoming
       and outgoing SIP packets, in unencrypted form.
    
       pjsip set logger console <on / off>
    
       This allows you to toggle logging to console on and off.
    
       pjsip set logger host <IP/subnet mask> add
    
       This allows you to add an additional IP address or subnet
       mask to logging, allowing you to log multiple instead of
       just a single IP address or all traffic.
    
       The normal "pjsip set logger host" CLI command has also been
       expanded to allow subnet masks as well.
    
    res_pjsip_session
    ------------------
     * When placing an outgoing call to a PJSIP endpoint the intent
       of any requested formats will now be respected. If only an audio
       format is requested (such as ulaw) but the underlying endpoint
       does not support the format the resulting SDP will still only
       contain an audio stream, and not any additional streams such as
       video.
    
     * Two new options, incoming_call_offer_pref and outgoing_call_offer_pref
       have been added to res_pjsip endpoints that specify the preferred order
       of codecs to use between those received/sent in an SDP offer and those
       set in the endpoint configuration.
    
    res_rtp_asterisk
    ------------------
     * This change include a new cli command 'rtp show settings'
    
       The command display by general settings of rtp configuration. For this
       point is added the fields: rtpstart, rtpend, dtmftimeout, rtpchecksum,
       strictrtp, learning_min_sequential and icesupport.
    
     * The blacklist mechanism in res_rtp_asterisk for ICE and STUN was converted to
       an ACL mechanism.
    
       As such six now options are now available:
    
       ice_deny
       ice_permit
       ice_acl
       stun_deny
       stun_permit
       stun_acl
    
       These options have their obvious meanings as used elsewhere.
    
       Backwards compatibility was maintained by adding {stun,ice}_blacklist as
       aliases for {stun,ice}_deny.
    
    res_sorcery_memory_cache
    ------------------
     * The SorceryMemoryCacheExpireObject AMI action and CLI
       command allow expiring of a specific object within the
       sorcery memory cache. This is done by removing the
       object from the cache with the expectation that the
       cache will then re-populate the object when it is next
       needed.
    
       For full backend caching this does not occur. The cache
       won't repopulate until an entire refresh is done resulting
       in the possibility that objects are missing until that
       time.
    
       The AMI action and CLI command will now not allow
       expiring of an object if the cache is configured as a
       full backend cache. Instead you must use either the
       SorceryMemoryCacheExpire or SorceryMemoryCachePopulate
       AMI actions or their associated CLI commands.
    
    taskprocessor.c
    ------------------
     * Added two new CLI commands to reset stats for taskprocessors. You can
       reset stats for a single, specific taskprocessor ('core reset
       taskprocessor <taskprocessor>'), or you can reset all taskprocessors
       ('core reset taskprocessors'). These commands will reset the counter for
       the number of tasks processed as well as the max queue size.
    
     * Added "like" support for 'core show taskprocessors'. Now you
       can specify a specific set of taskprocessors (or just one) by
       adding the keyword "like" to the above command, followed by
       your search criteria.
    
    
    ------------------------------------------------------------------------------
    --- New functionality introduced in Asterisk 17.0.0 --------------------------
    ------------------------------------------------------------------------------
    
    Bridging
    ------------------
     * The bridging core no longer uses the stasis cache for bridge
       snapshots.  The latest bridge snapshot is now stored on the
       ast_bridge structure itself.
    
       The following APIs are no longer available since the stasis cache
       is no longer used:
         ast_bridge_topic_cached()
         ast_bridge_topic_all_cached()
    
       A topic pool is now used for individual bridge topics.
    
       The ast_bridge_cache() function was removed since there's no
       longer a separate container of snapshots.
    
       A new function "ast_bridges()" was created to retrieve the
       container of all bridges.  Users formerly calling
       ast_bridge_cache() can use the new function to iterate over
       bridges and retrieve the latest snapshot directly from the
       bridge.
    
       The ast_bridge_snapshot_get_latest() function was renamed to
       ast_bridge_get_snapshot_by_uniqueid().
    
       A new function "ast_bridge_get_snapshot()" was created to retrieve
       the bridge snapshot directly from the bridge structure.
    
       The ast_bridge_topic_all() function now returns a normal topic
       not a cached one so you can't use stasis cache functions on it
       either.
    
       The ast_bridge_snapshot_type() stasis message now has the
       ast_bridge_snapshot_update structure as it's data.  It contains
       the last snapshot and the new one.
    
    Channels
    ------------------
     * The core no longer uses the stasis cache for channels snapshots.
       The following APIs are no longer available:
           ast_channel_topic_cached()
           ast_channel_topic_all_cached()
       The ast_channel_cache_all() and ast_channel_cache_by_name() functions
       now returns an ao2_container of ast_channel_snapshots rather than a
       container of stasis_messages therefore you can't call stasis_cache
       functions on it.
       The ast_channel_topic_all() function now returns a normal topic,
       not a cached one so you can't use stasis cache functions on it either.
       The ast_channel_snapshot_type() stasis message now has the
       ast_channel_snapshot_update structure as it's data.
       ast_channel_snapshot_get_latest() still returns the latest snapshot.