Skip to content
Snippets Groups Projects
CHANGES 347 KiB
Newer Older
==============================================================================
=== THIS FILE IS AUTOMATICALLY GENERATED DURING THE RELEASE
=== PROCESS. DO NOT MAKE CHANGES HERE. INSTEAD, REFER TO
=== doc/CHANGES-staging/README.md FOR MORE DETAILS.
===
=== This file documents the new and/or enhanced functionality added in
=== the Asterisk versions listed below. This file does NOT include
=== changes in behavior that would not be backwards compatible with
=== previous versions; for that information see the UPGRADE.txt file
=== and the other UPGRADE files for older releases.
===
==============================================================================
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 18.4.0 to Asterisk 18.5.0 ------------
------------------------------------------------------------------------------

AMI Flash event
------------------
 * Hook flash events are now exposed as AMI events.

Add variable support to Originate
------------------
 * The Originate application now allows
   variables to be set on the new channel
   through a new option.

MessageSend
------------------
 * The MessageSend dialplan application now takes an
   optional third argument that can set the message's
   "To" field on outgoing messages.  It's an alternative
   to using the MESSAGE(to) dialplan function.

   To prevent confusion with the first argument, currently
   named "to", it's been renamed to "destination".
   Its function, creating the request URI, hasn't changed.

   The online documentation has also been enhanced to
   explain the behavior.

   Despite the changes in this commit, there should be
   no impact to current users of MessageSend.

New ConfKick application
------------------
 * Adds a ConfKick() application, which allows
   a specific channel, all users, or all non-admin
   users to be kicked from a conference bridge.

app_confbridge answer supervision control
------------------
 * app_confbridge now provides a user option to prevent
   answer supervision if the channel hasn't been
   answered yet. To use it, set a user profile's
   answer_channel option to no.

app_voicemail
------------------
 * You can now customize the "beep" tone or omit it entirely.

func_math: Three new dialplan functions
------------------
 * Introduce three new functions, MIN, MAX, and ABS, which can be used to
   obtain the minimum or maximum of up to two integers or absolute value.

func_volume now can be read
------------------
 * The VOLUME function can now also be used
   to read existing values previously set.

res_pjsip
------------------
 * PJSIP support of registrations of endpoints in multidomain
   scenarios, where the endpoint contains the domain info
   in pjsip_endpoint.conf

res_pjsip_dialog_info_body_generator
------------------
 * PJSIP now supports RFC 4235 Section 4.1.6 dialog-info+xml local and
   remote elements by iterating through ringing channels and inserting
   that info into NOTIFY packet sent to the endpoint.

res_pjsip_messaging
------------------
 * Implemented the new "to" parameter of the MessageSend()
   dialplan application.  This allows a user to specify
   a complete SIP "To" header separate from the Request URI.
   We now also accept a destination in the same format
   as Dial()...  PJSIP/number@endpoint

res_rtp_asterisk
------------------
 * By default Asterisk reports the PJSIP version in all
   STUN packets it sends.

   This behaviour may not be desired in a production
   environment and can now be disabled by setting the
   stun_software_attribute option to 'no' in rtp.conf.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 18.3.0 to Asterisk 18.4.0 ------------
------------------------------------------------------------------------------

logger
------------------
 * The dateformat option in logger.conf will now control the remote
   console (asterisk -r -T) timestamp format.  Previously, dateformat only
   controlled the formatting of the timestamp going to log files and the
   main console (asterisk -c) but only for non-verbose messages.

   Internally, Asterisk does not send the logging timestamp with verbose
   messages to console clients. It's up to the Asterisk remote consoles
   to format verbose messages.  Asterisk remote consoles previously did
   not load dateformat from logger.conf.

   Previously there was a non-configurable and hard-coded "%b %e %T"
   dateformat that would be used no matter what on all verbose console
   messages printed on remote consoles.

   Example:
   logger.conf
    dateformat=%F %T.%3q

   # asterisk -rvvv -T
   [2021-03-19 09:54:19.760-0400]  Loading res_stasis_answer.so.
   [Mar 19 09:55:43]     -- Goto (dialExten,s,1)

   Given the following example configuration in logger.conf, Asterisk log
   files and the console, will log verbose messages using the given
   timestamp.  Now ensuring that all remote console messages are logged
   with the same dateformat as other log streams.

   ---
   [general]
   dateformat=%F %T.%3q

   [logfiles]
   console  => notice,warning,error,verbose
   full     => notice,warning,error,debug,verbose
   ---

   Now we have a globally-defined dateformat that will be used
   consistently across the Asterisk main console, remote consoles, and
   log files.

   Now we have consistent logging:

   # asterisk -rvvv -T
   [2021-03-19 09:54:19.760-0400]  Loading res_stasis_answer.so.
   [2021-03-19 09:55:43.920-0400]     -- Goto (dialExten,s,1)

