Skip to content
Snippets Groups Projects
CHANGES 218 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 12 to Asterisk 13 --------------------
    ------------------------------------------------------------------------------
    
    
    app_dahdibarge
    ------------------
     * This module was deprecated and has been removed. Users of app_dahdibarge
       should use ChanSpy instead.
    
    app_readfile
    ------------------
     * This module was deprecated and has been removed. Users of app_readfile
       should use func_env's FILE function instead.
    
    app_saycountpl
    ------------------
     * This module was deprecated and has been removed. Users of app_saycountpl
       should use the Say family of applications.
    
    
    AMI
    ------------------
     * New DeviceStateChanged and PresenceStateChanged AMI events have been added.
       These events are emitted whenever a device state or presence state change
       occurs. The events are controlled by res_manager_device_state.so and
       res_manager_presence_state.so. If the high frequency of these events is
       problematic for you, do not load these modules.
    
    
     * Added DialplanExtensionAdd and DialplanExtensionRemove AMI commands. They
       work in basically the same way as the 'dialplan add extension' and
       'dialplan remove extension' CLI commands respectively.
    
    
     * New AMI action LoggerRotate reloads and rotates logger in the same manner
       as CLI command 'logger rotate'
    
    
     * New AMI Actions FAXSessions, FAXSession, and FAXStats replicate the
       functionality of CLI commands 'fax show sessions', 'fax show session',
       and fax show stats' respectively.
    
    
     * New AMI actions PRIDebugSet, PRIDebugFileSet, and PRIDebugFileUnset
       enable manager control over PRI debugging levels and file output.
    
    
    cdr_sqlite
    -----------------
     * This module was deprecated and has been removed. Users of cdr_sqlite
       should use cdr_sqlite3_custom.
    
    
    cdr_pgsql
    ------------------
     * Added the ability to support PostgreSQL application_name on connections.
       This allows PostgreSQL to display the configured name in the
       pg_stat_activity view and CSV log entries. This setting is configurable
       for cdr_pgsql via the appname configuration setting in cdr_pgsql.conf.
    
    cel_pgsql
    ------------------
     * Added the ability to support PostgreSQL application_name on connections.
       This allows PostgreSQL to display the configured name in the
       pg_stat_activity view and CSV log entries. This setting is configurable
       for cel_pgsql via the appname configuration setting in cel_pgsql.conf.
    
    
    CEL
    ------------------
     * The "bridge_technology" extra field key has been added to BRIDGE_ENTER
       and BRIDGE_EXIT events.
    
    
    chan_dahdi
    ------------------
     * SS7 support now requires libss7 v2.0 or later.
    
     * Added SS7 support for connected line and redirecting.
    
     * Most SS7 CLI commands are reworked as well as new SS7 commands added.
       See online CLI help.
    
     * Added several SS7 config option parameters described in
       chan_dahdi.conf.sample.
    
    
    chan_gtalk
    ------------------
     * This module was deprecated and has been removed. Users of chan_gtalk
       should use chan_motif.
    
    chan_h323
    ------------------
     * This module was deprecated and has been removed. Users of chan_h323
       should use chan_ooh323.
    
    chan_jingle
    ------------------
     * This module was deprecated and has been removed. Users of chan_jingle
       should use chan_motif.
    
    chan_sip
    ------------------
     * The SIPPEER dialplan function no longer supports using a colon as a
       delimiter for parameters. The parameters for the function should be
       delimited using a comma.
    
     * The SIPCHANINFO dialplan function was deprecated and has been removed. Users
       of the function should use the CHANNEL function instead.
    
    
    Core
    ------------------
     * The TLS core 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:
           tlscipher=AES128-SHA:DES-CBC3-SHA
       - Ephemeral DH (DHE) is disabled by default. To enable it, add DH parameters
         into the private key file, e.g., sip.conf tlsprivatekey. For example, the
         default dh2048.pem - see
         http://www.opensource.apple.com/source/OpenSSL098/OpenSSL098-35.1/src/apps/dh2048.pem?txt
       - 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:
           tlscipher=AES128+kEECDH:AES128+kEDH:3DES+kEDH:AES128-SHA:DES-CBC3-SHA:-ADH:-AECDH
         will use PFS when offered by the client. Clients which do not offer PFS
         fall-back to AES-128 (or even 3DES, as recommended by RFC 3261).
    
    
    Features
    ------------------
     * The ast_channel_feature_hooks* functions have been added to allow features
       such as DTMF hooks, interval hooks, and bridge event hooks to be made
       available to a channel when the channel is bridged. Previously, these
       features were provided exclusively by the caller of ast_bridge_join()
       outside of "basic" type bridges.
    
    
     * Channel variables are now substituted in arguments passed to applications
       run by using dynamic features.
    
    
    JACK_HOOK
    ------------------
     * The JACK_HOOK function now supports audio with a sample rate higher than
       8kHz.
    
    
    MusicOnHold
    ------------------
     * The SetMusicOnHold dialplan application was deprecated and has been removed.
       Users of the application should use the CHANNEL function's musicclass
       setting instead.
    
     * The WaitMusicOnHold dialplan application was deprecated and has been
       removed. Users of the application should use MusicOnHold with a duration
       parameter instead.
    
    
    Say
    ------------------
     * The 'say' family of dialplan applications now support the Japanese
       language. The 'language' parameter in say.conf now recognizes a setting of
       'ja', which will enable Japanese language specific mechanisms for playing
       back numbers, dates, and other items.
    
    VoiceMail
    ------------------
     * VoiceMail and VoiceMailMain now support the Japanese language. The
       'language' parameter in voicemail.conf now recognizes a setting of 'ja',
       which will enable prompts to be played back using a Japanese grammatical
       structure. Additional prompts are necessary for this functionality,
       including:
       - jb-arimasu: there is
       - jb-arimasen: there is not
       - jb-oshitekudasai: please press
       - jb-ni: article ni
       - jb-ga: article ga
       - jb-wa: article wa
       - jb-wo: article wo
    
    
    res_config_pgsql
    ------------------
     * Added the ability to support PostgreSQL application_name on connections.
       This allows PostgreSQL to display the configured name in the
       pg_stat_activity view and CSV log entries. This setting is configurable
       for res_config_pgsql via the dbappname configuration setting in
       res_pgsql.conf.
    
    
    MixMonitor
    ------------------
     * New options to play a beep when starting a recording and stopping a recording
       have been added.  The option "p" will play a beep to the channel that starts
       the recording.  The option "P" will play a beep to the channel that stops the
       recording.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 12.4.0 to Asterisk 12.5.0 ------------
    ------------------------------------------------------------------------------
    
    
    ARI
    ------------------
     * Stored recordings now support a new operation, copy. This will take an
       existing stored recording and copy it to a new location in the recordings
       directory.
    
    
    res_pjsip
    ------------------
     * The endpoint configuration object now supports 'accountcode'. Any channel
       created for an endpoint with this setting will have its accountcode set
       to the specified value.
    
    
    Functions
    ------------------
     * Function AUDIOHOOK_INHERIT has been deprecated. Audiohooks are now
       unconditionally inhereted through masquerades. As a side benefit, more
       than one audiohook of a given type may persist through a masquerade now.
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 12.3.0 to Asterisk 12.4.0 ------------
    ------------------------------------------------------------------------------
    
    AgentRequest
    ------------------
     * Returns new AGENT_STATUS value "NOT_CONNECTED" if the agent fails to
       connect with an incoming caller after being alerted to the presence
       of the incoming caller.  The most likely reason this would happen is
       the agent did not acknowledge the call in time.
    
    
    AMI
    ------------------
     * New events have been added for the TALK_DETECT function. When the function
       is used on a channel, ChannelTalkingStart/ChannelTalkingStop events will be
       emitted to connected AMI clients indicating the start/stop of talking on
       the channel.
    
    ARI
    ------------------
     * New event models have been aded for the TALK_DETECT function. When the
       function is used on a channel, ChannelTalkingStarted/ChannelTalkingFinished
       events will be emitted to connected WebSockets subscribed to the channel,
       indicating the start/stop of talking on the channel.
    
    Functions
    ------------------
     * A new function, TALK_DETECT, has been added. When set on a channel, this
       fucntion causes events indicating the starting/stoping of talking on said
       channel to be emitted to both AMI and ARI clients.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 12.2.0 to Asterisk 12.3.0 ------------
    ------------------------------------------------------------------------------
    
    ARI
    ------------------
     * A new Playback URI 'tone' has been added. Tones are specified either as
       an indication name (e.g. 'tone:busy') from indications.conf or as a tone
       pattern (e.g. 'tone:240/250,0/250'). Tones differ from normal playback
       URIs in that they must be stopped manually and will continue to occupy
       a channel's ARI control queue until they are stopped. They also can not
       be rewound or fastforwarded.
    
    
     * User events can now be generated from ARI.  Events can be signalled with
       arbitrary json variables, and include one or more of channel, bridge, or
       endpoint snapshots.  An application must be specified which will receive
       the event message (other applications can subscribe to it).  The message
       will also be delivered via AMI provided a channel is attached.  Dialplan
       generated user event messages are still transmitted via the channel, and
       will only be received by a stasis application they are attached to or if
       the channel is subscribed to.
    
    
    chan_sip
    -----------
     * SIP peers can now specify 'trust_id_outbound' which affects RPID/PAI
       fields for prohibited callingpres information. Values are legacy, no, and
       yes. By default, legacy is used.
    
       trust_id_outbound=legacy - behavior remains the same as 1.8.26.1. When
         dealing with prohibited callingpres and sendrpid=pai/rpid, RPID/PAI
         headers are appended to outbound SIP messages just as they are with
         allowed callingpres values, but data about the remote party's identity is
         anonymized.
         When sendrpid=rpid, only the remote party's domain is anonymized.
       trust_id_outbound=no - when dealing with prohibited callingpres, RPID/PAI
         headers are not sent.
       trust_id_outbound=yes - RPID/PAI headers are applied with the full remote
         party information in tact even for prohibited callingpres information.
         In the case of PAI, a Privacy: id header will be appended for prohibited
         calling information to communicate that the private information should
         not be relayed to untrusted parties.
    
    res_parking
    ------------------
     * Manager action 'Park' now takes an additional argument 'AnnounceChannel'
       which can be used to announce the parked call's location to an arbitrary
       channel in a bridge. If 'Channel' and 'TimeoutChannel' are now the two
       parties in a one to one bridge, 'TimeoutChannel' is treated as having
       parked 'Channel' like with the Park Call DTMF feature and will receive
       announcements prior to being hung up.
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 12.1.0 to Asterisk 12.2.0 ------------
    ------------------------------------------------------------------------------
    
    
    Applications
    --------------------------
    
     * Record application now has an option 'o' which allows 0 to act as an exit
       key setting the RECORD_STATUS variable to 'OPERATOR' instead of 'DTMF'
    
     * Monitor() - A new option, B(), has been added that will turn on a periodic
       beep while the call is being recorded.
    
    Functions
    --------------------------
     * A new function was added: PERIODIC_HOOK.  This allows running a periodic
       dialplan hook on a channel.  Any audio generated by this hook will be
       injected into the call.
    
    
    ChanSpy
    --------------------------
     * ChanSpy now accepts a channel uniqueid or a fully specified channel name
       as the chanprefix parameter if the 'u' option is specified.
    
    
    ConfBridge
    --------------------------
     * CONFBRIDGE dialplan function is now capable of creating/modifying dynamic
       conference user menus.
    
     * CONFBRIDGE dialplan function is now capable of removing dynamic conference
       menus, bridge settings, and user settings that have been applied by the
       CONFBRIDGE dialplan function.
    
    
     * The ConfBridge dialplan application now sets a channel variable,
       CONFBRIGE_RESULT, upon exiting. This variable can be used to determine
       how a channel exited the conference.
    
    
     * Added conference user option 'announce_join_leave_review'. This option
       implies 'announce_join_leave' with the added effect that the user will
       be asked if they want to confirm or re-record the recording of their
       name when entering the conference
    
    
    Directory
    --------------------------
     * At exit, the Directory application now sets a channel variable
       DIRECTORY_RESULT to one of the following based on the reason for exiting:
         OPERATOR    user requested operator by pressing '0' for operator
         ASSISTANT   user requested assistant by pressing '*' for assistant
         TIMEOUT     user pressed nothing and Directory stopped waiting
         HANGUP      user's channel hung up
         SELECTED    user selected a user from the directory and is routed
         USEREXIT    user pressed '#' from the selection prompt to exit
         FAILED      directory failed in a way that wasn't accounted for. Dang.
    
    
    MusicOnHold
    --------------------------
     * MusicOnHold streams (all modes other than "files") now support wide band
       audio too.
    
    
    Page
    --------------------------
     * Added options 'b' and 'B' to apply predial handlers for outgoing calls
       and for the channel executing Page respectively.
    
    
     * PickupChan now accepts channel uniqueids of channels to pickup.
    
    Say
    --------------------------
     * If a channel variable SAY_DTMF_INTERRUPT is present on a channel and set
       to 'true' (case insensitive), then any Say application (SayNumber,
       SayDigits, SayAlpha, SayAlphaCase, SayUnixTime, and SayCounted) will
       anticipate DTMF. If DTMF is received, these applications will behave like
       the background application and jump to the received extension once a match
       is established or after a short period of inactivity.
    
    
    MixMonitor
    -------------------------
     * A new function, MIXMONITOR, has been added to allow access to individual
       instances of MixMonitor on a channel.
    
     * A new option, B(), has been added that will turn on a periodic beep while the
       call is being recorded.
    
    Channel Drivers
    -------------------------
    
    chan_sip
    -------------------------
     * TEL URI support for inbound INVITE requests has been added. chan_sip will
       now handle TEL schemes in the Request and From URIs. The phone-context in
    
       the Request URI will be stored in the SIPURIPHONECONTEXT channel variable on
    
    Debugging
    -------------------------
     * Core Show Locks output now includes Thread/LWP ID if the platform
       supports this feature.
    
     * New "logger add channel" and "logger remove channel" CLI commands have
       been added to allow creation and deletion of dynamic logger channels
       without configuration changes. These dynamic logger channels will only
       exist until the next restart of asterisk.
    
    Core
    ------------------
     * Exposed sorcery-based configuration files like pjsip.conf to dialplans via
       the new AST_SORCERY diaplan function.
    
    
    ARI
    ------------------
     * The live recording object on recording events now contains a target_uri
       field which contains the URI of what is being recorded.
    
     * The bridge type used when creating a bridge is now a comma separated list of
       bridge properties. Valid options are: mixing, holding, dtmf_events, and
       proxy_media.
    
    
     * A channelId can now be provided when creating a channel, either in the
       uri (POST channels/my-channel-id) or as query parameter.  A local channel
       will suffix the second channel id with ';2' unless provided as query
       parameter otherChannelId.
    
     * A bridgeId can now be provided when creating a bridge, either in the uri
       (POST bridges/my-bridge-id) or as a query parameter.
    
     * A playbackId can be provided when starting a playback, either in the uri
    
       (POST channels/my-channel-id/play/my-playback-id /
        POST bridges/my-bridge-id/play/my-playback-id)  or as a query parameter.
    
    
     * A snoop channel can be started with a snoopId, in the uri or query.
    
    AMI
    ------------------
     * Originate now takes optional parameters ChannelId and OtherChannelId,
       used to set the UniqueId on creation.  The other id is assigned to the
       second channel when dialing LOCAL, or defaults to appending ;2 if only
       the single Id is given.
    
     * The Mixmonitor action now has a "Command" header that can be used to
       indicate a post-process command to run once recording finishes.
    
    RealTime
    ------------------
     * A new set of Alembic scripts has been added for CDR tables. This will create
       a 'cdr' table with the default schema that Asterisk expects.
    
    
    res_hep
    ------------------
     * A new module, res_hep, has been added, that acts as a generic packet
       capture agent for the Homer Encapsulation Protocol (HEP) version 3.
       It can be configured via hep.conf. Other modules can use res_hep to send
       message traffic to a HEP capture server.
    
    res_hep_pjsip
    ------------------
     * A new module, res_hep_pjsip, has been added that will forward PJSIP
       message traffic to a HEP capture server. See res_hep for more
       information.
    
    
    res_pjsip
    ------------------
     * transport and endpoint ToS options (tos, tos_audio, and tos_video) may now
       be set as the named set of ToS values (cs0-cs7, af11-af43, ef).
    
     * Added the following new CLI commands:
       - "pjsip show contacts" - list all current PJSIP contacts.
       - "pjsip show contact" - show specific information about a current PJSIP
         contact.
       - "pjsip show channel" - show detailed information about a PJSIP channel.
    
    res_pjsip_multihomed
    ------------------
     * A new module, res_pjsip_multihomed handles situations where the system
       Asterisk is running out has multiple interfaces. res_pjsip_multihomed
       determines which interface should be used during message sending.
    
    res_pjsip_pidf_digium_body_supplement
    ------------------
     * A new module, res_pjsip_pidf_digium_body_supplement provides NOTIFY
       request body formatting for presence support in Digium phones.
    
    res_pjsip_send_to_voicemail
    ------------------
     * A new module, res_pjsip_send_to_voicemail allows for REFER requests with
       particular headers to transfer a PJSIP channel directly to a particular
       extension that has VoiceMail. This is intended to be used with Digium
       phones that support this feature.
    
    res_pjsip_outbound_registration
    ------------------
     * A new CLI command has been added: "pjsip show registrations", which lists
       all configured PJSIP registrations
    
    
    
    ------------------------------------------------------------------------------
    
    --- Functionality changes from Asterisk 12.0.0 to Asterisk 12.1.0 ------------
    
    ------------------------------------------------------------------------------
    
    
    AMI
    ------------------
     * Added a new module that provides AMI control over MWI within Asterisk,
       res_mwi_external_ami. Note that this module depends on res_mwi_external;
       for more information on enabling this module, see res_mwi_external.
       This module provides the MWIGet/MWIUpdate/MWIDelete actions, as well as
       the MWIGet/MWIGetComplete events.
    
     * The DialStatus field in the DialEnd event can now contain additional
       statuses that convey how the dial operation terminated. This includes
       ABORT, CONTINUE, and GOTO.
    
    
     * AMI will now emit security events. A new class authorization has been
       added in manager.conf for the security events, 'security'. The new events
       are:
        - FailedACL - raised when a request violates an ACL check
        - InvalidAccountID - raised when a request fails an authentication
          check due to an invalid account ID
        - SessionLimit - raised when a request fails due to exceeding the
          number of allowed concurrent sessions for a service
        - MemoryLimit - raised when a request fails due to an internal memory
          allocation failure
        - LoadAverageLimit - raised when a request fails because a configured
          load average limit has been reached
        - RequestNotAllowed - raised when a request is not allowed by
          the service
        - AuthMethodNotAllowed - raised when a request used an authentication
          method not allowed by the service
        - RequestBadFormat - raised when a request is received with bad formatting
        - SuccessfulAuth - raised when a request successfully authenticates
        - UnexpectedAddress - raised when a request has a different source address
          then what is expected for a session already in progress with a service
        - ChallengeResponseFailed - raised when a request's attempt to authenticate
          has been challenged, and the request failed the authentication challenge
        - InvalidPassword - raised when a request provides an invalid password
          during an authentication attempt
        - ChallengeSent - raised when an Asterisk service send an authentication
          challenge to a request
        - InvalidTransport - raised when a request attempts to use a transport not
          allowed by the Asterisk service
    
    
     * Bridge related events now have two additional fields: BridgeName and
       BridgeCreator. BridgeName is a descriptive name for the bridge;
       BridgeCreator is the name of the entity that created the bridge. This
       affects the following events: ConfbridgeStart, ConfbridgeEnd,
       ConfbridgeJoin, ConfbridgeLeave, ConfbridgeRecord, ConfbridgeStopRecord,
       ConfbridgeMute, ConfbridgeUnmute, ConfbridgeTalking, BlindTransfer,
       AttendedTransfer, BridgeCreate, BridgeDestroy, BridgeEnter, BridgeLeave
    
    
    ARI
    ------------------
    
     * The Bridge data model now contains the additional fields 'name' and
       'creator'. The 'name' field conveys a descriptive name for the bridge;
       the 'creator' field conveys the name of the entity that created the bridge.
       This affects all responses to HTTP requests that return a Bridge data model
       as well as all event derived data models that contain a Bridge data model.
       The POST /bridges operation may now optionally specify a name to give to
       the bridge being created.
    
     * Added a new ARI resource 'mailboxes' which allows the creation and
       modification of mailboxes managed by external MWI. Modules res_mwi_external
    
       and res_stasis_mailbox must be enabled to use this resource. For more
       information on external MWI control, see res_mwi_external.
    
     * Added new events for externally initiated transfers. The event
       BridgeBlindTransfer is now raised when a channel initiates a blind transfer
       of a bridge in the ARI controlled application to the dialplan; the
       BridgeAttendedTransfer event is raised when a channel initiates an
       attended transfer of a bridge in the ARI controlled application to the
       dialplan.
    
     * Channel variables may now be specified as a body parameter to the
       POST /channels operation. The 'variables' key in the JSON is interpreted
       as a sequence of key/value pairs that will be added to the created channel
       as channel variables. Other parameters in the JSON body are treated as
       query parameters of the same name.
    
    HTTP
    ------------------
     * Asterisk's HTTP server now supports chunked Transfer-Encoding. This will be
       automatically handled by the HTTP server if a request is received with a
       Transfer-Encoding type of "chunked".
    
    
    ------------------
     * Path support has been added with the 'support_path' option in registration
       and aor sections.
    
    
     * A 'debug' option has been added to the globals section that will allow
       sip messages to be logged.
    
    
     * A 'set_var' option has been added to endpoints that will automatically
       set the desired variable(s) on a channel created for that endpoint.
    
     * Several new tables and columns have been added to the realtime schema for
       the res_pjsip related modules. See the UPGRADE.txt notes for updating
       the database schema.
    
    res_mwi_external
    ------------------
     * A new module, res_mwi_external, has been added to Asterisk. This module
       acts as a base framework that other modules can build on top of to allow
       an external system to control MWI within Asterisk. For implementations
       that make use of res_mwi_external, see res_mwi_external_ami and
       res_ari_mailboxes. Note that res_mwi_external canflicts with other modules
       that may produce MWI themselves, such as app_voicemail. res_mwi_external
       and other modules that depend on it cannot be built or loaded with
       app_voicemail present.
    
    
    res_pjsip
    ------------------
     * DNS functionality will now automatically be enabled if the system configured
       nameservers can be retrieved. If the system configured nameservers can not be
       retrieved the functionality will resort to using system resolution. Functionalty
       such as SRV records and failover will not be available if system resolution
       is in use.
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 11 to Asterisk 12 --------------------
    ------------------------------------------------------------------------------
    
    
    Overview
    ------------------
    
    Asterisk 12 is a standard release of the Asterisk project. As such, the
    focus of development for this release was on core architectural changes and
    major new features. This includes:
     * A more flexible bridging core based on the Bridging API
     * A new internal message bus, Stasis
     * Major standardization and consistency improvements to AMI
     * Addition of the Asterisk RESTful Interface (ARI)
     * A new SIP channel driver, chan_pjsip
    In addition, as the vast majority of bridging in Asterisk was migrated to the
    Bridging API used by ConfBridge, major changes were made to most of the
    interfaces in Asterisk. This includes not only AMI, but also CDRs and CEL.
    
    Specifications have been written for the affected interfaces. These
    specifications are available on the Asterisk wiki:
     * AMI - https://wiki.asterisk.org/wiki/x/dAFRAQ
     * CEL - https://wiki.asterisk.org/wiki/x/4ICLAQ
     * CDRs - https://wiki.asterisk.org/wiki/x/pwpRAQ
    
    It is *highly* recommended that anyone migrating to Asterisk 12 read the
    information regarding its release both in this file and in the accompanying
    UPGRADE.txt file. More detailed information on the major changes can be found
    on the Asterisk wiki at https://wiki.asterisk.org/wiki/x/0YCLAQ.
    
    
    Build System
    ------------------
     * Added build option DISABLE_INLINE. This option can be used to work around a
       bug in gcc. For more information, see
       http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47816
    
     * Removed the CHANNEL_TRACE development mode build option. Certain aspects of
       the CHANNEL_TRACE build option were incompatible with the new bridging
       architecture.
    
     * Asterisk now optionally uses libxslt to improve XML documentation generation
       and maintainability. If libxslt is not available on the system, some XML
       documentation will be incomplete.
    
     * Asterisk now depends on libjansson. If a package of libjansson is not
       available on your distro, please see http://www.digip.org/jansson/.
    
     * Asterisk now depends on libuuid and, optionally, uriparser. It is
       recommended that you install uriparser, even if it is optional.
    
     * The new SIP stack and channel driver uses a particular version of PJSIP.
       Please see https://wiki.asterisk.org/wiki/x/J4GLAQ for more information on
       configuring and installing PJSIP for usage with Asterisk.
    
    
     * Optional API was re-implemented to be more portable, and no longer requires
       weak reference support from the compiler. The build option OPTIONAL_API may
       be disabled to disable Optional API support.
    
    Applications
    ------------------
    
    
    AgentLogin
    ------------------
    
     * Along with AgentRequest, this application has been modified to be a
       replacement for chan_agent. The act of a channel calling the AgentLogin
       application places the channel into a pool of agents that can be
       requested by the AgentRequest application. Note that this application, as
       well as all other agent related functionality, is now provided by the
       app_agent_pool module. See chan_agent and AgentRequest for more information.
    
     * This application no longer performs agent authentication. If authentication
       is desired, the dialplan needs to perform this function using the
       Authenticate or VMAuthenticate application or through an AGI script before
       running AgentLogin.
    
     * If this application is called and the agent is already logged in, the
       dialplan will continue exection with the AGENT_STATUS channel variable set
       to ALREADY_LOGGED_IN.
    
     * The agents.conf schema has changed. Rather than specifying agents on a
       single line in comma delineated fashion, each agent is defined in a separate
       context. This allows agents to use the power of context templates in their
       definition.
    
     * A number of parameters from agents.conf have been removed. This includes
       maxloginretries, autologoffunavail, updatecdr, goodbye, group, recordformat,
       urlprefix, and savecallsin. These options were obsoleted by the move from
       a channel driver model to the bridging/application model provided by
       app_agent_pool.
    
    AgentRequest
    ------------------
     * A new application, this will request a logged in agent from the pool and
       bridge the requested channel with the channel calling this application.
       Logged in agents are those channels that called the AgentLogin application.
       If an agent cannot be requested from the pool, the AGENT_STATUS dialplan
       application will be set with an appropriate error value.
    
    AgentMonitorOutgoing
    ------------------
    
     * This application has been removed. It was a holdover from when
       AgentCallbackLogin was removed.
    
    AlarmReceiver
    ------------------
     * Added support for additional Ademco DTMF signalling formats, including
       Express 4+1, Express 4+2, High Speed and Super Fast.
    
     * Added channel variable ALARMRECEIVER_CALL_LIMIT. This sets the maximum
       call time, in milliseconds, to run the application.
    
     * Added channel variable ALARMRECEIVER_RETRIES_LIMIT. This sets the
       maximum number of times to retry the call.
    
     * Added a new configuration option answait. If set, the AlarmReceiver
       application will wait the number of milliseconds specified by answait
       after the channel has answered. Valid values range between 500
       milliseconds and 10000 milliseconds.
    
     * Added configuration option no_group_meta. If enabled, grouping of metadata
       information in the AlarmReceiver log file will be skipped.
    
    
    Answer
    ------------------
     * It is now no longer possible to bypass updating the CDR on the channel
       when answering. CDRs reflect the state of the channel and will always
       reflect the time they were Answered.
    
    
    BridgeWait
    ------------------
     * A new application in Asterisk, this will place the calling channel
       into a holding bridge, optionally entertaining them with some form of
       media. Channels participating in a holding bridge do not interact with
       other channels in the same holding bridge. Optionally, however, a channel
       may join as an announcer. Any media passed from an announcer channel is
       played to all channels in the holding bridge. Channels leave a holding
       bridge either when an optional timer expires, or via the ChannelRedirect
       application or AMI Redirect action.
    
    ConfBridge
    ------------------
     * All participants in a bridge can now be kicked out of a conference room
       by specifying the channel parameter as 'all' in the ConfBridge kick CLI
    
       command, i.e., 'confbridge kick <conference> all'
    
     * CLI output for the 'confbridge list' command has been improved. When
       displaying information about a particular bridge, flags will now be shown
       for the participating users indicating properties of that user.
    
     * The ConfbridgeList event now contains the following fields: WaitMarked,
       EndMarked, and Waiting. This displays additional properties about the
       user's profile, as well as whether or not the user is waiting for a
       Marked user to enter the conference.
    
     * Added a new option for conference recording, record_file_append. If enabled,
       when the recording is stopped and then re-started, the existing recording
       will be used and appended to.
    
    
     * ConfBridge now has the ability to set the language of announcements to the
       conference.  The language can be set on a bridge profile in confbridge.conf
       or by the dialplan function CONFBRIDGE(bridge,language)=en.
    
    
    ControlPlayback
    ------------------
     * The channel variable CPLAYBACKSTATUS may now return the value
       'REMOTESTOPPED'. This occurs when playback is stopped by a remote interface,
       such as AMI. See the AMI action ControlPlayback for more information.
    
    Directory
    ------------------
     * Added the 'a' option, which allows the caller to enter in an additional
       alias for the user in the directory. This option must be used in conjunction
       with the 'f', 'l', or 'b' options. Note that the alias for a user can be
       specified in voicemail.conf.
    
    DumpChan
    ------------------
     * The output of DumpChan no longer includes the DirectBridge or IndirectBridge
       fields. Instead, if a channel is in a bridge, it includes a BridgeID field
       containing the unique ID of the bridge that the channel happens to be in.
    
    ForkCDR
    ------------------
     * ForkCDR no longer automatically resets the forked CDR. See the 'r' option
       for more information.
    
     * Variables are no longer purged from the original CDR. See the 'v' option for
       more information.
    
     * The 'A' option has been removed. The Answer time on a CDR is never updated
       once set.
    
     * The 'd' option has been removed. The disposition on a CDR is a function of
       the state of the channel and cannot be altered.
    
     * The 'D' option has been removed. Who the Party B is on a CDR is a function
    
       of the state of the respective channels involved in the CDR and cannot be
       altered.
    
    
     * The 'r' option has been changed. Previously, ForkCDR always reset the CDR
       such that the start time and, if applicable, the answer time was updated.
       Now, by default, ForkCDR simply forks the CDR, maintaining any times. The
       'r' option now triggers the Reset, setting the start time (and answer time
    
       if applicable) to the current time. Note that the 'a' option still sets
       the answer time to the current time if the channel was already answered.
    
    
     * The 's' option has been removed. A variable can be set on the original CDR
       if desired using the CDR function, and removed from a forked CDR using the
       same function.
    
     * The 'T' option has been removed. The concept of DONT_TOUCH and LOCKED no
       longer applies in the CDR engine.
    
     * The 'v' option now prevents the copy of the variables from the original CDR
       to the forked CDR. Previously the variables were always copied but were
    
       removed from the original. This was changed as removing variables from a CDR
       can have unintended side effects - this option allows the user to prevent
       propagation of variables from the original to the forked without modifying
       the original.
    
     * Added the 'n' option to MeetMe to prevent application of the DENOISE
       function to a channel joining a conference. Some channel drivers that vary
       the number of audio samples in a voice frame will experience significant
       quality problems if a denoiser is attached to the channel; this option gives
       them the ability to remove the denoiser without having to unload func_speex.
    
    MixMonitor
    ------------------
     * The 'b' option now includes conferences as well as sounds played to the
       participants.
    
     * The AUDIOHOOK_INHERIT function is no longer needed to keep a MixMonitor
       running during a transfer. If a MixMonitor is started on a channel,
       the MixMonitor will continue to record the audio passing through the
       channel even in the presence of transfers.
    
    
    NoCDR
    ------------------
     * The NoCDR application is deprecated. Please use the CDR_PROP function to
       disable CDRs.
    
     * While the NoCDR application will prevent CDRs for a channel from being
       propagated to registered CDR backends, it will not prevent that data from
       being collected. Hence, a subsequent call to ResetCDR or the CDR_PROP
       function that enables CDRs on a channel will restore those records that have
       not yet been finalized.
    
    
    ParkAndAnnounce
    -------------------
     * The app_parkandannounce module has been removed. The application
       ParkAndAnnounce is now provided by the res_parking module. See the
       res_parking changes for more information.
    
    
     * Added queue available hint. The hint can be added to the dialplan using the
       following syntax: exten,hint,Queue:{queue_name}_avail
       For example, if the name of the queue is 'markq':
            exten => 8501,hint,Queue:markq_avail
       This will report 'InUse' if there are no logged in agents or no free agents.
       It will report 'Idle' when an agent is free.
    
     * Queues now support a hint for member paused state. The hint uses the form
       'Queue:{queue_name}_pause_{member_name}', where {queue_name} and {member_name}
       are the name of the queue and the name of the member to subscribe to,
       respectively. For example: exten => 8501,hint,Queue:sales_pause_mark.
       Members will show as In Use when paused.
    
     * The configuration options eventwhencalled and eventmemberstatus have been
       removed.  As a result, the AMI events QueueMemberStatus, AgentCalled,
       AgentConnect, AgentComplete, AgentDump, and AgentRingNoAnswer will always be
       sent.  The "Variable" fields will also no longer exist on the Agent* events.
    
       These events can be filtered out from a connected AMI client using the
       eventfilter setting in manager.conf.
    
     * The queue log now differentiates between blind and attended transfers. A
       blind transfer will result in a BLINDTRANSFER message with the destination
       context and extension. An attended transfer will result in an
       ATTENDEDTRANSFER message. This message will indicate the method by which
       the attended transfer was completed: "BRIDGE" for a bridge merge, "APP"
       for running an application on a bridge or channel, or "LINK" for linking
    
       two bridges together with local channels. The queue log will also now detect
       externally initiated blind and attended transfers and record the transfer
       status accordingly.
    
     * When performing queue pause/unpause on an interface without specifying an
       individual queue, the PAUSEALL/UNPAUSEALL event will only be logged if at
       least one member of any queue exists for that interface.
    
     * Added the 'queue_log_realtime_use_gmt' option to have timestamps in GMT
       for realtime queue log entries.
    
    ResetCDR
    ------------------
     * The 'e' option has been deprecated. Use the CDR_PROP function to re-enable
       CDRs when they were previously disabled on a channel.
    
     * The 'w' and 'a' options have been removed. Dispatching CDRs to registered
       backends occurs on an as-needed basis in order to preserve linkedid
       propagation and other needed behavior.
    
    
    SayAlphaCase
    ------------------
     * A new application, this is similar to SayAlpha except that it supports
       case sensitive playback of the specified characters. For example,
       SayAlphaCase(u,aBc) will result in 'a uppercase b c'.
    
    
    SetAMAFlags
    ------------------
    
     * This application is deprecated in favor of CHANNEL(amaflags).
    
    SendDTMF
    ------------------
     * The SendDTMF application will now accept 'W' as valid input. This will cause
       the application to delay one second while streaming DTMF.
    
    Stasis
    ------------------
     * A new application in Asterisk 12, this hands control of the channel calling
       the application over to an external system. Currently, external systems
       manipulate channels in Stasis through the Asterisk RESTful Interface (ARI).
    
    UserEvent
    ------------------
     * UserEvent will now handle duplicate keys by overwriting the previous value
    
       assigned to the key.
    
     * In addition to AMI, UserEvent invocations will now be distributed to any
       interested Stasis applications.
    
    ------------------
    
     * Mailboxes defined by app_voicemail MUST be referenced by the rest of the
       system as mailbox@context.  The rest of the system cannot add @default
       to mailbox identifiers for app_voicemail that do not specify a context
       any longer.  It is a mailbox identifier format that should only be
       interpreted by app_voicemail.
    
    
     * The voicemail.conf configuration file now has an 'alias' configuration
       parameter for use with the Directory application. The voicemail realtime
       database table schema has also been updated with an 'alias' column.
    
     * Pass through support has been added for both VP8 and Opus.
    
     * Added format attribute negotiation for the Opus codec. Format attribute
       negotiation is provided by the res_format_attr_opus module.
    
    
    Core
    ------------------
     * Masquerades as an operation inside Asterisk have been effectively hidden
       by the migration to the Bridging API. As such, many 'quirks' of Asterisk
       no longer occur. This includes renaming of channels, "<ZOMBIE>" channels,
       dropping of frame/audio hooks, and other internal implementation details
       that users had to deal with. This fundamental change has large implications
       throughout the changes documented for this version. For more information
       about the new core architecture of Asterisk, please see the Asterisk wiki.
    
     * Multiple parties in a bridge may now be transferred. If a participant in a
       multi-party bridge initiates a blind transfer, a Local channel will be used
       to execute the dialplan location that the transferer sent the parties to. If
       a participant in a multi-party bridge initiates an attended transfer,
       several options are possible. If the attended transfer results in a transfer
       to an application, a Local channel is used. If the attended transfer results
       in a transfer to another channel, the resulting channels will be merged into
       a single bridge.
    
    
     * The channel variable ATTENDED_TRANSFER_COMPLETE_SOUND is no longer channel
       driver specific.  If the channel variable is set on the transferrer channel,
       the sound will be played to the target of an attended transfer.
    
     * The channel variable BRIDGEPEER becomes a comma separated list of peers in
       a multi-party bridge.  The BRIDGEPEER value can have a maximum of 10 peers
       listed.  Any more peers in the bridge will not be included in the list.
       BRIDGEPEER is not valid in holding bridges like parking since those channels
       do not talk to each other even though they are in a bridge.
    
     * The channel variable BRIDGEPVTCALLID is only valid for two party bridges
       and will contain a value if the BRIDGEPEER's channel driver supports it.
    
    
     * A channel variable ATTENDEDTRANSFER is now set which indicates which channel
       was responsible for an attended transfer in a similar fashion to
       BLINDTRANSFER.