Skip to content
Snippets Groups Projects
CHANGES 336 KiB
Newer Older
==============================================================================
=== 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.
===
==============================================================================
------------------------------------------------------------------------------
--- 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 --------------------
------------------------------------------------------------------------------

Corey Farrell's avatar
Corey Farrell committed
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.

Corey Farrell's avatar
Corey Farrell committed
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.

app_sendtext
------------------
 * 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.

 * The pjsip_transport_event feature introduced in 15.1.0 has been refactored.
   Any external modules that may have used that feature (highly unlikey) will
   need to be changed as the API has been altered slightly.

res_pjsip_endpoint_identifier_ip
------------------
 * The endpoint identifier "ip" method previously recognized endpoints either
   by IP address or a matching SIP header.  The "ip" endpoint identifier method
   is now split into the "ip" and "header" endpoint identifier methods.  The
   "ip" endpoint identifier method only matches by IP address and the "header"
   endpoint identifier method only matches by SIP header.  The split allows the
   user to control the relative priority of the IP address and the SIP header
   identification methods in the global "endpoint_identifier_order" option.
   e.g., If you have two type=identify sections where one matches by IP address
   for endpoint alice and the other matches by SIP header for endpoint bob then
   you can now predict which endpoint is matched when a request comes in that
   matches both.

res_pjsip_pubsub
------------------
 * In an earlier release, inbound registrations on a reliable transport
   were pruned on Asterisk restart since the TCP connection would have
   been torn down and become unusable when Asterisk stopped.  This same
   process is now also applied to inbound subscriptions.  Since this
   required the addition of a new column to the ps_subscription_persistence
   realtime table, users who store their subscriptions in a database will
   need to run the "alembic upgrade head" process to add the column to
   the schema.

res_pjsip_transport_management
------------------
 * Since res_pjsip_transport_management provides several attack
   mitigation features, its functionality moved to res_pjsip and
   this module has been removed.  This way the features will always
   be available if res_pjsip is loaded.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 15.1.0 to Asterisk 15.2.0 ------------
------------------------------------------------------------------------------

Core
------------------
 * Added the "cache_media_frames" option to asterisk.conf.  Disabling the option
   helps track down media frame mismanagement when using valgrind or
   MALLOC_DEBUG.  The cache gets in the way of determining if the frame is
   used after free and who freed it.  NOTE: This option has no effect when
   Asterisk is compiled with the LOW_MEMORY compile time option enabled because
   the cache code does not exist.

chan_sip
------------------
 * Calls to invalid extensions are now reported as an ACL failure security event
   "no_extension_match".

res_rtp_asterisk
------------------
 * The X.509 certificate used for DTLS negotation can now be automatically
   generated. This is supported by res_pjsip by specifying
   "dtls_auto_generate_cert = yes" on a PJSIP endpoint. For chan_sip, you
   would set "dtlsautogeneratecert = yes" either in the [general] section of
   sip.conf or on a specific peer.

res_pjsip
------------------
 * The "identify_by" on endpoints can now be set to "ip" to restrict an endpoint
   being matched based only on IP address. To ensure no behavior change the
   default has been changed to "username,ip".

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 15.0.0 to Asterisk 15.1.0 ------------
------------------------------------------------------------------------------

res_pjsip
------------------
 * The "remove_existing" option now allows a registration to succeed by
   displacing any existing contacts that now exceed the "max_contacts" count.
   Any removed contacts are the next to expire.  The behaviour change is
   beneficial when "rewrite_contact" is enabled and "max_contacts" is greater
   than one.  The removed contact is likely the old contact created by
   "rewrite_contact" that the device is refreshing.

AMI
------------------
 * Added a new CancelAtxfer action that cancels an attended transfer.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14 to Asterisk 15 --------------------
------------------------------------------------------------------------------

app_queue
------------------
 * PAUSEALL/UNPAUSEALL now sets the pause reason in the queue_log if it has
   been defined.

 * A new option, "announce-position-only-up," has been added that, when set to
   yes, causes position announcements to only be played when the caller's
   queue position has improved since the last time that we annouced their
   position. This default is no.

Build System
------------------
 * '--with-pjproject-bundled' is now the default when running ./configure
   It can be disabled with '--without-pjproject-bundled'.

 * A '--with-download-cache' option is now available which is equivalent to
   setting '--with-sounds-cache' and '--with-externals-cache' to the same
   value.  The download cache can also be set via the AST_DOWNLOAD_CACHE
   environment variable.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.6.0 to Asterisk 14.7.0 ------------
------------------------------------------------------------------------------

res_pjsip
------------------
 * The "external_media_address" on transports is now resolved using dnsmgr and
   when dnsmgr refreshes are enabled will be automatically updated with the new
   IP address of a given hostname.

 * A new endpoint parameter "incoming_mwi_mailbox" allows Asterisk to receive
   unsolicited MWI NOTIFY requests and make them available to other modules via
   the stasis message bus.

res_musiconhold
------------------
 * By default, when res_musiconhold reloads or unloads, it sends a HUP signal
   to custom applications (and all descendants), waits 100ms, then sends a
   TERM signal, waits 100ms, then finally sends a KILL signal.  An application
   which is interacting with an external device and/or spawns children of its
   own may not be able to exit cleanly in the default times, expecially if sent
   a KILL signal, or if it's children are getting signals directly from
   res_musiconhoild.  To allow extra time, the 'kill_escalation_delay'
   class option can be used to set the number of milliseconds res_musiconhold
   waits before escalating kill signals, with the default being the current
   100ms.  To control to whom the signals are sent, the "kill_method"
   class option can be set to "process_group" (the default, existing behavior),
   which sends signals to the application and its descendants directly, or
   "process" which sends signals only to the application itself.

 * New dialplan function PJSIP_DTMF_MODE added to get or change the DTMF mode
   of a channel on a per-call basis.

res_xmpp
-----------------
 * OAuth 2.0 authentication is now supported when contacting Google. Follow the
   instructions in xmpp.conf.sample to retrieve and configure the necessary
   tokens.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.5.0 to Asterisk 14.6.0 ------------