res_pjsip
------------------
 * PJSIP transports can now be partially reloaded safely. This allows the
   local_net and external_* options to be updated without restarting Asterisk.

 * PJSIP endpoints can now be configured to skip authentication when
   handling OPTIONS requests by setting the allow_unauthenticated_options
   configuration property to 'yes.'

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 18.2.2 to Asterisk 18.3.0 ------------
------------------------------------------------------------------------------

app_mixmonitor
------------------
 * app_mixmonitor now sends manager events MixMonitorStart, MixMonitorStop and
   MixMonitorMute when the channel monitoring is started, stopped and muted (or
   unmuted) respectively.

chan_iax2
------------------
 * You can now specify a default "auth" method in the
   [general] section of iax.conf

chan_pjsip, app_transfer
------------------
 * Added TRANSFERSTATUSPROTOCOL variable.  When transfer is performed,
   transfers can pass a protocol specific error code.
   Example, in SIP 3xx-6xx represent any SIP specific error received when
   performing a REFER.

func_odbc
------------------
 * Introduce an ARGC variable for func_odbc functions, along with a minargs
   per-function configuration option.

   minargs enables enforcing of minimum count of arguments to pass to
   func_odbc, so if you're unconditionally using ARG1 through ARG4 then
   this should be set to 4.  func_odbc will generate an error in this case,
   so for example

   [FOO]
   minargs = 4

   and ODBC_FOO(a,b,c) in dialplan will now error out instead of using a
   potentially leaked ARG4 from Gosub().

   ARGC is needed if you're using optional argument, to verify whether or
   not an argument has been passed, else it's possible to use a leaked ARGn
   from Gosub (app_stack).  So now you can safely do
   ${IF($[${ARGC}>3]?${ARGV}:default value)} kind of thing.

res_srtp
------------------
 * SRTP replay protection has been added to res_srtp and
   a new configuration option "srtpreplayprotection" has
   been added to the rtp.conf config file.  For security
   reasons, the default setting is "yes".  Buggy clients
   may not handle this correctly which could result in
   no, or one way, audio and Asterisk error messages like
   "replay check failed".

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 18.1.0 to Asterisk 18.2.0 ------------
------------------------------------------------------------------------------

Core
------------------
 * The location where the media cache stores its temporary files
   is no longer hardcoded to /tmp but can now be configured separately
   via the astcachedir config variable in asterisk.conf. To retain
   backwards compatibility, the default location remains /tmp.

app_voicemail
------------------
 * The VoiceMail application can now be configured to send greetings and
   instructions via early media and only answering the channel when it is
   time for the caller to record their message. This behavior can be
   activated by passing the new 'e' option to VoiceMail.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 18.0.0 to Asterisk 18.1.0 ------------
------------------------------------------------------------------------------

Core
------------------
 * Added debug logging categories that allow a user to output debug information
   based on a specified category. This lets the user limit, and filter debug
   output to data relevant to a particular context, or topic. For instance the
   following categories are now available for debug logging purposes:

     dtls, dtls_packet, ice, rtcp, rtcp_packet, rtp, rtp_packet, stun, stun_packet

   These debug categories can be enable/disable via an Asterisk CLI command:

     core set debug category <category>[:<sublevel>] [category[:<sublevel] ...]
     core set debug category off [<category> [<category>] ...]

   If no sub-level is associated all debug statements for a given category are
   output. If a sub-level is given then only those statements assigned a value
   at or below the associated sub-level are output.

app_confbridge
------------------
 * app_confbridge now has the ability to force the estimated bitrate on an SFU
   bridge.  To use it, set a bridge profile's remb_behavior to "force" and
   set remb_estimated_bitrate to a rate in bits per second.  The
   remb_estimated_bitrate parameter is ignored if remb_behavior is something
   other than "force".

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 17.0.0 to Asterisk 18.0.0 ------------
------------------------------------------------------------------------------

