Skip to content
Snippets Groups Projects
CHANGES 339 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.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...
    
        * Parsing and formatting of codec negotation 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
          and value strings to their respectrive 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
    ------------------
     * A new dialplan function, PJSIP_MOH_PASSTRHOUGH, 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.
    
    chan_sip
    ------------------
     * The chan_sip module is now deprecated, users should migrate to the
       replacement module chan_pjsip.  See guides at the Asterisk Wiki:
         https://wiki.asterisk.org/wiki/x/tAHOAQ
         https://wiki.asterisk.org/wiki/x/hYCLAQ
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 16.0.0 to Asterisk 17.0.0 ------------
    ------------------------------------------------------------------------------
    
    AttendedTransfer
    ------------------
     * A new application, this will queue up attended transfer to the given extension.
    
    BlindTransfer
    ------------------
     * A new application, this will redirect all channels currently
       bridged to the caller channel to the specified destination.
    
    ConfBridge
    ------------------
     * Add "average_all", "highest_all", and "lowest_all" values for
       the remb_behavior option. These values operate on a bridge
       level instead of a per-source level. This means that a single
       REMB value is calculated and sent to every sender, instead of
       a REMB value that is unique for the specific sender..
    
    Dial
    ------------------
     * Add RINGTIME and RINGTIME_MS variables containing respectively seconds and
       milliseconds between creation of the dialing channel and receiving the first
       RINGING signal
    
       Add PROGRESSTIME and PROGRESSTIME_MS variables analogous to the above with respect to
       the PROGRESS signal. Shorter of these two times should be equivalent to
       the PDD (Post Dial Delay) value
    
       Add DIALEDTIME_MS and ANSWEREDTIME_MS variables to get millisecond resolution
       versions of DIALEDTIME and ANSWEREDTIME
    
    RTP/ICE
    ------------------
     * You can now indicate that you'd like an ice_host_candidate's local address
       to be published as well as the mapped address.  See the sample rtp.conf
       for more information.
    
    ReadExten
    ------------------
     * Add 'p' option to stop reading extension if user presses '#' key.
    
    pbx_dundi
    ------------------
     * The DUNDi PBX module now supports IPv4/IPv6 dual binding.
    
    res_pjsip
    ------------------
     * Added a new PJSIP global setting called norefersub.
       Default is true to keep support working as before.
    
       res_pjsip_refer configures PJSIP norefersub capability accordingly.
    
       Checks the PJSIP global setting value.
       If it is true (default) it adds the norefersub capability to PJSIP.
       If it is false (disabled) it does not add the norefersub capability
       to PJSIP.
    
       This is useful for Cisco switches that do not follow RFC4488.
    
    res_rtp_asterisk
    ------------------
     * DTLS packets will now be fragmented according to the MTU as set in rtp.conf. This
       allows larger certificates to be used for the DTLS negotiation. By default this value
       is 1200.
    
    
    Kevin Harwell's avatar
    Kevin Harwell committed
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 16.2.0 to Asterisk 16.3.0 ----------
    ------------------------------------------------------------------------------
    
    ARI
    ------------------
     * Application event filtering is now supported. An application can now specify
       an "allowed" and/or "disallowed" list(s) of event types. Only those types
       indicated in the "allowed" list are sent to the application. Conversely, any
       types defined in the "disallowed" list are not sent to the application. Note
       that if a type is specified in both lists "disallowed" takes precedence.
    
    
     * A new REST API call has been added: 'move'. It follows the format
       'channels/{channelId}/move' and can be used to move channels from one application
       to another without needing to exit back into the dialplan. An application must be
       specified, but the passing a list of arguments to the new application is optional.
       An example call would look like this:
    
       client.channels.move(channelId=chan.id, app='ari-example', appArgs='a,b,c')
    
       If the channel was inside of a bridge when switching applications, it will
       remain there. If the application specified cannot be moved to, then the channel
       will remain in the current application and an event will be triggered named
       "ApplicationMoveFailed", which will provide the destination application's name
       and the channel information.
    
    
    res_pjsip
    ------------------
     * A new configuration parameter "taskprocessor_overload_trigger" has been
       added to the pjsip.conf "globals" section.  The distributor currently stops
       accepting new requests when any taskprocessor overload is triggered.  The
       new option allows you to completely disable overload detection (NOT
       RECOMMENDED), keep the current behavior, or trigger only on pjsip
       taskprocessor overloads.
    
    
    chan_pjsip
    ------------------
     * A new configuration parameter 'ignore_183_without_sdp' has been added
       to the pjsip.conf "endpoints" section.  If enabled, will make chan_pjsip
       discard 183s that do not contain an SDP body, which can resolve no
       ringback tone issues as well as making the behavior match chan_sip.
    
    
    MWI
    ------------------
     * A new module "res_mwi_devstate" has been added that allows subscriptions
       to voicemail boxes using "presence" events.  This allows common BLF keys
       to act as voicemail waiting indicators.
    
    
    app_queue
    ------------------
     * Added the ability to set the wrapuptime per-member using the AddQueueMember
       application.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 16.1.0 to Asterisk 16.2.0 ------------
    ------------------------------------------------------------------------------
    
    
    ARI
    ------------------
     * Whenever an ARI application is started, a context will be created for it
       automatically as long as one does not already exist, following the format
       'stasis-<app_name>'. Two extensions are also added to this context: a match-all
       extension, and the 'h' extension. Any phone that registers under this context
       will place all calls to the corresponding Stasis application.
    
    
    res_pjsip
    ------------------
     * Added "send_contact_status_on_update_registration" global configuration option
       to enable sending AMI ContactStatus event when a device refreshes its registration.
    
    
    Core
    ------------------
     * Reworked the media indexer so it doesn't cache the index.  Testing revealed
       that the cache added no benefit but that it could consume excessive memory.
       Two new index related functions were created: ast_sounds_get_index_for_file()
       and ast_media_index_update_for_file() which restrict index updating to
       specific sound files.  The original ast_sounds_get_index() and
       ast_media_index_update() calls are still available but since they no longer
       cache the results internally, developers should re-use an index they may
       already have instead of calling ast_sounds_get_index() repeatedly.  If
       information for only a single file is needed, ast_sounds_get_index_for_file()
       should be called instead of ast_sounds_get_index().
    
    
    Features
    ------------------
     * Before Asterisk 12, when using the automon or automixmon features defined
       in features.conf, a channel variable (TOUCH_MIXMONITOR_OUTPUT) was set on
       both channels, indicating the filename of the recording.
    
       When bridging was overhauled in Asterisk 12, the behavior was changed such
       that the variable was only set on the peer channel and not on the channel
       that initiated the automon or automixmon.
    
       The previous behavior has been restored so both channels receive the
       channel variable when one of these features is invoked.
    
    
    app_voicemail
    ------------------
     * You can now specify a special context with the "aliasescontext" parameter
       in voicemail.conf which will allow you to create aliases for physical
       mailboxes.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 16.0.0 to Asterisk 16.1.0 ------------
    ------------------------------------------------------------------------------
    
    
    pbx_config
    ------------------
     * pbx_config will now find and process multiple 'globals' sections from
       extensions.conf.  Variables are processed in the order they are found
       and duplicate variables overwrite the previous value.
    
    
    chan_pjsip
    ------------------
     * New dialplan function PJSIP_PARSE_URI added to parse an URI and return
       a specified part of the URI.
    
    
    Core
    ------------------
     * ast_bt_get_symbols() now returns a vector of strings instead of an
       array of strings.  This must be freed with ast_bt_free_symbols.
    
    
    res_pjsip
    ------------------
     * New options 'trust_connected_line' and 'send_connected_line' have been
       added to the endpoint. The option 'trust_connected_line' is to control
       if connected line updates are accepted from this endpoint.
       The option 'send_connected_line' is to control if connected line updates
       can be sent to this endpoint.
       The default value is 'yes' for both options.
    
    
    res_rtp_asterisk
    ------------------
     * The existing strictrtp option in rtp.conf has a new choice availabe, called
       'seqno', which behaves the same way as setting strictrtp to 'yes', but will
       ignore the time interval during learning so that bursts of packets can still
       trigger learning our source.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 15 to Asterisk 16 --------------------
    ------------------------------------------------------------------------------
    
    
    app_fax
    ------------------
     * The app_fax module is now deprecated, users should migrate to the
       replacement module res_fax.
    
    
    app_originate
    ------------------
     * An 'a' option has been added to the Originate dialplan application which
       will execute the originate in an asynchronous fashion. If set then the
       application will return immediately without waiting for the originated
       channel to answer.
    
    
    Build System
    ------------------
     * MALLOC_DEBUG no longer has an effect on Asterisk's ABI.  Asterisk built
       with MALLOC_DEBUG can now successfully load binary modules built without
       MALLOC_DEBUG and vice versa.  Third-party pre-compiled modules no longer
       need to have a special build with it enabled.
    
    
     * Asterisk now depends on libjansson >= 2.11.  If this version is not
       available on your distro you can use `./configure --with-jansson-bundled`.
    
    
    Corey Farrell's avatar
    Corey Farrell committed
    app_macro
    ------------------
     * The app_macro module is now deprecated and by default it is no longer
       built.  Users should migrate to app_stack (Gosub).  A warning is logged
       the first time any Macro is used.
    
    
    app_setcallerid
    ------------------
     * The app_setcallerid module has been removed. The CALLERID dialplan function
       should be used instead.
    
    
    chan_sip
    ------------------
     * New function SIP_HEADERS() enumerates all headers in the incoming INVITE.
    
    
     * The variable GET_TRANSFERRER_DATA set in the peer channel causes matching
       headers be retrieved from the REFER message and made accessible to the
       dialplan in the hash TRANSFER_DATA.
    
    
    chan_dahdi
    ------------------
     * Timeouts for reading digits from analog phones are now configurable in
       chan_dahdi.conf: firstdigit_timeout, interdigit_timeout, matchdigit_timeout.
    
    
    AMI
    ------------------
     * The ContactStatus and Status fields for the manager events ContactStatus
       and ContactStatusDetail are now set to "NonQualified" when a contact exists
       but has not been qualified.
    
    
     * The "Newexten" event is now part of the "dialplan" class. The documentation
       for Asterisk 15 already specified this, but the implementation was actually
       using the "call" class instead.
    
    
    ARI
    ------------------
     * The ContactInfo event's contact_status field is now set to "NonQualified"
       when a contact exists but has not been qualified.
    
    
    app_queue
    ------------------
     * Added the ability to set the wrapuptime in the configuration of member.
       When set the wrapuptime on the member is used instead of the wrapuptime
       defined for the queue itself.
    
    
     * Added predial handler support for caller and callee channels with the
       B and b options respectively.  This is similar to the predial support
       in app_dial.
    
    
    res_config_sqlite
    ------------------
     * The res_config_sqlite module is now deprecated, users should migrate to the
       replacement module res_config_sqlite3.
    
    res_monitor
    ------------------
     * The res_monitor module is now deprecated, users should migrate to the
       replacement module app_mixmonitor.
    
    
    res_pjsip
    ------------------
     * A new AMI action, PJSIPShowAors, has been added which displays information
       about all configured PJSIP AORs.
    
    
     * A new AMI action, PJSIPShowAuths, has been added which displays information
       about all configured PJSIP Auths.
    
    
     * A new AMI action, PJSIPShowContacts, has been added which displays information
       about all configured PJSIP Contacts.
    
    
    res_pjsip_registrar_expire
    ------------------
     * The res_pjsip_registrar_expire module has been removed.  The functionality has
       been moved into res_pjsip_registrar.
    
    
    func_audiohookinherit
    ------------------
     * The func_audiohookinherit module has been removed. Due to architectural changes
       in Asterisk 12, audiohook inheritance is performed automatically and this
       function now lacks function.
    
    
    cdr_syslog
    ------------------
     * The cdr_syslog module is now deprecated and by default it is no longer
       built.
    
    
    cdr_sqlite
    ------------------
     * The cdr_sqlite module has been removed. Users should move to using the
       cdr_sqlite3_custom module instead.
    
    format_jpeg
    ------------------
     * The format_jpeg module has been removed.
    
    
    pbx_dundi
    ------------------
     * DUNDi now supports IPv6
    
    
    ------------------
    
     * libedit is no longer available as an embedded library and must be provided
       by the system.
    
     * The STATIC_BUILD functionality has been removed as it has not been maintained
       and has not worked in quite some time.
    
     * The module loader now enforces inter-module dependencies.  This ensures that
       a module is not started before another it depends on, even if preload is used.
       If a dependency is not available or fails to startup this will block any
       dependants from startup.
     * Parts of the Asterisk core which can load configuration from realtime are now
       built-in modules.  It is no longer necessary to preload realtime drivers as
       they are always initialized before the built-in modules.
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 15.5.0 to Asterisk 15.6.0 ------------
    ------------------------------------------------------------------------------
    
    res_pjsip
    ------------------
     * A new option 'suppress_q850_reason_headers' has been added to the endpoint
       object. Some devices can't accept multiple Reason headers and get confused
       when both 'SIP' and 'Q.850' Reason headers are received.  This option allows
       the 'Q.850' Reason header to be suppressed.  The default value is 'no'.
    
    
    res_pjsip_endpoint_identifier_ip
    ------------------
     * Added regex support to the identify section match_header option.  You
       specify a regex instead of an explicit string by surrounding the header
       value with slashes:
       match_header = SIPHeader: /regex/
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 15.4.0 to Asterisk 15.5.0 ------------
    ------------------------------------------------------------------------------
    
    Core
    ------------------
     * Core bridging and, more specifically, bridge_softmix have been enhanced to
       relay received frames of type TEXT or TEXT_DATA to all participants in a
       softmix bridge.  res_pjsip_messaging and chan_pjsip have been enhanced to
       take advantage of this so when res_pjsip_messaging receives an in-dialog
       MESSAGE message from a user in a conference call, it's relayed to all
       other participants in the call.
    
    
     * Support Enhanced Messaging.  SendText now accepts new channel variables
       that can be used to override the To and From display names and set the
       Content-Type of a message.  Since you can now set Content-Type, other
       text/* content types are now valid.
    
     * ConfbridgeList now shows talking status. This utilizes the same voice
       detection as the ConfbridgeTalking event, so bridges must be configured
       with "talk_detection_events=yes" for this flag to have meaning.
    
     * ConfBridge can now send events to participants via in-dialog MESSAGEs.
       All current Confbridge events are supported, such as ConfbridgeJoin,
       ConfbridgeLeave, etc.  In addition to those events, a new event
       ConfbridgeWelcome has been added that will send a list of all
       current participants to a new participant.
    
    res_pjsip
    ------------------
      * Two new options have been added to the system and endpoint objects to
        control whether, on outbound calls, Asterisk will accept updated SDP answers
        during the initial INVITE transaction when 100rel is not in effect.
        This usually happens when the INVITE is forked to multiple UASs and more
        than one sends an SDP answer or when a single UAS needs to change a media
        port to switch from custom ringback to the actual media destination.
    
        The 'follow_early_media_forked' option sets whether Asterisk will accept
        the updated SDP when the To tag on the subsequent response is different than
        that on the the previous response.  This usually occurs in the forked INVITE
        scenario. The default value is "yes" which is the current behavior.
    
        The 'accept_multiple_sdp_answers' flag sets whether Asterisk will accept the
        updated SDP when the To tag on the subsequent response is the same as that
        on the previous response. This can occur when a UAS needs to switch media
        ports from custom ringback to the final media path.  The default value is
        "no" which is the current behavior.
    
        These options have to be enabled system-wide in the system config section
        of pjsip.conf as well as on individual endpoints that require the
        functionality.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 15.3.0 to Asterisk 15.4.0 ------------
    ------------------------------------------------------------------------------
    
    
    Core
    ------------------
     * A new configuration option "genericplc_on_equal_codecs" was added to the
       "plc" section of codecs.conf to allow generic packet loss concealment even
       if no transcoding was originally needed.  Transcoding via SLIN is forced
       in this case.
    
    
    res_pjproject
    ------------------
     * Added the "cache_pools" option to pjproject.conf.  Disabling the option
       helps track down pool content mismanagement when using valgrind or
       MALLOC_DEBUG.  The cache gets in the way of determining if the pool contents
       are used after free and who freed it.
    
    
    res_pjsip_notify
    ------------------
     * Extend the PJSIPNotify AMI command to send an in-dialog notify on a
       channel.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 15.2.0 to Asterisk 15.3.0 ------------
    ------------------------------------------------------------------------------
    
    
    Core
    ------------------
     * During dialplan reload log messages are produced for each context,
       extension and include.  These messages are no longer printed by the
       verbose loggers, they are now only logged as debug messages.
    
    
    app_confbridge
    ------------------
     * Added the Muted header to the ConfbridgeJoin AMI event to indicate the
       participant's starting mute status.
    
    
     * Made the AMI ConfbridgeList action's ConfbridgeList events output all
       the standard channel snapshot headers instead of a few hand-coded channel
       snapshot headers.  The benefit is that the CallerIDName gets disruptive
       characters like CR, LF, Tab, and a few others escaped.  However, an empty
       CallerIDName is now output as "<unknown>" instead of "<no name>".
    
    
    app_followme
    ------------------
     * Added a new prompt, connecting-prompt, which will be played
       (if configured) to the "winner" callee before connecting the call.
    
    
    res_pjsip
    ------------------
     * Users who are matching endpoints by SIP header need to reevaluate their
       global "endpoint_identifier_order" option in light of the "ip" endpoint
       identifier method split into the "ip" and "header" endpoint identifier
       methods.