------------------------------------------------------------------------------

app_voicemail
------------------
 * A new global option "imap_poll_logout" was added to specify whether need to
   disconnect from the IMAP server after polling of mailboxes.
   Default: no

res_pjsip
------------------
 * A new endpoint option "refer_blind_progress" was added to turn off notifying
   the progress details on Blind Transfer. If this option is not set then
   the chan_pjsip will send NOTIFY "200 OK" immediately after "202 Accepted".
   On default is enabled.
   Some SIP phones like Mitel/Aastra or Snom keep the line busy until
   receive "200 OK".

 * A new endpoint option "notify_early_inuse_ringing" was added to control
   whether to notify dialog-info state 'early' or 'confirmed' on Ringing
   when already INUSE.

 * The endpoint option 'dtmf_mode' has a new option 'auto_dtmf' added. This
   mode works similar to 'auto' except uses DTMF INFO as fallback instead of
   INBAND.

res_agi
------------------
 * The EAGI() application will now look for a dialplan variable named
   EAGI_AUDIO_FORMAT and use that format with the 'enhanced' audio pipe that
   EAGI provides. If not specified, it will continue to use the default signed
   linear (slin).

chan_pjsip
------------------
 * When dialing an endpoint directly or using the PJSIP_DIAL_CONTACTS dialplan
   function any contact which is considered unreachable due to qualify being
   enabled will no longer be called.

 * The asymmetric_rtp_codec option now also controls whether chan_pjsip will
   send media as-is without transcoding if the codec has been negotiated in the
   SDP. If set to "no" then Asterisk will only ever send the preferred codec
   from the SDP, unless the remote side sends a different codec and we will
   switch to match.

Build System
------------------
 * Added a new PJPROJECT_CONFIGURE_OPTS environment variable which can be used
   to pass arbitrary options to the bundled pjproject configure.

 * Automatically set the bundled pjproject configure --host and --build
   options to match those supplied for the asterisk configure.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.4.0 to Asterisk 14.5.0 ------------
------------------------------------------------------------------------------

res_rtp_asterisk
------------------
 * Added the stun_blacklist option to rtp.conf.  Some multihomed servers have
   IP interfaces that cannot reach the STUN server specified by stunaddr.
   Blacklist those interface subnets from trying to send a STUN packet to find
   the external IP address.  Attempting to send the STUN packet needlessly
   delays processing incoming and outgoing SIP INVITEs because we will wait
   for a response that can never come until we give up on the response.
   Multiple subnets may be listed.

Logging
-------------------
 * Added logger_queue_limit to the configuration options.
   All log messages go to a queue serviced by a single thread
   which does all the IO.  This setting controls how big that
   queue can get (and therefore how much memory is allocated)
   before new messages are discarded.
   The default is 1000.

res_pjsip_config_wizard
------------------
 * Two new parameters have been added to the pjsip config wizard.
   Setting 'sends_line_with_registrations' to true will cause the wizard
   to skip the creation of an identify object to match incoming requests
   to the endpoint and instead add the line and endpoint parameters to
   the outbound registration object.
   Setting 'outbound_proxy' is a shortcut for adding individual
   endpoint/outbound_proxy, aor/outbound_proxy and registration/outbound_proxy
   parameters.

res_hep_rtcp
------------------
 * If the 'call-id' value is specified for the uuid_type option and a
   chan_sip channel is used the resulting HEP traffic will now contain the
   SIP Call-ID instead of the Asterisk channel name.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.3.0 to Asterisk 14.4.0 ------------
------------------------------------------------------------------------------

Build System
------------------
 * LOW_MEMORY no longer has an effect on Asterisk ABI.  Symbols that were
   previously suppressed by LOW_MEMORY are now replaced by stub functions.
   Asterisk built with LOW_MEMORY can now successfully load binary modules
   built without LOW_MEMORY and vice versa.

 * RADIUS backends for CEL and CDR can now also be built using the radcli
   client library, in addition to the existing support for building them
   using either freeradius or radiusclient-ng.

Core
------------------
 * ASTERISK_REGISTER_FILE was no longer useful and has been removed.  Sources
   which use mtx_prof must now manually declare and initialize the variable.

chan_sip
------------------
 * If an offer is received with optional SRTP (a media stream with RTP/AVP but
   which contains a crypto line) chan_sip will now accept it and enable SRTP.
   If you would like to do optional SRTP on outbound you will need to create
   a dialplan that dials with it enabled initially and if it fails fall back to
   without.
res_pjsip
------------------
 * Added endpoint configuration parameter "preferred_codec_only".
   This allow asterisk response to a SIP invite with the single most
   preferred codec rather than advertising all joint codec capabilities.
   This limits the other side's codec choice to exactly what we prefer.

cdr_radius
------------------
 * To fix a memory leak the syslog channel is now empty if it has not been set
   and used by a syslog channel in the logger.

cel_radius
------------------
 * To fix a memory leak the syslog channel is now empty if it has not been set
   and used by a syslog channel in the logger.

RTP
------------------
 * New setting "rtp_pt_dynamic = 35" in asterisk.conf:
   Normally the Dynamic RTP Payload Type numbers are 96-127, which allow just 32
   formats. To avoid the message "No Dynamic RTP mapping available", the range
   was changed to 35-63,96-127. This is allowed by RFC 3551 section 3. However,
   when you use more than 32 formats and calls are not accepted by a remote
   implementation, please report this and go back to rtp_pt_dynamic = 96.

 * A new setting, "rtp_use_dynamic", has been added in asterisk.conf". When set
   to "yes" RTP dynamic payload types are assigned dynamically per RTP instance.
   When set to "no" RTP dynamic payload types are globally initialized to pre-
   designated numbers and function similar to static payload types.

app_originate
------------------
 * Added support to gosub predial routines on both original channel and on the
   created channel using options parameter (like app_dial) B() and b().  This
   allows for adding variables to newly created channel or, e.g. setting callerid.