chan_pjsip
------------------
 * The PJSIP_SEND_SESSION_REFRESH dialplan function now issues a warning, and
   returns unsuccessful if it's used on a channel prior to answering.

logger
------------------
 * Added a new log formatter called "plain" that always prints
   file, function and line number if available (even for verbose
   messages) and never prints color control characters.  Most
   suitable for file output but can be used for other channels
   as well.

   You use it in logger.conf like so:
   debug => [plain]debug
   console => [plain]error,warning,debug,notice,pjsip_history
   messages => [plain]warning,error,verbose

286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663
------------------------------------------------------------------------------
--- New functionality introduced in Asterisk 18.0.0 --------------------------
------------------------------------------------------------------------------

Core
------------------
 * The Streams API becomes the home for the core ACN capabilities.
   These include...

    * Parsing and formatting of codec negotation preferences.
    * Resolving pending streams and topologies with those configured
      using configured preferences.
    * Utility functions for creating string representations of
      streams, topologies, and negotiation preferences.

   For codec negotiation preferences:
    * Added ast_stream_codec_prefs_parse() which takes a string
      representation of codec negotiation preferences, which
      may come from a pjsip endpoint for example, and populates
      a ast_stream_codec_negotiation_prefs structure.
    * Added ast_stream_codec_prefs_to_str() which does the reverse.
    * Added many functions to parse individual parameter name
      and value strings to their respectrive enum values, and the
      reverse.

   For streams:
    * Added ast_stream_create_resolved() which takes a "live" stream
      and resolves it with a configured stream and the negotiation
      preferences to create a new stream.
    * Added ast_stream_to_str() which create a string representation
      of a stream suitable for debug or display purposes.

   For topology:
    * Added ast_stream_topology_create_resolved() which takes a "live"
      topology and resolves it, stream by stream, with a configured
      topology stream and the negotiation preferences to create a new
      topology.
    * Added ast_stream_topology_to_str() which create a string
      representation of a topology suitable for debug or display
      purposes.
    * Renamed ast_format_caps_from_topology() to
      ast_stream_topology_get_formats() to be more consistent with
      the existing ast_stream_get_formats().

   Additional changes:
    * A new function ast_format_cap_append_names() appends the results
      to the ast_str buffer instead of replacing buffer contents.

app_bridgeaddchan
------------------
 * The BridgeAdd application now behaves more like the Bridge application.
   The application now sets the BRIDGERESULT channel variable to indicate
   what happened when the channel resumes in dialplan.  This is instead of
   hanging up the channel on failure conditions.

res_pjsip
------------------
 * Two new options, incoming_call_offer_pref and outgoing_call_offer_pref
   have been added to res_pjsip endpoints that specify the preferred order
   of codecs to use between those received/sent in an SDP offer and those
   set in the endpoint configuration.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 17.0.0 to Asterisk 18.0.0 ------------
------------------------------------------------------------------------------

AMI
------------------
 * You can now specify an optional 'Content-Type' as an argument for the Asterisk
   SendText manager action.

ARI
------------------
 * A new parameter 'inhibitConnectedLineUpdates' is now available in the
   'bridges.addChannel' call. This prevents the identity of the newly connected
   channel from being presented to other bridge members.

ARI Channels
------------------
 * The Channel resource has a new sub-resource "externalMedia".
   This allows an application to create a channel for the sole purpose
   of exchanging media with an external server.  Once created, this
   channel could be placed into a bridge with existing channels to
   allow the external server to inject audio into the bridge or
   receive audio from the bridge.
   See https://wiki.asterisk.org/wiki/display/AST/External+Media+and+ARI
   for more information.

Core
------------------
 * H.265/HEVC is now a supported video codec and it can be used by
   specifying "h265" in the allow line.
   Please note however, that handling of the additional SDP parameters
   described in RFC 7798 section 7.2 is not yet supported.

Features
------------------
 * Adds support for AudioSocket, a very simple bidirectional audio streaming
   protocol. There are both channel and application interfaces.

   A description of the protocol can be found on the referenced wiki page. A
   short talk about the reasons and implementation can be found on YouTube at
   the link provided.

   ARI support has also been added via the existing "externalMedia" ARI
   functionality. The UUID is specified using the arbitrary "data" field.

   Wiki: https://wiki.asterisk.org/wiki/display/AST/AudioSocket
   YouTube: https://www.youtube.com/watch?v=tjduXbZZEgI

