res_stasis: Auto-create context and extens on Stasis app launch.
[asterisk/asterisk.git] / CHANGES
diff --git a/CHANGES b/CHANGES
index 741916a..4f41c39 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -9,6 +9,508 @@
 ==============================================================================
 
 ------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 16 to Asterisk 17 --------------------
+------------------------------------------------------------------------------
+
+chan_sip
+------------------
+ * The chan_sip module is now deprecated, users should migrate to the
+   replacement module chan_pjsip.  See guides at the Asterisk Wiki:
+     https://wiki.asterisk.org/wiki/x/tAHOAQ
+     https://wiki.asterisk.org/wiki/x/hYCLAQ
+
+Channels
+------------------
+ * The core no longer uses the stasis cache for channels snapshots.
+   The following APIs are no longer available:
+       ast_channel_topic_cached()
+       ast_channel_topic_all_cached()
+   The ast_channel_cache_all() and ast_channel_cache_by_name() functions
+   now returns an ao2_container of ast_channel_snapshots rather than a
+   container of stasis_messages therefore you can't call stasis_cache
+   functions on it.
+   The ast_channel_topic_all() function now returns a normal topic,
+   not a cached one so you can't use stasis cache functions on it either.
+   The ast_channel_snapshot_type() stasis message now has the
+   ast_channel_snapshot_update structure as it's data.
+   ast_channel_snapshot_get_latest() still returns the latest snapshot.
+
+Bridging
+------------------
+ * The bridging core no longer uses the stasis cache for bridge
+   snapshots.  The latest bridge snapshot is now stored on the
+   ast_bridge structure itself.
+
+ * The following APIs are no longer available since the stasis cache
+   is no longer used:
+     ast_bridge_topic_cached()
+     ast_bridge_topic_all_cached()
+
+ * A topic pool is now used for individual bridge topics.
+
+ * The ast_bridge_cache() function was removed since there's no
+   longer a separate container of snapshots.
+
+ * A new function "ast_bridges()" was created to retrieve the
+   container of all bridges.  Users formerly calling
+   ast_bridge_cache() can use the new function to iterate over
+   bridges and retrieve the latest snapshot directly from the
+   bridge.
+
+ * The ast_bridge_snapshot_get_latest() function was renamed to
+   ast_bridge_get_snapshot_by_uniqueid().
+
+ * A new function "ast_bridge_get_snapshot()" was created to retrieve
+   the bridge snapshot directly from the bridge structure.
+
+ * The ast_bridge_topic_all() function now returns a normal topic
+   not a cached one so you can't use stasis cache functions on it
+   either.
+
+ * The ast_bridge_snapshot_type() stasis message now has the
+   ast_bridge_snapshot_update structure as it's data.  It contains
+   the last snapshot and the new one.
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 16.1.0 to Asterisk 16.2.0 ------------
+------------------------------------------------------------------------------
+
+ARI
+------------------
+ * Whenever an ARI application is started, a context will be created for it
+   automatically as long as one does not already exist, following the format
+   'stasis-<app_name>'. Two extensions are also added to this context: a match-all
+   extension, and the 'h' extension. Any phone that registers under this context
+   will place all calls to the corresponding Stasis application.
+
+res_pjsip
+------------------
+ * Added "send_contact_status_on_update_registration" global configuration option
+   to enable sending AMI ContactStatus event when a device refreshes its registration.
+
+Core
+------------------
+ * Reworked the media indexer so it doesn't cache the index.  Testing revealed
+   that the cache added no benefit but that it could consume excessive memory.
+   Two new index related functions were created: ast_sounds_get_index_for_file()
+   and ast_media_index_update_for_file() which restrict index updating to
+   specific sound files.  The original ast_sounds_get_index() and
+   ast_media_index_update() calls are still available but since they no longer
+   cache the results internally, developers should re-use an index they may
+   already have instead of calling ast_sounds_get_index() repeatedly.  If
+   information for only a single file is needed, ast_sounds_get_index_for_file()
+   should be called instead of ast_sounds_get_index().
+
+Features
+------------------
+ * Before Asterisk 12, when using the automon or automixmon features defined
+   in features.conf, a channel variable (TOUCH_MIXMONITOR_OUTPUT) was set on
+   both channels, indicating the filename of the recording.
+
+   When bridging was overhauled in Asterisk 12, the behavior was changed such
+   that the variable was only set on the peer channel and not on the channel
+   that initiated the automon or automixmon.
+
+   The previous behavior has been restored so both channels receive the
+   channel variable when one of these features is invoked.
+
+app_voicemail
+------------------
+ * You can now specify a special context with the "aliasescontext" parameter
+   in voicemail.conf which will allow you to create aliases for physical
+   mailboxes.
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 16.0.0 to Asterisk 16.1.0 ------------
+------------------------------------------------------------------------------
+
+pbx_config
+------------------
+ * pbx_config will now find and process multiple 'globals' sections from
+   extensions.conf.  Variables are processed in the order they are found
+   and duplicate variables overwrite the previous value.
+
+chan_pjsip
+------------------
+ * New dialplan function PJSIP_PARSE_URI added to parse an URI and return
+   a specified part of the URI.
+
+Core
+------------------
+ * ast_bt_get_symbols() now returns a vector of strings instead of an
+   array of strings.  This must be freed with ast_bt_free_symbols.
+
+res_pjsip
+------------------
+ * New options 'trust_connected_line' and 'send_connected_line' have been
+   added to the endpoint. The option 'trust_connected_line' is to control
+   if connected line updates are accepted from this endpoint.
+   The option 'send_connected_line' is to control if connected line updates
+   can be sent to this endpoint.
+   The default value is 'yes' for both options.
+
+res_rtp_asterisk
+------------------
+ * The existing strictrtp option in rtp.conf has a new choice availabe, called
+   'seqno', which behaves the same way as setting strictrtp to 'yes', but will
+   ignore the time interval during learning so that bursts of packets can still
+   trigger learning our source.
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 15 to Asterisk 16 --------------------
+------------------------------------------------------------------------------
+
+app_fax
+------------------
+ * The app_fax module is now deprecated, users should migrate to the
+   replacement module res_fax.
+
+app_originate
+------------------
+ * An 'a' option has been added to the Originate dialplan application which
+   will execute the originate in an asynchronous fashion. If set then the
+   application will return immediately without waiting for the originated
+   channel to answer.
+
+Build System
+------------------
+ * MALLOC_DEBUG no longer has an effect on Asterisk's ABI.  Asterisk built
+   with MALLOC_DEBUG can now successfully load binary modules built without
+   MALLOC_DEBUG and vice versa.  Third-party pre-compiled modules no longer
+   need to have a special build with it enabled.
+
+ * Asterisk now depends on libjansson >= 2.11.  If this version is not
+   available on your distro you can use `./configure --with-jansson-bundled`.
+
+app_macro
+------------------
+ * The app_macro module is now deprecated and by default it is no longer
+   built.  Users should migrate to app_stack (Gosub).  A warning is logged
+   the first time any Macro is used.
+
+app_setcallerid
+------------------
+ * The app_setcallerid module has been removed. The CALLERID dialplan function
+   should be used instead.
+
+chan_sip
+------------------
+ * New function SIP_HEADERS() enumerates all headers in the incoming INVITE.
+
+ * The variable GET_TRANSFERRER_DATA set in the peer channel causes matching
+   headers be retrieved from the REFER message and made accessible to the
+   dialplan in the hash TRANSFER_DATA.
+
+chan_dahdi
+------------------
+ * Timeouts for reading digits from analog phones are now configurable in
+   chan_dahdi.conf: firstdigit_timeout, interdigit_timeout, matchdigit_timeout.
+
+AMI
+------------------
+ * The ContactStatus and Status fields for the manager events ContactStatus
+   and ContactStatusDetail are now set to "NonQualified" when a contact exists
+   but has not been qualified.
+
+ * The "Newexten" event is now part of the "dialplan" class. The documentation
+   for Asterisk 15 already specified this, but the implementation was actually
+   using the "call" class instead.
+
+ARI
+------------------
+ * The ContactInfo event's contact_status field is now set to "NonQualified"
+   when a contact exists but has not been qualified.
+
+app_queue
+------------------
+ * Added the ability to set the wrapuptime in the configuration of member.
+   When set the wrapuptime on the member is used instead of the wrapuptime
+   defined for the queue itself.
+
+ * Added predial handler support for caller and callee channels with the
+   B and b options respectively.  This is similar to the predial support
+   in app_dial.
+
+res_config_sqlite
+------------------
+ * The res_config_sqlite module is now deprecated, users should migrate to the
+   replacement module res_config_sqlite3.
+
+res_monitor
+------------------
+ * The res_monitor module is now deprecated, users should migrate to the
+   replacement module app_mixmonitor.
+
+res_pjsip
+------------------
+ * A new AMI action, PJSIPShowAors, has been added which displays information
+   about all configured PJSIP AORs.
+
+ * A new AMI action, PJSIPShowAuths, has been added which displays information
+   about all configured PJSIP Auths.
+
+ * A new AMI action, PJSIPShowContacts, has been added which displays information
+   about all configured PJSIP Contacts.
+
+res_pjsip_registrar_expire
+------------------
+ * The res_pjsip_registrar_expire module has been removed.  The functionality has
+   been moved into res_pjsip_registrar.
+
+func_audiohookinherit
+------------------
+ * The func_audiohookinherit module has been removed. Due to architectural changes
+   in Asterisk 12, audiohook inheritance is performed automatically and this
+   function now lacks function.
+
+cdr_syslog
+------------------
+ * The cdr_syslog module is now deprecated and by default it is no longer
+   built.
+
+cdr_sqlite
+------------------
+ * The cdr_sqlite module has been removed. Users should move to using the
+   cdr_sqlite3_custom module instead.
+
+format_jpeg
+------------------
+ * The format_jpeg module has been removed.
+
+pbx_dundi
+------------------
+ * DUNDi now supports IPv6
+
+Core:
+------------------
+ * libedit is no longer available as an embedded library and must be provided
+   by the system.
+ * The STATIC_BUILD functionality has been removed as it has not been maintained
+   and has not worked in quite some time.
+ * The module loader now enforces inter-module dependencies.  This ensures that
+   a module is not started before another it depends on, even if preload is used.
+   If a dependency is not available or fails to startup this will block any
+   dependants from startup.
+ * Parts of the Asterisk core which can load configuration from realtime are now
+   built-in modules.  It is no longer necessary to preload realtime drivers as
+   they are always initialized before the built-in modules.
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 15.5.0 to Asterisk 15.6.0 ------------
+------------------------------------------------------------------------------
+
+res_pjsip
+------------------
+ * A new option 'suppress_q850_reason_headers' has been added to the endpoint
+   object. Some devices can't accept multiple Reason headers and get confused
+   when both 'SIP' and 'Q.850' Reason headers are received.  This option allows
+   the 'Q.850' Reason header to be suppressed.  The default value is 'no'.
+
+res_pjsip_endpoint_identifier_ip
+------------------
+ * Added regex support to the identify section match_header option.  You
+   specify a regex instead of an explicit string by surrounding the header
+   value with slashes:
+   match_header = SIPHeader: /regex/
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 15.4.0 to Asterisk 15.5.0 ------------
+------------------------------------------------------------------------------
+
+Core
+------------------
+ * Core bridging and, more specifically, bridge_softmix have been enhanced to
+   relay received frames of type TEXT or TEXT_DATA to all participants in a
+   softmix bridge.  res_pjsip_messaging and chan_pjsip have been enhanced to
+   take advantage of this so when res_pjsip_messaging receives an in-dialog
+   MESSAGE message from a user in a conference call, it's relayed to all
+   other participants in the call.
+
+app_sendtext
+------------------
+ * Support Enhanced Messaging.  SendText now accepts new channel variables
+   that can be used to override the To and From display names and set the
+   Content-Type of a message.  Since you can now set Content-Type, other
+   text/* content types are now valid.
+
+app_confbridge
+------------------
+ * ConfbridgeList now shows talking status. This utilizes the same voice
+   detection as the ConfbridgeTalking event, so bridges must be configured
+   with "talk_detection_events=yes" for this flag to have meaning.
+
+ * ConfBridge can now send events to participants via in-dialog MESSAGEs.
+   All current Confbridge events are supported, such as ConfbridgeJoin,
+   ConfbridgeLeave, etc.  In addition to those events, a new event
+   ConfbridgeWelcome has been added that will send a list of all
+   current participants to a new participant.
+
+res_pjsip
+------------------
+  * Two new options have been added to the system and endpoint objects to
+    control whether, on outbound calls, Asterisk will accept updated SDP answers
+    during the initial INVITE transaction when 100rel is not in effect.
+    This usually happens when the INVITE is forked to multiple UASs and more
+    than one sends an SDP answer or when a single UAS needs to change a media
+    port to switch from custom ringback to the actual media destination.
+
+    The 'follow_early_media_forked' option sets whether Asterisk will accept
+    the updated SDP when the To tag on the subsequent response is different than
+    that on the the previous response.  This usually occurs in the forked INVITE
+    scenario. The default value is "yes" which is the current behavior.
+
+    The 'accept_multiple_sdp_answers' flag sets whether Asterisk will accept the
+    updated SDP when the To tag on the subsequent response is the same as that
+    on the previous response. This can occur when a UAS needs to switch media
+    ports from custom ringback to the final media path.  The default value is
+    "no" which is the current behavior.
+
+    These options have to be enabled system-wide in the system config section
+    of pjsip.conf as well as on individual endpoints that require the
+    functionality.
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 15.3.0 to Asterisk 15.4.0 ------------
+------------------------------------------------------------------------------
+
+Core
+------------------
+ * A new configuration option "genericplc_on_equal_codecs" was added to the
+   "plc" section of codecs.conf to allow generic packet loss concealment even
+   if no transcoding was originally needed.  Transcoding via SLIN is forced
+   in this case.
+
+res_pjproject
+------------------
+ * Added the "cache_pools" option to pjproject.conf.  Disabling the option
+   helps track down pool content mismanagement when using valgrind or
+   MALLOC_DEBUG.  The cache gets in the way of determining if the pool contents
+   are used after free and who freed it.
+
+res_pjsip_notify
+------------------
+ * Extend the PJSIPNotify AMI command to send an in-dialog notify on a
+   channel.
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 15.2.0 to Asterisk 15.3.0 ------------
+------------------------------------------------------------------------------
+
+Core
+------------------
+ * During dialplan reload log messages are produced for each context,
+   extension and include.  These messages are no longer printed by the
+   verbose loggers, they are now only logged as debug messages.
+
+app_confbridge
+------------------
+ * Added the Muted header to the ConfbridgeJoin AMI event to indicate the
+   participant's starting mute status.
+
+ * Made the AMI ConfbridgeList action's ConfbridgeList events output all
+   the standard channel snapshot headers instead of a few hand-coded channel
+   snapshot headers.  The benefit is that the CallerIDName gets disruptive
+   characters like CR, LF, Tab, and a few others escaped.  However, an empty
+   CallerIDName is now output as "<unknown>" instead of "<no name>".
+
+app_followme
+------------------
+ * Added a new prompt, connecting-prompt, which will be played
+   (if configured) to the "winner" callee before connecting the call.
+
+res_pjsip
+------------------
+ * Users who are matching endpoints by SIP header need to reevaluate their
+   global "endpoint_identifier_order" option in light of the "ip" endpoint
+   identifier method split into the "ip" and "header" endpoint identifier
+   methods.
+
+ * The pjsip_transport_event feature introduced in 15.1.0 has been refactored.
+   Any external modules that may have used that feature (highly unlikey) will
+   need to be changed as the API has been altered slightly.
+
+res_pjsip_endpoint_identifier_ip
+------------------
+ * The endpoint identifier "ip" method previously recognized endpoints either
+   by IP address or a matching SIP header.  The "ip" endpoint identifier method
+   is now split into the "ip" and "header" endpoint identifier methods.  The
+   "ip" endpoint identifier method only matches by IP address and the "header"
+   endpoint identifier method only matches by SIP header.  The split allows the
+   user to control the relative priority of the IP address and the SIP header
+   identification methods in the global "endpoint_identifier_order" option.
+   e.g., If you have two type=identify sections where one matches by IP address
+   for endpoint alice and the other matches by SIP header for endpoint bob then
+   you can now predict which endpoint is matched when a request comes in that
+   matches both.
+
+res_pjsip_pubsub
+------------------
+ * In an earlier release, inbound registrations on a reliable transport
+   were pruned on Asterisk restart since the TCP connection would have
+   been torn down and become unusable when Asterisk stopped.  This same
+   process is now also applied to inbound subscriptions.  Since this
+   required the addition of a new column to the ps_subscription_persistence
+   realtime table, users who store their subscriptions in a database will
+   need to run the "alembic upgrade head" process to add the column to
+   the schema.
+
+res_pjsip_transport_management
+------------------
+ * Since res_pjsip_transport_management provides several attack
+   mitigation features, its functionality moved to res_pjsip and
+   this module has been removed.  This way the features will always
+   be available if res_pjsip is loaded.
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 15.1.0 to Asterisk 15.2.0 ------------
+------------------------------------------------------------------------------
+
+Core
+------------------
+ * Added the "cache_media_frames" option to asterisk.conf.  Disabling the option
+   helps track down media frame mismanagement when using valgrind or
+   MALLOC_DEBUG.  The cache gets in the way of determining if the frame is
+   used after free and who freed it.  NOTE: This option has no effect when
+   Asterisk is compiled with the LOW_MEMORY compile time option enabled because
+   the cache code does not exist.
+
+chan_sip
+------------------
+ * Calls to invalid extensions are now reported as an ACL failure security event
+   "no_extension_match".
+
+res_rtp_asterisk
+------------------
+ * The X.509 certificate used for DTLS negotation can now be automatically
+   generated. This is supported by res_pjsip by specifying
+   "dtls_auto_generate_cert = yes" on a PJSIP endpoint. For chan_sip, you
+   would set "dtlsautogeneratecert = yes" either in the [general] section of
+   sip.conf or on a specific peer.
+
+res_pjsip
+------------------
+ * The "identify_by" on endpoints can now be set to "ip" to restrict an endpoint
+   being matched based only on IP address. To ensure no behavior change the
+   default has been changed to "username,ip".
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 15.0.0 to Asterisk 15.1.0 ------------
+------------------------------------------------------------------------------
+
+res_pjsip
+------------------
+ * The "remove_existing" option now allows a registration to succeed by
+   displacing any existing contacts that now exceed the "max_contacts" count.
+   Any removed contacts are the next to expire.  The behaviour change is
+   beneficial when "rewrite_contact" is enabled and "max_contacts" is greater
+   than one.  The removed contact is likely the old contact created by
+   "rewrite_contact" that the device is refreshing.
+
+AMI
+------------------
+ * Added a new CancelAtxfer action that cancels an attended transfer.
+
+------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 14 to Asterisk 15 --------------------
 ------------------------------------------------------------------------------
 
@@ -17,10 +519,87 @@ app_queue
  * PAUSEALL/UNPAUSEALL now sets the pause reason in the queue_log if it has
    been defined.
 
+ * A new option, "announce-position-only-up," has been added that, when set to
+   yes, causes position announcements to only be played when the caller's
+   queue position has improved since the last time that we annouced their
+   position. This default is no.
+
+Build System
+------------------
+ * '--with-pjproject-bundled' is now the default when running ./configure
+   It can be disabled with '--without-pjproject-bundled'.
+
+ * A '--with-download-cache' option is now available which is equivalent to
+   setting '--with-sounds-cache' and '--with-externals-cache' to the same
+   value.  The download cache can also be set via the AST_DOWNLOAD_CACHE
+   environment variable.
+
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 14.6.0 to Asterisk 14.7.0 ------------
+------------------------------------------------------------------------------
+
+res_pjsip
+------------------
+ * The "external_media_address" on transports is now resolved using dnsmgr and
+   when dnsmgr refreshes are enabled will be automatically updated with the new
+   IP address of a given hostname.
+
+ * A new endpoint parameter "incoming_mwi_mailbox" allows Asterisk to receive
+   unsolicited MWI NOTIFY requests and make them available to other modules via
+   the stasis message bus.
+
+res_musiconhold
+------------------
+ * By default, when res_musiconhold reloads or unloads, it sends a HUP signal
+   to custom applications (and all descendants), waits 100ms, then sends a
+   TERM signal, waits 100ms, then finally sends a KILL signal.  An application
+   which is interacting with an external device and/or spawns children of its
+   own may not be able to exit cleanly in the default times, expecially if sent
+   a KILL signal, or if it's children are getting signals directly from
+   res_musiconhoild.  To allow extra time, the 'kill_escalation_delay'
+   class option can be used to set the number of milliseconds res_musiconhold
+   waits before escalating kill signals, with the default being the current
+   100ms.  To control to whom the signals are sent, the "kill_method"
+   class option can be set to "process_group" (the default, existing behavior),
+   which sends signals to the application and its descendants directly, or
+   "process" which sends signals only to the application itself.
+
+ * New dialplan function PJSIP_DTMF_MODE added to get or change the DTMF mode
+   of a channel on a per-call basis.
+
+res_xmpp
+-----------------
+ * OAuth 2.0 authentication is now supported when contacting Google. Follow the
+   instructions in xmpp.conf.sample to retrieve and configure the necessary
+   tokens.
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 14.5.0 to Asterisk 14.6.0 ------------
 ------------------------------------------------------------------------------
 
+app_voicemail
+------------------
+ * A new global option "imap_poll_logout" was added to specify whether need to
+   disconnect from the IMAP server after polling of mailboxes.
+   Default: no
+
+res_pjsip
+------------------
+ * A new endpoint option "refer_blind_progress" was added to turn off notifying
+   the progress details on Blind Transfer. If this option is not set then
+   the chan_pjsip will send NOTIFY "200 OK" immediately after "202 Accepted".
+   On default is enabled.
+   Some SIP phones like Mitel/Aastra or Snom keep the line busy until
+   receive "200 OK".
+
+ * A new endpoint option "notify_early_inuse_ringing" was added to control
+   whether to notify dialog-info state 'early' or 'confirmed' on Ringing
+   when already INUSE.
+
+ * The endpoint option 'dtmf_mode' has a new option 'auto_dtmf' added. This
+   mode works similar to 'auto' except uses DTMF INFO as fallback instead of
+   INBAND.
+
 res_agi
 ------------------
  * The EAGI() application will now look for a dialplan variable named
@@ -40,19 +619,18 @@ chan_pjsip
    from the SDP, unless the remote side sends a different codec and we will
    switch to match.
 
+Build System
+------------------
+ * Added a new PJPROJECT_CONFIGURE_OPTS environment variable which can be used
+   to pass arbitrary options to the bundled pjproject configure.
+
+ * Automatically set the bundled pjproject configure --host and --build
+   options to match those supplied for the asterisk configure.
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 14.4.0 to Asterisk 14.5.0 ------------
 ------------------------------------------------------------------------------
 
-res_pjsip
-------------------
- * A new endpoint option "refer_blind_progress" was added to turn off notifying
-   the progress details on Blind Transfer. If this option is not set then
-   the chan_pjsip will send NOTIFY "200 OK" immediately after "202 Accepted".
-   On default is enabled.
-   Some SIP phones like Mitel/Aastra or Snom keep the line busy until
-   receive "200 OK".
-
 res_rtp_asterisk
 ------------------
  * Added the stun_blacklist option to rtp.conf.  Some multihomed servers have
@@ -1483,7 +2061,7 @@ res_pjsip_endpoint_identifer_ip
 ------------------
  * New CLI commands have been added: "pjsip show identif(y|ies)", which lists
    all configured PJSIP identify objects
-   
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 12 to Asterisk 13 --------------------
 ------------------------------------------------------------------------------
@@ -3097,7 +3675,7 @@ chan_agent
    has also been removed, for the same reason.
 
  * The endcall and enddtmf configuration options are removed.  Use the
-   dialplan function CHANNEL(dtmf-features) to set DTMF features on the agent
+   dialplan function CHANNEL(dtmf_features) to set DTMF features on the agent
    channel before calling AgentLogin.
 
 chan_bridge