CLI Commands
------------------
 * 'dialplan show' output will now show [config_file:line_number] instead of
   [registrar] when that information is available. Currently only extensions
   registered by pbx_config when loading/reloading will use this format.

app_queue
------------------
 * Add 'QueueUpdate' application which can be used to track outbound calls
   using app_queue.

pbx_spool
------------------
 * Asterisk will now set the AST_OUTGOING_ATTEMPT channel variable so that
   attempt-specific behavior is possible. This is a 1-based number that
   simply increases by 1 for each attempt.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.3.0 to Asterisk 14.4.0 ------------
------------------------------------------------------------------------------

AMI
------------------
 * The 'PJSIPShowEndpoint' command's respone event of 'IdentifyDetail' now
   contains a new optional parameter, 'MatchHeader', mapping to the new
   configuration option 'match_header' for the corresponding 'identify' object.
   It should be noted that since 'match_header' takes in a key: value pair, the
   event parameter will contain a ':' as well.

app_record
------------------
 * Added new 'u' option to Record() application which prevents Asterisk from
   truncating silence from the end of recorded files.

res_pjsip_outbound_registration
------------------
 * Outbound registrations are now refreshed when res_stun_monitor detects
   a network change event has happened.
   The 'pjsip send (un)register' CLI commands were updated to accept '*all'
   as an argument to operate on all registrations.
   The 'PJSIP(Un)Register' AMI commands were updated to also accept '*all'.

app_voicemail
------------------
 * The 'Comedian Mail' prompts can now be overriden using the 'vm-login' and
   'vm-newuser' configuration options in voicemail.conf.

 * Added 'fromstring' field to the voicemail boxes. If set, it will override
   the global 'fromstring' field on a per-mailbox basis.

func_channel
------------------
 * Added CHANNEL(callid) to retrieve the call log tag associated with the
   channel.  e.g., [C-00000000]  Dialplan now has access to the call log
   search key associated with the channel so it can be saved in case there
   is a problem with the call.

res_pjsip
------------------
 * A new transport parameter 'symmetric_transport' has been added.
   When a request from a dynamic contact comes in on a transport with this
   option set to 'yes', the transport name will be saved and used for
   subsequent outgoing requests like OPTIONS, NOTIFY and INVITE.  It's
   saved as a contact uri parameter named 'x-ast-txp' and will display with
   the contact uri in CLI, AMI, and ARI output.  On the outgoing request,
   if a transport wasn't explicitly set on the endpoint AND the request URI
   is not a hostname, the saved transport will be used and the 'x-ast-txp'
   parameter stripped from the outgoing packet.  To facilitate recreation of
   subscriptions on asterisk restart, a new column 'contact_uri' needed to be
   added to the ps_subcsription_persistence table.  Since new columns were
   added to both transport and subscription_persistence, an alembic upgrade
   should be run to bring the database tables up to date.

 * A new option, allow_overlap, has been added to endpoints which allows
   overlap dialing functionality to be enabled or disabled. The option defaults
   to enabled.

res_pjsip_transport_websocket
------------------
 * Removed non-secure websocket support.  Firefox and Chrome have not allowed
   non-secure websockets for quite some time so this shouldn't be an issue
   for people.  Attempting to use a non-secure websocket may or may not work
   when Asterisk attempts to send SIP requests to do something like initiate
   call hangup.

res_pjsip_endpoint_identifier_ip
------------------
 * A new option has been added to the 'identify' configuration object,
   'match_header'. The 'match_header' attribute should contain a SIP
   header: value pair that, When set, will cause inbound requests that contain
   the matching SIP header/value pair to be associated with the corresponding
   endpoint. This option is cumulative with the 'match' option, so that if
   either option matches the request, the request is associated with the
   endpoint.

   In a future release, this module will be renamed to something more
   appropriate, as it now matches inbound requests on more than just IP
   address.

Mark Michelson's avatar
Mark Michelson committed
res_rtp_asterisk
-----------------
 * The RTP layer of Asterisk now has support for RFC 5761: "Multiplexing RTP
   Data and Control Packets on a Single Port." So far, the only channel driver
   that supports this feature is chan_pjsip. You can set "rtcp_mux = yes" on
   a PJSIP endpoint in pjsip.conf to enable the feature.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.2.0 to Asterisk 14.3.0 ------------
------------------------------------------------------------------------------

res_pjproject
------------------
 * Added new CLI command "pjproject set log level".  The new command allows
   the maximum PJPROJECT log levels to be adjusted dynamically and
   independently from the set debug logging level like many other similar
   module debug logging commands.

 * Added new companion CLI command "pjproject show log level" to allow the
   user to see the current maximum pjproject logging level.

 * Added new pjproject.conf startup section "log_level' option to set the
   initial maximum PJPROJECT logging level.

res_pjsip_outbound_registration
------------------
 * Statsd no longer logs redundant status PJSIP.registrations.state changes
   for internal state transitions that don't change the reported public status
   state.

res_pjsip_registrar
------------------
 * The PJSIPShowRegistrationInboundContactStatuses AMI command has been added
   to return ContactStatusDetail events as opposed to
   PJSIPShowRegistrationsInbound which just a dumps every defined AOR.

res_pjsip
------------------
 * Six existing contact fields have been added to the end of the
   ContactStatusDetail AMI event:
   ID, AuthenticateQualify, OutboundProxy, Path, QualifyFrequency and
   QualifyTimeout.  Existing fields have not been disturbed.

res_pjsip_endpoint_identifier_ip
------------------
 * SRV lookups can now be done on provided hostnames to determine additional
   source IP addresses for requests. This is configurable using the
   "srv_lookups" option on the identify and defaults to "yes".

ARI
------------------
 * The 'ari set debug' command has been enhanced to accept 'all' as an
   application name.  This allows dumping of all apps even if an app
   hasn't registered yet.

 * 'ari set debug' now displays requests and responses as well as events.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.1.0 to Asterisk 14.2.0 ------------
------------------------------------------------------------------------------