Messaging
------------------
 * In order to reduce the amount of AMI and ARI events generated,
   the global "Message/ast_msg_queue" channel can be set to suppress
   it's normal channel housekeeping events such as "Newexten",
   "VarSet", etc. This can greatly reduce load on the manager
   and ARI applications when the Digium Phone Module for Asterisk
   is in use.  To enable, set "hide_messaging_ami_events" in
   asterisk.conf to "yes"  In Asterisk versions <18, the default
   is "no" preserving existing behavior.  Beginning with
   Asterisk 18, the option will default to "yes".

STIR/SHAKEN
------------------
 * STIR/SHAKEN support has been added to Asterisk. Configuration is done in
   stir_shaken.conf. There is a sample configuration file to help you get
   started (asterisk/configs/samples/stir_shaken.conf.sample). Once that's
   set up, you can enable STIR/SHAKEN on any endpoint by setting stir_shaken
   to yes on the endpoint configuration object. This will add an Identity
   header on outgoing INVITEs, and check for an Identity header on incoming
   INVITEs. This option has been added to Alembic as well.

   The information received on an incoming INVITE can be checked using the
   STIR_SHAKEN dialplan function. There are two variations:

   STIR_SHAKEN(count)
   STIR_SHAKEN(0, verify_result)

   The first variation will tell you how many STIR/SHAKEN results are on the
   channel. The second fetches information for a specific result. The first
   parameter is the index, followed by what information you want to retrieve.
   The available options are 'verify_result', 'identity', and 'attestation'.

app_chanisavail
------------------
 * The ChanIsAvail application now tolerates empty positions in the supplied
   device list.  Dialplan can now be simplified by not having to check for
   empty positions in the device list.

app_confbridge
------------------
 * A new bridge profile option, maximum_sample_rate, has been added which sets
   a maximum sample rate that the bridge will be mixed at. This allows the bridge
   to move below the maximum sample rate as needed but caps it at the maximum.

 * A new option, "text_messaging", has been added to the user profile
   which allows control over whether text messaging is enabled or
   disabled for a user. If enabled (the default) text messages
   will be sent to the user. If disabled no text messages will be
   sent to the user.

app_dial
------------------
 * The Dial application now tolerates empty positions in the supplied
   destination list.  Dialplan can now be simplified by not having to check
   for empty positions in the destination list.  If there are no endpoints to
   dial then DIALSTATUS is set to CHANUNAVAIL.

app_mixmonitor
------------------
 * An option 'S' has been added to MixMonitor. If used in combination with
   the r() and/or t() options, if a frame is available to write to one of
   those files but not the other, a frame of silence if written to the file
   that does not have an audio frame. This should prevent the two files
   from "drifting" when mixed after the fact.

 * If the 'filename' argument to MixMonitor() ended with '.wav49,'
   Asterisk would silently convert the extension to '.WAV' when opening
   the file for writing. This caused the MIXMONITOR_FILENAME variable to
   reference the wrong file. The MIXMONITOR_FILENAME variable will now
   reflect the name of the file that Asterisk actually used instead of
   the filename that was passed to the application.

app_page
------------------
 * The Page application now tolerates empty positions in the supplied
   destination list.  Dialplan can now be simplified by not having to check
   for empty positions in the destination list.

app_voicemail
------------------
 * A feature was added in Asterisk 13.27.0 and 16.4.0 that removed lock files from
   the Asterisk voicemail directory on startup. Some users that store their
   voicemails on network storage devices experienced slow startup times due to the
   relative expense of traversing the voicemail directory structure looking for
   orphaned lock files. This feature has now been removed.

   Users who require the lock files to be removed at startup should modify their
   startup scripts to do so before starting the asterisk process.

chan_pjsip
------------------
 * A new dialplan function, PJSIP_MOH_PASSTRHOUGH, has been added to chan_pjsip. This
   allows the behaviour of the moh_passthrough endpoint option to be read or changed
   in the dialplan. This allows control on a per-call basis.

chan_rtp
------------------
 * The UnicastRTP channel driver provided by chan_rtp now accepts
   "<hostname>:<port>" as an alternative to "<ip_address>:<port>" in the destination.
   The first AAAA (preferred) or A record resolved will be used as the destination.
   The lookup is synchronous so beware of possible dialplan delays if you specify a
   hostname.

