Skip to content
Snippets Groups Projects
CHANGES 275 KiB
Newer Older
  • Learn to ignore specific revisions
  • ==============================================================================
    
    ===
    === This file documents the new and/or enhanced functionality added in
    === the Asterisk versions listed below. This file does NOT include
    === changes in behavior that would not be backwards compatible with
    === previous versions; for that information see the UPGRADE.txt file
    === and the other UPGRADE files for older releases.
    ===
    
    ==============================================================================
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 14 to Asterisk 15 --------------------
    ------------------------------------------------------------------------------
    
    
    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.
    
    
    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.
    
    
    ------------------------------------------------------------------------------
    --- 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.
    
    
    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.
    
    
    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
       as the res_pjsip_logger - may be inadequate. The module provides two new
       CLI commands:
       - 'pjsip set history {on|off|clear}' - this enables/disables SIP history
         capturing, as well as clears an existing history capture. Note that SIP
         packets captured are stored in memory until cleared. As a result, the
         history capture should only be used for debugging/viewing purposes, and
         should *NOT* be left permanently enabled on a system.
       - 'pjsip show history' - displays the captured SIP history. When invoked
         with no options, the entire captured history is displayed. Two options
         are available:
         -- 'entry <num>' - display a detailed view of a single SIP message in
            the history
         -- 'where ...' - filter the history based on some expression. For more
            information on filtering, view the current CLI help for the
            'pjsip show history' command.
    
    
    Voicemail
    ------------------
     * app_voicemail and res_mwi_external can now be built together.  The default
       remains to build app_voicemail and not res_mwi_external but if they are
       both built, the load order will cause res_mwi_external to load first and
       app_voicemail will be skipped.  Use 'preload=app_voicemail.so' in
       modules.conf to force app_voicemail to be the voicemail provider.
    
    
    res_pjsip_sdp_rtp
    ------------------
     * A new option (bind_rtp_to_media_address) has been added to endpoint which
       will cause res_pjsip_sdp_rtp to actually bind the RTP instance to the
       media_address as well as using it in the SDP.  If set, RTP packets will now
       originate from the media address instead of the operating system's "primary"
       ip address.
    
    
    res_rtp_asterisk
    ------------------
     * A new configuration section - ice_host_candidates - has been added to
       rtp.conf, allowing automatically discovered ICE host candidates to be
       overriden. This allows an Asterisk server behind a 1:1 NAT to send its
       external IP as a host candidate rather than relying on STUN to discover it.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 13.6.0 to Asterisk 13.7.0 ------------
    ------------------------------------------------------------------------------
    
    
    Codecs
    ------------------
     * Added format attribute negotiation for the VP8 video codec. Format attribute
       negotiation is provided by the res_format_attr_vp8 module.
    
    
    ConfBridge
    ------------------
     * A new "timeout" user profile option has been added. This configures the number
       of seconds that a participant may stay in the ConfBridge after joining. When
       the time expires, the user is ejected from the conference and CONFBRIDGE_RESULT
       is set to "TIMEOUT" on the channel.
    
    
    chan_sip
    ------------------
     * The websockets_enabled option has been added to the general section of
       sip.conf.  The option is enabled by default to match the previous behavior.
       The option should be disabled when using res_pjsip_transport_websockets to
       ensure chan_sip will not conflict with PJSIP websockets.
    
    
    Dialplan Functions
    ------------------
     * The HOLD_INTERCEPT dialplan function now actually exists in the source tree.
       While support for the events was added in Asterisk 13.4.0, the function
       accidentally never made it in. That function is now present, and will cause
       the 'hold' raised by a channel to be intercepted and converted into an
       event instead.
    
    
    res_pjsip_outbound_registration
    -------------------------------
     * If res_statsd is loaded and a StatsD server is configured, basic statistics
       regarding the state of outbound registrations will now be emitted. This
       includes:
    
    David M. Lee's avatar
    David M. Lee committed
       - A GAUGE statistic for the overall number of outbound registrations, i.e.:
    
    David M. Lee's avatar
    David M. Lee committed
       - A GAUGE statistic for the overall number of outbound registrations in a
    
         particular state, e.g.:
           PJSIP.registrations.state.Registered
    
    res_pjsip
    ------------------
     * The ability to use "like" has been added to the pjsip list and show
       CLI commands.  For instance: CLI> pjsip list endpoints like abc
    
    
     * If res_statsd is loaded and a StatsD server is configured, basic statistics
    
    Niklas Larsson's avatar
    Niklas Larsson committed
       regarding the state of PJSIP contacts will now be emitted. This includes:
    
    David M. Lee's avatar
    David M. Lee committed
       - A GAUGE statistic for the overall number of contacts in a particular
    
         state, e.g.:
           PJSIP.contacts.states.Reachable
       - A TIMER statistic for the RTT time for each qualified contact, e.g.:
           PJSIP.contacts.alice@@127.0.0.1:5061.rtt
    
    
    res_sorcery_memory_cache
    ------------------------
     * A new caching strategy, full_backend_cache, has been added which caches
       all stored objects in the backend. When enabled all objects will be
       expired or go stale according to the configuration. As well when enabled
       all retrieval operations will be performed against the cache instead of
       the backend.
    
    
    func_callerid
    -------------------
     * CALLERID(pres) is now documented as a valid alternative to setting both
       CALLERID(name-pres) and CALLERID(num-pres) at once.  Some channel drivers,
       like chan_sip, don't make a distinction between the two: they take the
       least public value from name-pres and num-pres.  By using CALLERID(pres)
       for reading and writing, you touch the same combined value in the dialplan.
       The same applies to CONNECTEDLINE(pres), REDIRECTING(orig-pres),
       REDIRECTING(to-pres) and REDIRECTING(from-pres).
    
    
    res_endpoint_stats
    -------------------
     * A new module that emits StatsD statistics regarding Asterisk endpoints.
       This includes a total count of the number of endpoints, the count of the
    
    David M. Lee's avatar
    David M. Lee committed
       number of endpoints in the technology agnostic state of the endpoint -
    
       online or offline - as well as the number of channels associated with each
    
    David M. Lee's avatar
    David M. Lee committed
       endpoint. These are recorded as three different GAUGE statistics:
    
        - endpoints.count
        - endpoints.state.{unknown|offline|online}
        - endpoints.{tech}.{resource}.channels
    
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 13.5.0 to Asterisk 13.6.0 ------------
    ------------------------------------------------------------------------------
    
    Dialplan Functions
    ------------------
     * The CHANNEL function, when used on a PJSIP channel, now exposes a 'call-id'
       extraction option when using with the 'pjsip' signalling option. It will
       return the SIP Call-ID associated with the INVITE request that established
       the PJSIP channel.
    
    
    ARI
    ------------------
     * Two new endpoint related events are now available: PeerStatusChange and
       ContactStatusChange. In particular, these events are useful when subscribing
       to all event sources, as they provide additional endpoint related
       information beyond the addition/removal of channels from an endpoint.
    
     * Added the ability to subscribe to all ARI events in Asterisk, regardless
       of whether the application 'controls' the resource. This is useful for
       scenarios where an ARI application merely wants to observe the system,
       as opposed to control it. There are two ways to accomplish this:
       (1) Via the WebSocket connection URI. A new query paramter, 'subscribeAll',
           has been added that, when present and True, will subscribe all
           specified applications to all ARI event sources in Asterisk.
       (2) Via the applications resource. An ARI client can, at any time, subscribe
           to all resources in an event source merely by not providing an explicit
           resource. For example, subscribing to an event source of 'channels:'
           as opposed to 'channels:12345' will subscribe the application to all
           channels.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 13.4.0 to Asterisk 13.5.0 ------------
    ------------------------------------------------------------------------------
    
    AMI
    ------------------
     * A new ContactStatus event has been added that reflects res_pjsip contact
       lifecycle changes:  Created, Removed, Reachable, Unreachable, Unknown.
    
     * Added the Linkedid header to the common channel headers listed for each
       channel in AMI events.
    
    
    ARI
    ------------------
     * A new feature has been added that enables the retrieval of modules and
    
       module information through an HTTP request. Information on a single module
    
       can be also be retrieved. Individual modules can be loaded to Asterisk, as
    
       well as unloaded and reloaded.
    
    * A new resource has been added to the 'asterisk' resource, 'config/dynamic'.
       This resource allows for push configuration of sorcery derived objects
       within Asterisk. The resource supports creation, retrieval, updating, and
       deletion. Sorcery derived objects that are manipulated by this resource
       must have a sorcery wizard that supports the desired operations.
    
    
     * A new feature has been added that allows for the rotation of log channels
       through HTTP requests.
    
    
    res_pjsip
    ------------------
    * A new 'g726_non_standard' endpoint option has been added that, when set to
      'yes' and g.726 audio is negotiated, forces the codec to be treated as if it
      is AAL2 packed on the channel.
    
    
    * A new 'rtp_keepalive' endpoint option has been added. This option specifies
      an interval, in seconds, at which we will send RTP comfort noise packets to
      the endpoint. This functions identically to chan_sip's "rtpkeepalive" option.
    
    
    * New 'rtp_timeout' and 'rtp_timeout_hold' endpoint options have been added.
      These options specify the amount of time, in seconds, that Asterisk will wait
      before terminating the call due to lack of received RTP. These are identical
      to chan_sip's rtptimeout and rtpholdtimeout options.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 13.3.0 to Asterisk 13.4.0 ------------
    ------------------------------------------------------------------------------
    
    chan_pjsip
    ------------------
     * New 'rpid_immediate' option to control if connected line update information
       goes to the caller immediately or waits for another reason to send the
       connected line information update.  See the online option documentation for
       more information.  Defaults to 'no' as setting it to 'yes' can result in
       many unnecessary messages being sent to the caller.
    
    
     * The configuration setting 'progressinband' now defaults to 'no', which
       matches the actual behavior of previous versions.
    
    
    res_pjsip
    ------------------
     * A new CLI command has been added: "pjsip show settings", which shows
       both the global and system configuration settings.
    
    
     * A new aor option has been added: "qualify_timeout", which sets the timeout
       in seconds for a qualify.  The default is 3 seconds.  This overrides the
       hard coded 32 seconds in pjproject.
    
     * Endpoint status will now change to "Unreachable" when all contacts are
       unavailable.  When any contact becomes available, the endpoint will status
       will change back to "Reachable".
    
    
     * A new global option has been added: "max_initial_qualify_time", which
       sets the maximum amount of time from startup that qualifies should be
       attempted on all contacts.
    
    
    res_ari_channels
    ------------------
     * Two new events, 'ChannelHold' and 'ChannelUnhold', have been added to the
       events data model. These events are raised when a channel indicates a hold
       or unhold, respectively.
    
    func_holdintercept
    ------------------
     * A new dialplan function, HOLD_INTERCEPT, has been added. This function, when
       placed on a channel, intercepts hold/unhold indications signalled by the
       channel and prevents them from moving on to other channels in a bridge with
       the hold initiator. Instead, AMI or ARI events are raised indicating that
       the channel wanted to place someone on hold. This allows external
       applications to implement their own custom hold/unhold logic.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 13.2.0 to Asterisk 13.3.0 ------------
    ------------------------------------------------------------------------------