AMI
------------------
 * Events that reference a bridge may now contain two new optional fields:
   - 'BridgeVideoSourceMode': the video source mode for the bridge.
     Can be one of 'none', 'talker', or 'single'.
   - 'BridgeVideoSource': the unique ID of the channel that is the video
     source in this bridge, if one exists.

 * A new event, BridgeVideoSourceUpdate, has been added with a class
   authorization of CALL. The event is raised when the video source changes
   in a multi-party mixing bridge.

ARI
------------------
 * The bridges resource now exposes two new operations:
   - POST /bridges/{bridgeId}/videoSource/{channelId}: Set a video source in a
     multi-party mixing bridge
   - DELETE /bridges/{bridgeId}/videoSource: Remove the set video source,
     reverting to talk detection for the video source

 * The bridge model in any returned response or event now contains the following
   optional fields:
   - video_mode: the video source mode for the bridge. Can be one of 'none',
     'talker', or 'single'.
   - video_source_id: the unique ID of the channel that is the video source
     in this bridge, if one exists.

 * A new event, BridgeVideoSourceChanged, has been added for bridges.
   Applications subscribed to a bridge will receive this event when the source
   of video changes in a mixing bridge.

 * The ARI major version has been bumped. There are not any known breaking changes
   in ARI. The major version has been bumped because otherwise we can end up with
   overlapping version numbers between different Asterisk versions. Now each major
   version of Asterisk will bring with it a change in the major version of ARI.
   The ARI version in Asterisk 14 is now 2.0.0.

res_pjsip
------------------
 * Automatic dual stack support is now implemented. Depending on DNS resolution
   and the transport used for sending a message the SIP signaling and SDP will
   be updated with the correct IP address and protocol version. This means that
   the rtp_ipv6 and t38_udptl_ipv6 options no longer have any effect. The
   res_pjsip_multihomed module has also been moved into core res_pjsip to ensure
   that messages are updated with the correct address information in all cases.

chan_pjsip
------------------
 * The default behavior for RTP codecs has been changed. The sending codec will
   now match the receiving codec. This can be turned off and behavior reverted
   to asymmetric using the "asymmetric_rtp_codec" endpoint option. If this
   option is set then the sending and received codec are allowed to differ.

CLI Commands
------------------
 * Three new CLI commands have been added for ARI:
   - ari show apps:
      Displays a listing of all registered ARI applications.
   - ari show app <name>:
      Display detailed information about a registered ARI application.
   - ari set debug <name> <on|off>:
      Enable/disable debugging of an ARI application. When debugged, verbose
      information will be sent to the Asterisk CLI.


Queue
------------------
 * A new dialplan variable, ABANDONED, is set when the call is not answered
   by an agent.

res_ari
------------------
 * The configuration file ari.conf now supports a channelvars option, which
   specifies a list of channel variables to include in each channel-oriented
   ARI event.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.0.0 to Asterisk 14.1.0 ------------
------------------------------------------------------------------------------

Build System
------------------
 * The res_digium_phone, codec_g729a, codec_silk, codec_siren7 and
   codec_siren14 binary modules hosted at downloads.digium.com can now be
   automatically downloaded and installed during the Asterisk install
   process.  If selected in menuselect, when 'make install' is run, the
   script will check the downloads site for a new version and download
   and install it if needed.  The '--with-externals-cache' option to
   ./configure can be used to specify a location to cache the latest
   tarballs so they don't have to be re-downloaded for every install.

app_voicemail
------------------
 * Added "tps_queue_high" and "tps_queue_low" options.
   The options can modify the taskprocessor alert levels for this module.
   Additional information can be found in the sample configuration file at
   config/samples/voicemail.conf.sample.

res_pjsip_mwi
------------------
 * Added "mwi_tps_queue_high" and "mwi_tps_queue_low" global configuration
   options to tune taskprocessor alert levels.

 * Added "mwi_disable_initial_unsolicited" global configuration option
   to disable sending unsolicited MWI to all endpoints on startup.
   Additional information can be found in the sample configuration file at
   config/samples/pjsip.conf.sample.

chan_pjsip
------------------
 * A new dialplan function, PJSIP_SEND_SESSION_REFRESH, has been added. When
   invoked, a re-INVITE or UPDATE request will be sent immediately to the
   endpoint underlying the channel. When used in combination with the existing
   dialplan function PJSIP_MEDIA_OFFER, this allows the formats on a PJSIP
   channel to be re-negotiated and updated after session set up.

res_pjsip
------------------
 * A new endpoint configuration parameter 'contact_user' has been added which
   when set will override the default user set on Contact headers in outgoing
   requests.
 * If you are using a sorcery realtime backend to store global res_pjsip
   options (ps_globals table) then you now have to do a res_pjsip reload for
   changes to these options to take effect.  If you are using pjsip.conf to
   configure these options then you already had to do a reload after making
   changes.

 * Added "ignore_uri_user_options" global configuration option for
   compatibility with an ITSP that sends URI user field options.  When enabled
   the user field is truncated at the first semicolon.
   Example:
   URI: "sip:1235557890;phone-context=national@x.x.x.x;user=phone"
   The user field is "1235557890;phone-context=national"
   Which is truncated to this: "1235557890"

   Note: The caller-id and redirecting number strings obtained from incoming
   SIP URI user fields are now always truncated at the first semicolon.

res_rtp_asterisk
------------------
  * An option, ice_blacklist, has been added which allows certain subnets to be
    excluded from local ICE candidates.

app_confbridge
------------------
  * Some sounds played into the bridge are played asynchronously. This, for
    instance, allows a channel to immediately exit the ConfBridge without having
    to wait for a leave announcement to play.

app_dial
------------------
 * Added the "Q" option which sets the Q.850/Q.931 cause on unanswered channels
   when another channel answers the call.  The default of ANSWERED_ELSEWHERE
   is unchanged.

res_ari
------------------
 * ARI events will all now include a new field in the root of the JSON message,
   'asterisk_id'.  This will be the unique ID for the Asterisk system
   transmitting the event.  The value can be overridden using the 'entityid'
   setting in asterisk.conf.