func_curl
------------------
 * A new parameter, httpheader, has been added to CURLOPT function. This parameter
   allows to set custom http headers for subsequent calls off CURL function.
   Any setting of headers will replace the default curl headers
   (e.g. "Content-type: application/x-www-form-urlencoded")

 * A new option, followlocation, can now be enabled with the CURLOPT()
   dialplan function. Setting this will instruct cURL to follow 3xx
   redirects, which it does not by default.

func_jitterbuffer
------------------
 * The JITTERBUFFER dialplan function now has an option to enable video synchronization
   support. When enabled and used with a compatible channel driver (chan_sip, chan_pjsip)
   the video is buffered according to the size of the audio jitterbuffer and is
   synchronized to the audio.

func_volume
------------------
 * Accept decimal number as argument.

http
------------------
 * You can now disable the /httpstatus page served by Asterisk's built-in
   HTTP server by setting 'enable_status' to 'no' in http.conf.

minmemfree
------------------
 * The 'minmemfree' configuration option now counts memory allocated to
   the filesystem cache as "free" because it is memory that is available
   to the process.

res_ari_channels
------------------
 * When creating a channel in ARI using the create call
   you can now specify dialplan variables to be set as part
   of the same operation.

res_musiconhold
------------------
 * This fix allows a realtime moh class to be unregistered from the command
   line. This is useful when the contents of a directory referenced by a
   realtime moh class have changed.
   The realtime moh class is then reloaded on the next request and uses the
   new directory contents.

 * A new mode - playlist - has been added to res_musiconhold. This mode allows the
   user to specify the files (or URLs) to play explicitly by putting them directly
   in musiconhold.conf.

res_pjsip
------------------
 * Added a new PJSIP system setting called disable_rport.
   Default is no to keep support working as before.

   If it is false (default) it adds the 'rport' parameter in the outgoing request message.
   If it is true it does not add the 'rport' parameter in the outgoing request message.

   This is a system option, but working as a global option.

res_pjsip_endpoint_identifier_ip
------------------
 * In 'type = identify' sections, the addresses specified for the 'match'
   clause can now include a port number. For IP addresses, the port is
   provided by including a colon after the address, followed by the
   desired port number. If supplied, the netmask should follow the port
   number. To specify a port for IPv6 addresses, the address itself must
   be enclosed in brackets to be parsed correctly.

res_pjsip_logger
------------------
 * The PJSIP packet logger now has the following CLI commands:

   pjsip set logger pcap <filename>

   When used this will create a pcap file containing the incoming
   and outgoing SIP packets, in unencrypted form.

   pjsip set logger console <on / off>

   This allows you to toggle logging to console on and off.

   pjsip set logger host <IP/subnet mask> add

   This allows you to add an additional IP address or subnet
   mask to logging, allowing you to log multiple instead of
   just a single IP address or all traffic.

   The normal "pjsip set logger host" CLI command has also been
   expanded to allow subnet masks as well.

res_pjsip_session
------------------
 * When placing an outgoing call to a PJSIP endpoint the intent
   of any requested formats will now be respected. If only an audio
   format is requested (such as ulaw) but the underlying endpoint
   does not support the format the resulting SDP will still only
   contain an audio stream, and not any additional streams such as
   video.

 * Two new options, incoming_call_offer_pref and outgoing_call_offer_pref
   have been added to res_pjsip endpoints that specify the preferred order
   of codecs to use between those received/sent in an SDP offer and those
   set in the endpoint configuration.

res_rtp_asterisk
------------------
 * This change include a new cli command 'rtp show settings'

   The command display by general settings of rtp configuration. For this
   point is added the fields: rtpstart, rtpend, dtmftimeout, rtpchecksum,
   strictrtp, learning_min_sequential and icesupport.

 * The blacklist mechanism in res_rtp_asterisk for ICE and STUN was converted to
   an ACL mechanism.

   As such six now options are now available:

   ice_deny
   ice_permit
   ice_acl
   stun_deny
   stun_permit
   stun_acl

   These options have their obvious meanings as used elsewhere.

   Backwards compatibility was maintained by adding {stun,ice}_blacklist as
   aliases for {stun,ice}_deny.