Matthew Jordan's avatar
Matthew Jordan committed
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13 to Asterisk 14 --------------------
------------------------------------------------------------------------------

AMI
-----------------
 * A new event, "DialState" has been added. This is similar to "DialBegin" and
 "DialEnd" in that it tracks the state of a dialed call. The difference is that
 this indicates some intermediate state change in the dial attempt, such as
 "RINGING", "PROGRESS", or "PROCEEDING".

ARI
-----------------
 * A new ARI method has been added to the channels resource. "create" allows for
   you to create a new channel and place that channel into a Stasis application.
   This is similar to origination except that the specified channel is not
   dialed. This allows for an application writer to create a channel, perform
   manipulations on it, and then delay dialing the channel until later.
 * To complement the "create" method, a "dial" method has been added to the
   channels resource in order to place a call to a created channel.
 * All operations that initiate playback of media on a resource now support
   a list of media URIs. The list of URIs are played in the order they are
   presented to the resource. A new event, "PlaybackContinuing", is raised when
   a media URI finishes but before the next media URI starts. When a list is
   played, the "Playback" model will contain the optional attribute
   "next_media_uri", which specifies the next media URI in the list to be played
   back to the resource. The "PlaybackFinished" event is raised when all media
   URIs are done.

 * Stored recordings now allow for the media associated with a stored recording
   to be retrieved. The new route, GET /recordings/stored/{name}/file, will
   transmit the raw media file to the requester as binary.

 * "Dial" events have been modified to not only be sent when dialing begins and ends.
 They now are also sent for intermediate states, such as "RINGING", "PROGRESS", and
 "PROCEEDING".

BridgeAdd
------------------
 * A new application in Asterisk, this will join the calling channel
   to an existing bridge containing the named channel prefix.

ChanSpy
------------------
 * Added the 'l' option, which forces ChanSpy's audiohook to use a long queue
   to store the audio frames. This option is useful if audio loss is
   experienced when using ChanSpy, but may introduce some delay in the audio
   feed on the listening channel.

Alexander Traud's avatar
Alexander Traud committed
Codecs
------------------
 * Added format attribute negotiation for the iLBC audio codec. Format attribute
   negotiation is provided by the res_format_attr_ilbc module. iLBC 20 is the
   default now. Falls back to iLBC 30, when the remote party requests this.

ConfBridge
------------------
 * Added the ability to pass options to MixMonitor when recording is used with
   ConfBridge. This includes the addition of the following configuration
   parameters for the 'bridge' object:
   - record_file_timestamp: whether or not to append the start time to the
     recorded file name
   - record_options: the options to pass to the MixMonitor application
   - record_command: a command to execute when recording is finished
   Note that these options may also be with the CONFBRIDGE function.

ControlPlayback
------------------
 * Remote files can now be retrieved and played back. See the Playback
   dialplan application for more details.

FollowMe
------------------
 * It is now possible to disable the prompt from a callee by setting
   'enable_callee_prompt = no' in followme.conf.

Playback
------------------
 * Remote files can now be retrieved and played back via the Playback and other
   media playback dialplan applications. This is done by directly providing
   the URL to play to the dialplan application:
     same => n,Playback(http://1.1.1.1/howler-monkeys-fl.wav)
   Note that unlike 'normal' media files, the entire URI to the file must be
   provided, including the file extension. Currently, on HTTP and HTTPS URI
   schemes are supported.

Queue
-------------------
 * Added field ReasonPause on QueueMemberStatus if set when paused, the reason
   the queue member was paused.

 * Added field LastPause on QueueMemberStatus for time when started the last
   pause for a queue member.

 * Show the time when started the last pause for queue member on CLI for command
   'queue show'.

SMS
------------------
 * Added the 'n' option, which prevents the SMS from being written to the log
   file. This is needed for those countries with privacy laws that require
   providers to not log SMS content.

Channel Drivers
------------------
chan_dahdi
------------------
 * The CALLERID(ani2) value for incoming calls is now populated in featdmf
   signaling mode.  The information was previously discarded.
 * Added the force_restart_unavailable_chans compatibility option.  When
   enabled it causes Asterisk to restart the ISDN B channel if an outgoing
   call receives cause 44 (Requested channel not available).
chan_iax2
------------------
 * The iax.conf forcejitterbuffer option has been removed.  It is now always
   forced if you set iax.conf jitterbuffer=yes.  If you put a jitter buffer
   on a channel it will be on the channel.
 * A new configuration parameters, 'calltokenexpiration', has been added that
   controls the duration before a call token expires. Default duration is 10
   seconds. Setting this to a higher value may help in lagged networks or those
   experiencing high packet loss.
 * Plaintext auth mode is deprecated and removed from possible default modes.

chan_rtp (was chan_multicast_rtp)
------------------
 * Added unicast RTP support and renamed chan_multicast_rtp to chan_rtp.

 * The format for dialing a unicast RTP channel is:
   UnicastRTP/<destination-addr>[/[<options>]]
   Where <destination-addr> is something like '127.0.0.1:5060'.
   Where <options> are in standard Asterisk flag options format:
   c(<codec>) - Specify which codec/format to use such as 'ulaw'.
   e(<engine>) - Specify which RTP engine to use such as 'asterisk'.

 * New options were added for a multicast RTP channel.  The format for
   dialing a multicast RTP channel is:
   MulticastRTP/<type>/<destination-addr>[/[<control-addr>][/[<options>]]]
   Where <type> can be either 'basic' or 'linksys'.
   Where <destination-addr> is something like '224.0.0.3:5060'.
   Where <control-addr> is something like '127.0.0.1:5060'.
   Where <options> are in standard Asterisk flag options format:
   c(<codec>) - Specify which codec/format to use such as 'ulaw'.
   i(<address>) - Specify the interface address from which multicast RTP
     is sent.
   l(<enable>) - Set whether packets are looped back to the sender.  The
     enable value can be 0 to set looping to off and non-zero to set
     looping on.
   t(<ttl>) - Set the time-to-live (TTL) value for multicast packets.

chan_sip
------------------
 * New 'rtpbindaddr' global setting. This allows a user to define which
   ipaddress to bind the rtpengine to. For example, chan_sip might bind
   to eth0 (10.0.0.2) but rtpengine to eth1 (192.168.1.10).
 * DTLS related configuration options can now be set at a general level.
   Enabling DTLS support, though, requires enabling it at the user
   or peer level.
 * Added the possibility to set the From: header through the the SIP dial
   string (populating the fromuser/fromdomain fields), complementing the
   [!dnid] option for the To: header that has existed since 1.6.0 (1d6b192).
   NOTE: This is again separated by an exclamation mark, so the To: header may
   not contain one of those.
 * Session-Timers (RFC 4028) work for TCP (and TLS) transports as well now.
   Previously Asterisk dropped calls only with UDP transports. However with
   longer international calls via TCP, the SIP channel might break, because
   all hops on the Internet route must stay online (have not a single power
   outage, for example). Therefore with Session-Timers enabled (which are
   enabled at default), you might see additional dropped calls. Consequently
   please, consider to go for session-timers=refuse in your sip.conf.

chan_pjsip
------------------
 * New 'user_eq_phone' endpoint setting. This adds a 'user=phone' parameter
   to the request URI and From URI if the user is determined to be a phone
   number.

 * New 'moh_passthrough' endpoint setting. This will pass hold and unhold
   requests through using SIP re-invites with sendonly and sendrecv accordingly.

 * Added the pjsip.conf system type disable_tcp_switch option.  The option
   allows the user to disable switching from UDP to TCP transports described
   by RFC 3261 section 18.1.1.

 * New 'line' and 'endpoint' options added on outbound registrations. This
   allows some identifying information to be added to the Contact of the
   outbound registration. If this information is present on messages received
   from the remote server the message will automatically be associated with the
   configured endpoint on the outbound registration.

Core
------------------
 * The core of Asterisk uses a message bus called "Stasis" to distribute
   information to internal components. For performance reasons, the message
   distribution was modified to make use of a thread pool instead of a
   dedicated thread per consumer in certain cases. The initial settings for
   the thread pool can now be configured in 'stasis.conf'.

 * A new core DNS API has been implemented which provides a common interface
   for DNS functionality. Modules that use this functionality will require that
   a DNS resolver module is loaded and available.

 * Modified processing of command-line options to first parse only what
   is necessary to read asterisk.conf. Once asterisk.conf is fully loaded,
   the remaining options are processed.  The -X option now applies to
   asterisk.conf only.  To enable #exec for other config files you must
   set execincludes=yes in asterisk.conf.  Any other option set on the
   command-line will now override the equivalent setting from asterisk.conf.
 * The TLS core in Asterisk now supports X.509 certificate subject alternative
   names. This way one X.509 certificate can be used for hosts that can be
   reached under multiple DNS names or for multiple hosts.

 * The Asterisk logging system now supports JSON structured logging. Log
   channels specified in logger.conf or added dynamically via CLI commands now
   support an optional specifier prior to their levels that determines their
   formatting. To set a log channel to format its entries as JSON, a formatter
   of '[json]' can be set, e.g.,
      full => [json]debug,verbose,notice,warning,error

 * The core now supports a 'media cache', which stores temporary media files
   retrieved from external sources. CLI commands have been added to manipulate
   and display the cached files, including:
   - 'media cache show <all>' - show all cached media files, or details about
     one particular cached media file
   - 'media cache refresh <item>' - force a refresh of a particular media file
     in the cache
   - 'media cache delete <item>' - remove an item from the cache
   - 'media cache create <uri>' - retrieve a URI and store it in the cache

 * The ability for device state hints to be automatically created as a result of
   device state changes now exists in the PBX. This functionality is referred to
   as "autohints" and is configurable in extensions.conf by placing "autohints=yes"
   in the context. If enabled a device state hint will be automatically created
   with the name of the device.
* If Asterisk is built with systemd support, and run under systemd, it will
  notify systemd of its state using sd_notify. Use 'Type=notify' in
  asterisk.service.

Functions
------------------
 * The func_odbc global option "single_db_connection" default value has been
   changed to 'no'.

Formats
------------------
 * New module format_ogg_speex added which supports Speex codec inside
   Ogg containers (filename extension .spx).


CHANNEL
------------------
 * Added CHANNEL(onhold) item that returns 1 (onhold) and 0 (not-onhold) for
   the hold status of a channel.

CURL
------------------
 * The CURL function now supports a write option, which will save the retrieved
   file to a location on disk. As an example:
     same => n,Set(CURL(https://1.1.1.1/foo.wav)=/tmp/foo.wav)
   will save 'foo.wav' to /tmp.

DTMF Features
------------------
 * The transferdialattempts default value has been changed from 1 to 3. The
   transferinvalidsound has been changed from "pbx-invalid" to
   "privacy-incorrect". These were changed to make DTMF transfers be more
   user-friendly by default.
res_http_media_cache
------------------
 * A backend for the core media cache, this module retrieves media files from
   a remote HTTP(S) server and stores them in the core media cache for later
   playback.

res_musiconhold
------------------
 * Added sort=randstart to the sort options. It sorts the files by name and
   then chooses the first file to play at random.
 * Added preferchannelclass=no option to prefer the application-passed class
   over the channel-set musicclass. This allows separate hold-music from
   application (e.g. Queue or Dial) specified music.
res_resolver_unbound
------------------
 * Added a res_resolver_unbound module which uses the libunbound resolver library
   to perform DNS resolution. This module requires the libunbound library to be
   installed in order to be used.

res_pjsip
------------------
 * A new SIP resolver using the core DNS API has been implemented. This relies on
   external SIP resolver support in PJSIP which is only available as of PJSIP
   2.4. If this support is unavailable the existing built-in PJSIP SIP resolver
   will be used instead. The new SIP resolver provides NAPTR support, improved
   SRV support, and AAAA record support.
res_pjsip_info_empty
--------------------
 * A new module that can respond to empty Content-Type INFO packets during call.
   Some SBCs will terminate a call if their empty INFO packets are not responded
   to within a predefined time.

res_pjsip_outbound_registration
-------------------------------
* A new 'fatal_retry_interval' option has been added to outbound registration.
  When set (default is zero), and upon receiving a failure response to an
  outbound registration, registration is retried at the given interval up to
  'max_retries'.

res_pjsip_outbound_publish
------------------
 * Added a new multi_user option that when set to 'yes' allows a given configuration
   to be used for multiple users.
CEL Backends
------------------

cel_pgsql
------------------
 * Added a new option, 'usegmtime', which causes timestamps in CEL events
   to be logged in GMT.
 * Added support to set schema where located the table cel. This settings is
   configurable for cel_pgsql via the 'schema' in configuration file
   cel_pgsql.conf.

CDR Backends
------------------

cdr_adaptive_odbc
------------------
 * Added the ability to set the character to quote identifiers. This
   allows adding the character at the start and end of table and column
   names. This setting is configurable for cdr_adaptive_odbc via the
   quoted_identifiers in configuration file cdr_adaptive_odbc.conf.

cdr_odbc
------------------
 * Added a new configuration option, "newcdrcolumns", which enables use of the
   post-1.8 CDR columns 'peeraccount', 'linkedid', and 'sequence'.
cdr_csv
------------------
 * Added a new configuration option, "newcdrcolumns", which enables use of the
   post-1.8 CDR columns 'peeraccount', 'linkedid', and 'sequence'.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13.10.0 to Asterisk 13.11.0 ----------
------------------------------------------------------------------------------

chan_dahdi
------------------
 * Added "faxdetect_timeout" option.
   The option determines how many seconds into a call before faxdetect
   is disabled for the call.  Setting the value to zero disables the timeout.

res_pjsip
------------------
 * Added "fax_detect_timeout" to endpoint.
   The option determines how many seconds into a call before fax_detect
   is disabled for the call.  Setting the value to zero disables the timeout.

 * Added "subscribe_context" to endpoint.
   If specified, incoming SUBSCRIBE requests will be searched for the matching
   extension in the indicated context. If no "subscribe_context" is specified,
   then the "context" setting is used.

res_rtp_asterisk
------------------
 * The DTLS part in Asterisk now supports Perfect Forward Secrecy (PFS).
   Enabling PFS is attempted by default, and is dependent on the configuration
   of the module using TLS.
   - Ephemeral ECDH (ECDHE) is enabled by default. To disable it, do not
     specify a ECDHE cipher suite in sip.conf, for example:
       dtlscipher=AES128-SHA
   - Ephemeral DH (DHE) is disabled by default. To enable it, add DH parameters
     into the private key file, e.g., sip.conf dtlsprivatekey. For example:
       openssl dhparam -out ./dh.pem 2048
   - Because clients expect the server to prefer PFS, and because OpenSSL sorts
     its cipher suites by bit strength, see "openssl ciphers -v DEFAULT".
     Consider re-ordering your cipher suites in the respective configuration
     file. For example:
       dtlscipher=ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
     which forces PFS and requires at least DTLS 1.2.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13.9.0 to Asterisk 13.10.0 -----------
------------------------------------------------------------------------------

Core
------------------
 * A channel variable FORWARDERNAME is now set which indicates which channel
   was responsible for a forwarding requests received on dial attempt.

func_odbc
------------------
 * Added new global option "single_db_connection".
   Enabling this option func_odbc will use a single database connection per DSN.
   This option is enabled by default.

res_fax
------------------
 * Added FAXMODE variable to let dialplan know what fax transport was used.
   FAXMODE variable is set to either "audio" or "T38".

res_pjsip
------------------
 * Added "via_addr", "via_port", "call_id" to contacts.
   As res_pjsip_nat rewrites contact's address, only the last Via header
   can contain the source address of registered endpoint.
   Also Call-Id header may contain the source address of registered endpoint.
   Added new fields ViaAddress,CallID to AMI event ContactStatus

 * Endpoint IP Access Controls
   Added new configuration Endpoint options:
    "acl" - list of IP ACL section names in acl.conf
    "deny" - List of IP addresses to deny access from
    "permit" - List of IP addresses to permit access from
    "contact_acl" - List of Contact ACL section names in acl.conf
    "contact_deny" - List of Contact header addresses to deny
    "contact_permit" - List of Contact header addresses to permit

 * Added "reg_server" to contacts.
   If the Asterisk system name is set in asterisk.conf, it will be stored
   into the "reg_server" field in the ps_contacts table to facilitate
   multi-server setups.
 * When starting Asterisk, received traffic will now be ignored until Asterisk
   has loaded all modules and is fully booted.

res_hep
------------------
 * Added a new option, 'uuid_type', that sets the preferred source of the Homer
   correlation UUID. The valid options are:
   - call-id: Use the PJSIP SIP Call-ID header value
   - channel: Use the Asterisk channel name
   The default value is 'call-id'. In the event that a HEP module cannot find a
   valid value using the specified 'uuid_type', the module may fallback to a
   more readily available source for the correlation UUID.

res_odbc
------------------
 * A new option has been added, 'max_connections', which sets the maximum number
   of concurrent connections to the database. This option defaults to 1 which
   returns the behavior to that of Asterisk 13.7 and prior.

app_confbridge
------------------
 * Added a bridge profile option called regcontext that allows you to
   dynamically register the conference bridge name as an extension into
   the specified context.  This allows tracking down conferences on multi-
   server installations via alternate means (DUNDI for example). By default
   this feature is not used.

Codecs
------------------
 * Added the associated format name to 'core show codecs'.

res_ari_channels
------------------
 * Added 'formats' to channel create/originate to allow setting the allowed
   formats for a channel when no originator channel is available.  Especially
   useful for Local channel creation where no other format information is
   available.  'core show codecs' can now be used to look up suitable format
   names.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13.8.0 to Asterisk 13.9.0 ------------
------------------------------------------------------------------------------

res_parking:
 - The dynamic parking lot creation channel variables PARKINGDYNAMIC,
   PARKINGDYNCONTEXT, PARKINGDYNEXTEN, and PARKINGDYNPOS are now looked
   for in the parker's channel instead of the parked channel.  This is only
   of significance if the parker uses blind transfer or the DTMF one-step
   parking feature.  You need to use the double underscore '__' inheritance
   for these variables.  The indefinite inheritance is also recommended
   for the PARKINGEXTEN variable.

res_pjsip
------------------
 * Added new global option (disable_multi_domain) to pjsip.
   Disabling Multi Domain can improve realtime performace by reducing
   number of database requsts.

chan_pjsip
------------------
 * Added 'pjsip show channelstats' CLI command.
res_pjsip_outbound_publish
------------------
 * Added support for setting the transport used on outbound publish
   using the transport configuration option.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13.7.0 to Asterisk 13.8.0 ------------
------------------------------------------------------------------------------

res_pjsip_caller_id
------------------
 * Per RFC3325, the 'From' header is now anonymized on outgoing calls when
   caller id presentation is prohibited.

res_pjsip_config_wizard
------------------
 * A new command (pjsip export config_wizard primitives) has been added that
   will export all the pjsip objects it created to the console or a file
   suitable for reuse in a pjsip.conf file.

Build System
------------------
 * To help insure that Asterisk is compiled and run with the same known
   version of pjproject, a new option (--with-pjproject-bundled) has been
   added to ./configure.  When specified, the version of pjproject specified
   in third-party/versions.mak will be downloaded and configured.  When you
   make Asterisk, the build process will also automatically build pjproject
   and Asterisk will be statically linked to it.  Once a particular version
   of pjproject is configured and built, it won't be configured or built
   again unless you run a 'make distclean'.

   To facilitate testing, when 'make install' is run, the pjsua and pjsystest
   utilities and the pjproject python bindings will be installed in
   ASTDATADIR/third-party/pjproject.

   The default behavior remains building with the shared pjproject
   installation, if any.

app_confbridge
------------------
 * Added CONFBRIDGE_INFO(muted,) for querying the muted conference state.

 * Added Muted header to AMI ConfbridgeListRooms action response list events
   to indicate the muted conference state.

 * Added Muted column to CLI "confbridge list" output to indicate the muted
   conference state and made the locked column a yes/no value instead of a
   locked/unlocked value.

REDIRECTING(reason)
------------------
 * The REDIRECTING(reason) value is now treated consistently between
   chan_sip and chan_pjsip.

   Both channel drivers match incoming reason values with values documented
   by REDIRECTING(reason) and values documented by RFC5806 regardless of
   whether they are quoted or not.  RFC5806 values are mapped to the
   equivalent REDIRECTING(reason) documented value and is set in
   REDIRECTING(reason).  e.g., an incoming RFC5806 'unconditional' value or a
   quoted string version ('"unconditional"') is converted to
   REDIRECTING(reason)'s 'cfu' value.  The user's dialplan only needs to deal
   with 'cfu' instead of any of the aliases.

   The incoming 480 response reason text supported by chan_sip checks for
   known reason values and if not matched then puts quotes around the reason
   string and assigns that to REDIRECTING(reason).

   Both channel drivers send outgoing known REDIRECTING(reason) values as the
   unquoted RFC5806 equivalent.  User custom values are either sent as is or
   with added quotes if SIP doesn't allow a character within the value as
   part of a RFC3261 Section 25.1 token.  Note that there are still
   limitations on what characters can be put in a custom user value.  e.g.,
   embedding quotes in the middle of the reason string is just going to cause
   you grief.

 * Setting a REDIRECTING(reason) value now recognizes RFC5806 aliases.
   e.g., Setting REDIRECTING(reason) to 'unconditional' is converted to the
   'cfu' value.

res_pjproject
------------------
 * This module is the successor of res_pjsip_log_forwarder.  As well as
   handling the log forwarding (which now displays as 'pjproject:0' instead
   of 'pjsip:0'), it also adds a 'pjproject show buildopts' command to the CLI.
   This displays the compiled-in options of the pjproject installation
   Asterisk is currently running against.

 * Another feature of this module is the ability to map pjproject log levels
   to Asterisk log levels, or to suppress the pjproject log messages
   altogether.  Many of the messages emitted by pjproject itself are the result
   of errors which Asterisk will ultimately handle so the messages can be
   misleading or just noise.  A new config file (pjproject.conf) has been added
   to configure the mapping and a new CLI command (pjproject show log mappings)
   has been added to display the mappings currently in use.

res_pjsip
------------------
 * Transports are now reloadable.  In testing, no in-progress calls were
   disrupted if the ip address or port weren't changed, but the possibility
   still exists.  To make sure there are no unintentional drops, a new option
   'allow_reload', which defaults to 'no' has been added to transport.  If
   left at the default, changes to the particular transport will be ignored.
   If set to 'yes', changes (if any) will be applied.

 * Added new global option (regcontext) to pjsip. When set, Asterisk will
   dynamically create and destroy a NoOp priority 1 extension
   for a given endpoint who registers or unregisters with us.

 * Endpoints and aors can now be identified by the username and realm in an
   incoming Authorization header.  To use this feature, add "auth_username"
   to your endpoint's "identify_by" list.  You can combine "auth_username"
   and the original "username" to test both the From/To and Authorization
   headers.  For endpoints, the order is controlled by the global
   "endpoint_identifier_order" setting.  For matching aors to an endpoint
   for inbound registration, the order is controlled by this option.

 * In conjunction with the "auth_username" change, 3 new options have been
   added to the global configuration object that control how many unidentified
   requests over a certain period from the same IP address can be received
   before a security altert is generated.  A new CLI command
   "pjsip show unidentified_requests" will list the current candidates.

res_pjsip_history
------------------
 * A new module, res_pjsip_history, has been added that provides SIP history
   viewing/filtering from the CLI. The module is intended to be used on systems
   with busy SIP traffic, where existing forms of viewing SIP messages - such
Loading
Loading full blame...