res_sorcery_memory_cache
------------------
 * The SorceryMemoryCacheExpireObject AMI action and CLI
   command allow expiring of a specific object within the
   sorcery memory cache. This is done by removing the
   object from the cache with the expectation that the
   cache will then re-populate the object when it is next
   needed.

   For full backend caching this does not occur. The cache
   won't repopulate until an entire refresh is done resulting
   in the possibility that objects are missing until that
   time.

   The AMI action and CLI command will now not allow
   expiring of an object if the cache is configured as a
   full backend cache. Instead you must use either the
   SorceryMemoryCacheExpire or SorceryMemoryCachePopulate
   AMI actions or their associated CLI commands.

taskprocessor.c
------------------
 * Added two new CLI commands to reset stats for taskprocessors. You can
   reset stats for a single, specific taskprocessor ('core reset
   taskprocessor <taskprocessor>'), or you can reset all taskprocessors
   ('core reset taskprocessors'). These commands will reset the counter for
   the number of tasks processed as well as the max queue size.

 * Added "like" support for 'core show taskprocessors'. Now you
   can specify a specific set of taskprocessors (or just one) by
   adding the keyword "like" to the above command, followed by
   your search criteria.

------------------------------------------------------------------------------
--- New functionality introduced in Asterisk 17.0.0 --------------------------
------------------------------------------------------------------------------

Bridging
------------------
 * The bridging core no longer uses the stasis cache for bridge
   snapshots.  The latest bridge snapshot is now stored on the
   ast_bridge structure itself.

   The following APIs are no longer available since the stasis cache
   is no longer used:
     ast_bridge_topic_cached()
     ast_bridge_topic_all_cached()

   A topic pool is now used for individual bridge topics.

   The ast_bridge_cache() function was removed since there's no
   longer a separate container of snapshots.

   A new function "ast_bridges()" was created to retrieve the
   container of all bridges.  Users formerly calling
   ast_bridge_cache() can use the new function to iterate over
   bridges and retrieve the latest snapshot directly from the
   bridge.

   The ast_bridge_snapshot_get_latest() function was renamed to
   ast_bridge_get_snapshot_by_uniqueid().

   A new function "ast_bridge_get_snapshot()" was created to retrieve
   the bridge snapshot directly from the bridge structure.

   The ast_bridge_topic_all() function now returns a normal topic
   not a cached one so you can't use stasis cache functions on it
   either.

   The ast_bridge_snapshot_type() stasis message now has the
   ast_bridge_snapshot_update structure as it's data.  It contains
   the last snapshot and the new one.

Channels
------------------
 * The core no longer uses the stasis cache for channels snapshots.
   The following APIs are no longer available:
       ast_channel_topic_cached()
       ast_channel_topic_all_cached()
   The ast_channel_cache_all() and ast_channel_cache_by_name() functions
   now returns an ao2_container of ast_channel_snapshots rather than a
   container of stasis_messages therefore you can't call stasis_cache
   functions on it.
   The ast_channel_topic_all() function now returns a normal topic,
   not a cached one so you can't use stasis cache functions on it either.
   The ast_channel_snapshot_type() stasis message now has the
   ast_channel_snapshot_update structure as it's data.
   ast_channel_snapshot_get_latest() still returns the latest snapshot.

chan_sip
------------------
 * The chan_sip module is now deprecated, users should migrate to the
   replacement module chan_pjsip.  See guides at the Asterisk Wiki:
     https://wiki.asterisk.org/wiki/x/tAHOAQ
     https://wiki.asterisk.org/wiki/x/hYCLAQ

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 16.0.0 to Asterisk 17.0.0 ------------
------------------------------------------------------------------------------

AttendedTransfer
------------------
 * A new application, this will queue up attended transfer to the given extension.

BlindTransfer
------------------
 * A new application, this will redirect all channels currently
   bridged to the caller channel to the specified destination.

ConfBridge
------------------
 * Add "average_all", "highest_all", and "lowest_all" values for
   the remb_behavior option. These values operate on a bridge
   level instead of a per-source level. This means that a single
   REMB value is calculated and sent to every sender, instead of
   a REMB value that is unique for the specific sender..

Dial
------------------
 * Add RINGTIME and RINGTIME_MS variables containing respectively seconds and
   milliseconds between creation of the dialing channel and receiving the first
   RINGING signal

   Add PROGRESSTIME and PROGRESSTIME_MS variables analogous to the above with respect to
   the PROGRESS signal. Shorter of these two times should be equivalent to
   the PDD (Post Dial Delay) value

   Add DIALEDTIME_MS and ANSWEREDTIME_MS variables to get millisecond resolution
   versions of DIALEDTIME and ANSWEREDTIME

RTP/ICE
------------------
 * You can now indicate that you'd like an ice_host_candidate's local address
   to be published as well as the mapped address.  See the sample rtp.conf
   for more information.

ReadExten
------------------
 * Add 'p' option to stop reading extension if user presses '#' key.

pbx_dundi
------------------
 * The DUNDi PBX module now supports IPv4/IPv6 dual binding.

res_pjsip
------------------
 * Added a new PJSIP global setting called norefersub.
   Default is true to keep support working as before.

   res_pjsip_refer configures PJSIP norefersub capability accordingly.

   Checks the PJSIP global setting value.
   If it is true (default) it adds the norefersub capability to PJSIP.
   If it is false (disabled) it does not add the norefersub capability
   to PJSIP.

   This is useful for Cisco switches that do not follow RFC4488.

res_rtp_asterisk
------------------
 * DTLS packets will now be fragmented according to the MTU as set in rtp.conf. This
   allows larger certificates to be used for the DTLS negotiation. By default this value
   is 1200.

Kevin Harwell's avatar
Kevin Harwell committed
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 16.2.0 to Asterisk 16.3.0 ----------
------------------------------------------------------------------------------

ARI
------------------
 * Application event filtering is now supported. An application can now specify
   an "allowed" and/or "disallowed" list(s) of event types. Only those types
   indicated in the "allowed" list are sent to the application. Conversely, any
   types defined in the "disallowed" list are not sent to the application. Note
   that if a type is specified in both lists "disallowed" takes precedence.

 * A new REST API call has been added: 'move'. It follows the format
   'channels/{channelId}/move' and can be used to move channels from one application
   to another without needing to exit back into the dialplan. An application must be
   specified, but the passing a list of arguments to the new application is optional.
   An example call would look like this:

   client.channels.move(channelId=chan.id, app='ari-example', appArgs='a,b,c')

   If the channel was inside of a bridge when switching applications, it will
   remain there. If the application specified cannot be moved to, then the channel
   will remain in the current application and an event will be triggered named
   "ApplicationMoveFailed", which will provide the destination application's name
   and the channel information.

res_pjsip
------------------
 * A new configuration parameter "taskprocessor_overload_trigger" has been
   added to the pjsip.conf "globals" section.  The distributor currently stops
   accepting new requests when any taskprocessor overload is triggered.  The
   new option allows you to completely disable overload detection (NOT
   RECOMMENDED), keep the current behavior, or trigger only on pjsip
   taskprocessor overloads.

chan_pjsip
------------------
 * A new configuration parameter 'ignore_183_without_sdp' has been added
   to the pjsip.conf "endpoints" section.  If enabled, will make chan_pjsip
   discard 183s that do not contain an SDP body, which can resolve no
   ringback tone issues as well as making the behavior match chan_sip.

MWI
------------------
 * A new module "res_mwi_devstate" has been added that allows subscriptions
   to voicemail boxes using "presence" events.  This allows common BLF keys
   to act as voicemail waiting indicators.

app_queue
------------------
 * Added the ability to set the wrapuptime per-member using the AddQueueMember
   application.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 16.1.0 to Asterisk 16.2.0 ------------
------------------------------------------------------------------------------

ARI
------------------
 * Whenever an ARI application is started, a context will be created for it
   automatically as long as one does not already exist, following the format
   'stasis-<app_name>'. Two extensions are also added to this context: a match-all
   extension, and the 'h' extension. Any phone that registers under this context
   will place all calls to the corresponding Stasis application.

res_pjsip
------------------
 * Added "send_contact_status_on_update_registration" global configuration option
   to enable sending AMI ContactStatus event when a device refreshes its registration.

Core
------------------
 * Reworked the media indexer so it doesn't cache the index.  Testing revealed
   that the cache added no benefit but that it could consume excessive memory.
   Two new index related functions were created: ast_sounds_get_index_for_file()
   and ast_media_index_update_for_file() which restrict index updating to
   specific sound files.  The original ast_sounds_get_index() and
   ast_media_index_update() calls are still available but since they no longer
   cache the results internally, developers should re-use an index they may
   already have instead of calling ast_sounds_get_index() repeatedly.  If
   information for only a single file is needed, ast_sounds_get_index_for_file()
   should be called instead of ast_sounds_get_index().

Features
------------------
 * Before Asterisk 12, when using the automon or automixmon features defined
   in features.conf, a channel variable (TOUCH_MIXMONITOR_OUTPUT) was set on
   both channels, indicating the filename of the recording.

   When bridging was overhauled in Asterisk 12, the behavior was changed such
   that the variable was only set on the peer channel and not on the channel
   that initiated the automon or automixmon.

   The previous behavior has been restored so both channels receive the
   channel variable when one of these features is invoked.

app_voicemail
------------------
 * You can now specify a special context with the "aliasescontext" parameter
   in voicemail.conf which will allow you to create aliases for physical
   mailboxes.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 16.0.0 to Asterisk 16.1.0 ------------
------------------------------------------------------------------------------

pbx_config
------------------
 * pbx_config will now find and process multiple 'globals' sections from
   extensions.conf.  Variables are processed in the order they are found
   and duplicate variables overwrite the previous value.

chan_pjsip
------------------
 * New dialplan function PJSIP_PARSE_URI added to parse an URI and return
   a specified part of the URI.

Core
------------------
 * ast_bt_get_symbols() now returns a vector of strings instead of an
   array of strings.  This must be freed with ast_bt_free_symbols.

res_pjsip
------------------
 * New options 'trust_connected_line' and 'send_connected_line' have been
   added to the endpoint. The option 'trust_connected_line' is to control
   if connected line updates are accepted from this endpoint.
   The option 'send_connected_line' is to control if connected line updates
   can be sent to this endpoint.
   The default value is 'yes' for both options.

res_rtp_asterisk
------------------
 * The existing strictrtp option in rtp.conf has a new choice availabe, called
   'seqno', which behaves the same way as setting strictrtp to 'yes', but will
   ignore the time interval during learning so that bursts of packets can still
   trigger learning our source.

------------------------------------------------------------------------------
--- Functionality changes from Asterisk 15 to Asterisk 16 --------------------
------------------------------------------------------------------------------

app_fax
------------------
 * The app_fax module is now deprecated, users should migrate to the
   replacement module res_fax.

app_originate
------------------
 * An 'a' option has been added to the Originate dialplan application which
   will execute the originate in an asynchronous fashion. If set then the
   application will return immediately without waiting for the originated
   channel to answer.

Build System
------------------
 * MALLOC_DEBUG no longer has an effect on Asterisk's ABI.  Asterisk built
   with MALLOC_DEBUG can now successfully load binary modules built without
   MALLOC_DEBUG and vice versa.  Third-party pre-compiled modules no longer
   need to have a special build with it enabled.

 * Asterisk now depends on libjansson >= 2.11.  If this version is not
   available on your distro you can use `./configure --with-jansson-bundled`.

Corey Farrell's avatar
Corey Farrell committed
app_macro
------------------
 * The app_macro module is now deprecated and by default it is no longer
   built.  Users should migrate to app_stack (Gosub).  A warning is logged
   the first time any Macro is used.

app_setcallerid
------------------
 * The app_setcallerid module has been removed. The CALLERID dialplan function
   should be used instead.

chan_sip
------------------
 * New function SIP_HEADERS() enumerates all headers in the incoming INVITE.

 * The variable GET_TRANSFERRER_DATA set in the peer channel causes matching
   headers be retrieved from the REFER message and made accessible to the
   dialplan in the hash TRANSFER_DATA.

chan_dahdi
------------------
 * Timeouts for reading digits from analog phones are now configurable in
   chan_dahdi.conf: firstdigit_timeout, interdigit_timeout, matchdigit_timeout.

AMI
------------------
 * The ContactStatus and Status fields for the manager events ContactStatus
   and ContactStatusDetail are now set to "NonQualified" when a contact exists
   but has not been qualified.

 * The "Newexten" event is now part of the "dialplan" class. The documentation
   for Asterisk 15 already specified this, but the implementation was actually
   using the "call" class instead.

ARI
------------------
 * The ContactInfo event's contact_status field is now set to "NonQualified"
   when a contact exists but has not been qualified.

app_queue
------------------
 * Added the ability to set the wrapuptime in the configuration of member.