Skip to content
Snippets Groups Projects
CHANGES 368 KiB
Newer Older
  • Learn to ignore specific revisions
  • ==============================================================================
    
    === 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 19.0.0 to Asterisk 20.0.0 ------------
    ------------------------------------------------------------------------------
    
    
    New EXPORT function
    ------------------
     * A new function, EXPORT, allows writing variables
       and functions on other channels, the complement
       of the IMPORT function.
    
    app_amd
    ------------------
     * An audio file to play during AMD processing can
       now be specified to the AMD application or configured
       in the amd.conf configuration file.
    
    app_bridgewait
    ------------------
     * Adds the n option to not answer the channel when
       the BridgeWait application is called.
    
    features
    ------------------
     * The Bridge application now has the n "no answer" option
       that can be used to prevent the channel from being
       automatically answered prior to bridging.
    
    func_strings
    ------------------
     * Three new functions, TRIM, LTRIM, and RTRIM, are
       now available for trimming leading and trailing
       whitespace.
    
    res_pjsip
    ------------------
     * A new option named "peer_supported" has been added to the endpoint option
       100rel. When set to this option, Asterisk sends provisional responses
       reliably if the peer supports it. If the peer does not support reliable
       provisional responses, Asterisk sends them normally.
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 19.0.0 to Asterisk 20.0.0 ------------
    ------------------------------------------------------------------------------
    
    
    Transfer feature
    ------------------
     * The following capabilities have been added to the
       transfer feature:
    
       - The transfer initiation announcement prompt can
       now be customized in features.conf.
    
       - The TRANSFER_EXTEN variable now can be set on the
       transferer's channel in order to allow the transfer
       function to automatically attempt to go to the extension
       contained in this variable, if it exists. The transfer
       context behavior is not changed (TRANSFER_CONTEXT is used
       if it exists; otherwise the default context is used).
    
    app_confbridge
    ------------------
     * Adds the end_marked_any option which can be used
       to kick users from a conference after any
       marked user leaves (including marked users).
    
    db
    ------------------
     * The DBPrefixGet AMI action now allows retrieving
       all of the DB keys beginning with a particular
       prefix.
    
    locks
    ------------------
     * A new AMI event, DeadlockStart, is now available
       when Asterisk is compiled with DETECT_DEADLOCKS,
       and can indicate that a deadlock has occured.
    
    res_geolocation
    ------------------
     * * Added processing for the 'confidence' element.
       * Added documentation to some APIs.
       * removed a lot of complex code related to the very-off-nominal
         case of needing to process multiple location info sources.
       * Create a new 'ast_geoloc_eprofile_to_pidf' API that just takes
         one eprofile instead of a datastore of multiples.
       * Plugged a huge leak in XML processing that arose from
         insufficient documentation by the libxml/libxslt authors.
       * Refactored stylesheets to be more efficient.
       * Renamed 'profile_action' to 'profile_precedence' to better
         reflect it's purpose.
       * Added the config option for 'allow_routing_use' which
         sets the value of the 'Geolocation-Routing' header.
       * Removed the GeolocProfileCreate and GeolocProfileDelete
         dialplan apps.
       * Changed the GEOLOC_PROFILE dialplan function as follows:
         * Removed the 'profile' argument.
         * Automatically create a profile if it doesn't exist.
         * Delete a profile if 'inheritable' is set to no.
       * Fixed various bugs and leaks
       * Updated Asterisk WiKi documentation.
    
       Added 4 built-in profiles:
         "<prefer_config>"
         "<discard_config>"
         "<prefer_incoming>"
         "<discard_incoming>"
       The profiles are empty except for having their precedence
       set.
    
       Added profile parameter "suppress_empty_ca_elements" that
       will cause Civic Address elements that are empty to be
       suppressed from the outgoing PIDF-LO document.
    
       You can now specify the location object's format, location_info,
       method, location_source and confidence parameters directly on
       a profile object for simple scenarios where the location
       information isn't common with any other profiles.  This is
       mutually exclusive with setting location_reference on the
       profile.
    
       Added an 'a' option to the GEOLOC_PROFILE function to allow
       variable lists like location_info_refinement to be appended
       to instead of replacing the entire list.
    
       Added an 'r' option to the GEOLOC_PROFILE function to resolve all
       variables before a read operation and after a Set operation.
    
    res_musiconhold_answeredonly
    ------------------
     * This change adds an option, answeredonly, that will prevent music
       on hold on channels that are not answered.
    
    res_pjsip
    ------------------
     * TLS transports in res_pjsip can now reload their TLS certificate
       and private key files, provided the filename of them has not
       changed.
    
    
    153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 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
    Applications
    ------------------
     * added support for Danish syntax, playing the correct plural sound file
       dependen on where you have 1 or multipe messages
       based on the existing SE/NO code
    
     * added that we set DIALEDPEERNUMBER on the outgoing channels
       so it is avalible in b(content^extension^line)
       this add the same behaviour as Dial
    
    Channel-agnostic MF support
    ------------------
     * A SendMF application and PlayMF manager
       application are now included to send
       arbitrary standard R1 MF tones on the
       current channel or another specified channel.
    
    Core
    ------------------
     * Bundled PJProject Build
    
       The build process has been updated to make pjproject troubleshooting
       and development easier. See third-party/pjproject/README-hacking.md or
       https://wiki.asterisk.org/wiki/display/AST/Bundled+PJProject
       for more info.
    
    Handle non-standard Meter metric type safely
    ------------------
     * A meter_support flag has been introduced that defaults to true to maintain current behaviour.
       If disabled, a counter metric type will be used instead wherever a meter metric type was used,
       the counter will have a "_meter" suffix appended to the metric name.
    
    MessageSend
    ------------------
     * The MessageSend AMI action has been updated to allow the Destination
       and the To addresses to be provided separately. This brings the
       MessageSend manager command in line with the capabilities of the
       MessageSend dialplan application.
    
    ToneScan application
    ------------------
     * A new application, ToneScan, allows for
       synchronous detection of call progress
       signals such as dial tone, busy tone,
       Special Information Tones, and modems.
    
    ami
    ------------------
     * An AMI event now exists for "Wink".
    
     * AMI events can now be globally disabled using
       the disabledevents [general] setting.
    
    app_confbridge
    ------------------
     * Added the hear_own_join_sound option to the confbridge user profile to
       control who hears the sound_join audio file. When set to 'yes' the user
       entering the conference and the participants already in the conference
       will hear the sound_join audio file. When set to 'no' the user entering
       the conference will not hear the sound_join audio file, but the
       participants already in the conference will hear the sound_join audio file.
    
     * Adds the CONFBRIDGE_CHANNELS function which can
       be used to retrieve a list of channels in a ConfBridge,
       optionally filtered by a particular category. This
       list can then be used with functions like SHIFT, POP,
       UNSHIFT, etc.
    
    app_dtmfstore
    ------------------
     * New application which collects digits
       dialed and stores them into
       a specified variable.
    
    app_mf
    ------------------
     * Adds MF receiver and sender applications to support
       the R1 MF signaling protocol, including integration
       with the Dial application.
    
     * Adds an option to ReceiveMF to cap the
       number of digits read at a user-specified
       maximum.
    
    app_milliwatt
    ------------------
     * The Milliwatt application's existing behavior is
       incorrect in that it plays a constant tone, which
       is not how digital milliwatt test lines actually
       work.
    
       An option is added so that a proper milliwatt test
       tone can be provided, including a 1 second silent
       interval every 10 seconds. However, for compatability
       reasons, the default behavior remains unchanged.
    
    app_morsecode
    ------------------
     * Extends the Morsecode application by adding support for
       American Morse code and adds a configurable option
       for the frequency used in off intervals.
    
    app_originate
    ------------------
     * Codecs can now be specified for dialplan-originated
       calls, as with call files and the manager action.
       By default, only the slin codec is now used, instead
       of all the slin* codecs.
    
    app_playback
    ------------------
     * A new option 'mix' is added to the Playback application that 
       will play by filename and say.conf. It will look on the format of the 
       name, if it is like say format it will play with say.conf if not it 
       will play the file name.
    
    app_queue
    ------------------
     * Reload behavior in app_queue has been changed so
       queue and agent stats are not reset during full
       app_queue module reloads. The queue reset stats
       CLI command may still be used to reset stats while
       Asterisk is running.
    
     * Add field to save the time value when a member enter a queue.
       Shows this time in seconds using 'queue show' command and the
       field LoginTime for responses for AMI the events.
    
       The output for the CLI command `queue show` is changed by added a
       extra data field for the information of the time login time for each
       member.
    
     * added that we set DIALEDPEERNUMBER on the outgoing channels
       so it is avalible in b(content^extension^line)
       this add the same behaviour as Dial
    
     * Load queues and members from Realtime for
       AMI actions: QueuePause, QueueStatus and QueueSummary,
       Applications: PauseQueueMember and UnpauseQueueMember.
    
     * Added a new AMI action: QueueWithdrawCaller
       This AMI action makes it possible to withdraw a caller from a queue
       back to the dialplan. The call will be signaled to leave the queue
       whenever it can, hence, it not guaranteed that the call will leave
       the queue.
    
       Optional custom data can be passed in the request, in the WithdrawInfo
       parameter. If the call successfully withdrawn the queue,
       it can be retrieved using the QUEUE_WITHDRAW_INFO variable.
    
       This can be useful for certain uses, such as dispatching the call
       to a specific extension.
    
     * The m option now allows an override music on hold
       class to be specified for the Queue application
       within the dialplan.
    
    app_queue.c
    ------------------
     * Allow multiple files to be streamed for agent announcement.
    
    app_queues
    ------------------
     * adding support for playing the correct en/et for nordic languages
    
     * Don't play sound_thanks if there is no leading hold_time message
       When the only announcement is hold time, and there is no hold time (0 min, 0 sec), asterisk will say "thank you for your patience"
    
    app_read
    ------------------
     * A new option allows the digit '#' to be read literally,
       rather than used exclusively as the input terminator
       character.
    
    app_sendtext
    ------------------
     * A ReceiveText application has been added that can be
       used in conjunction with the SendText application.
    
    app_voicemail
    ------------------
     * Add a new 'S' option to VoiceMail which prevents the instructions
       (vm-intro) from being played if a busy/unavailable/temporary greeting
       from the voicemail user is played. This is similar to the existing 's'
       option except that instructions will still be played if no user
       greeting is available.
    
     * added support for Danish syntax, playing the correct plural sound file
       dependen on where you have 1 or multipe messages
       based on the existing SE/NO code
    
     * The r option has been added, which prevents deletion
       of messages from VoiceMailMain, which can be
       useful for shared mailboxes.
    
    apps
    ------------------
     * A new option 'mix' is added to the Playback application that 
       will play by filename and say.conf. It will look on the format of the 
       name, if it is like say format it will play with say.conf if not it 
       will play the file name.
    
    ari
    ------------------
     * Expose channel driver's unique id (which is the Call-ID for SIP/PJSIP)
       to ARI channel resources as 'protocol_id'.
    
       ASTERISK-30027
    
    ast_coredumper
    ------------------
     * New options:
        --pid=<asterisk_pid>
          Allows specification of an Asterisk instance when trying to
          and the script can't determine it itself.
        --libdir=<system library directory>
          Allows specification of a non-standard installation directory
          containing the Asterisk modules.
        --(no-)rename
          Renames the coredump and the output files with readable
          timestamps. This is the default.
       Removed unneeded or confusing options:
        --append-coredumps
        --conffile
        --no-default-search
        --tarball-uniqueid
       Changed Variables:
        COREDUMPS is now just "/tmp/core!(*.txt)"
        DATEFORMAT is renamed to DATEOPTS and defaults to '-u +%FT%H-%M-%SZ'
       Changed behavior:
        If you use 'running' or 'RUNNING' you no longer need to specify
        '--no-default-search' to ignore existing coredumps.
    
    cdr
    ------------------
     * A new CDR option, channeldefaultenabled, allows controlling
       whether CDR is enabled or disabled by default on
       newly created channels. The default behavior remains
       unchanged from previous versions of Asterisk (new
       channels will have CDR enabled, as long as CDR is
       enabled globally).
    
    chan_dahdi
    ------------------
     * Previously, cadences were appended on dahdi restart,
       rather than reloaded. This prevented cadences from
       being updated and maxed out the available cadences
       if reloaded multiple times. This behavior is fixed
       so that reloading cadences is idempotent and cadences
       can actually be reloaded.
    
     * A POLARITY function is now available that allows
       getting or setting the polarity on a channel
       from the dialplan.
    
    chan_iax2
    ------------------
     * ANI2 (OLI) is now transmitted over IAX2 calls
       as an information element.
    
     * Both a secret and an outkey may be specified at dial time,
       since encryption is possible with RSA authentication.
    
    chan_pjsip
    ------------------
     * Add function PJSIP_HEADERS() to get list of headers by pattern in the same way as SIP_HEADERS() do.
    
       Add ability to read header by pattern using PJSIP_HEADER().
    
     * added global config option "allow_sending_180_after_183"
    
       Allow Asterisk to send 180 Ringing to an endpoint
       after 183 Session Progress has been send.
       If disabled Asterisk will instead send only a
       183 Session Progress to the endpoint.
    
     * Hook flash events can now be sent on a PJSIP channel
       if requested to do so.
    
    chan_sip
    ------------------
     * Session timers get removed on UPDATE
       Fix if Asterisk receives a SIP REFER with Session-Timers UAC
       that Asterisk maintains Session-Timers when sending UPDATE request
    
    chan_sip.c
    ------------------
     * resolve issue with pickup on device that uses "183" and not "180"
    
    channel_internal_api
    ------------------
     * CHANNEL(lastcontext) and CHANNEL(lastexten)
       are now available for use in the dialplan.
    
    cli
    ------------------
     * The "module refresh" command has been added,
       which allows unloading and then loading a
       module with a single command.
    
     * A new CLI command 'dialplan eval function' has been
       added which allows users to test the behavior of
       dialplan function calls directly from the CLI.
    
    func_channel
    ------------------
     * Adds the CHANNEL_EXISTS function to check for the existence
       of a channel by name or unique ID.
    
    func_db
    ------------------
     * The function DB_KEYCOUNT has been added, which
       returns the cardinality of the keys at a specified
       prefix in AstDB, i.e. the number of keys at a
       given prefix.
    
    func_env.c
    ------------------
     * Two new functions, DIRNAME and BASENAME, are now
       included which allow users to obtain the directory
       or the base filename of any file.
    
    func_evalexten
    ------------------
     * This adds the EVAL_EXTEN function which may be
       used to evaluate data at dialplan extensions.
    
    func_framedrop
    ------------------
     * New function to selectively drop specified frames
       in either direction on a channel.
    
    func_json
    ------------------
     * The JSON_DECODE dialplan function can now be used
       to parse JSON strings, such as in conjunction with
       CURL for using API responses.
    
    func_odbc
    ------------------
     * A SQL_ESC_BACKSLASHES dialplan function has been added which
       escapes backslashes. Usage of this is dependent on whether the
       database in use can use backslashes to escape ticks or not. If
       it can, then usage of this prevents a broken SQL query depending
       on how the SQL query is constructed.
    
    func_scramble
    ------------------
     * Adds an audio scrambler function that may be used to
       distort voice audio on a channel as a privacy
       enhancement.
    
    func_strings
    ------------------
     * A new STRBETWEEN function is now included which
       allows a substring to be inserted between characters
       in a string. This is particularly useful for transforming
       dial strings, such as adding pauses between digits
       for a string of digits that are sent to another channel.
    
    func_vmcount
    ------------------
     * Multiple mailboxes may now be specified instead of just one.
    
    logger
    ------------------
     * Added the ability to define custom log levels in logger.conf
       and use them in the Log dialplan application. Also adds a
       logger show levels CLI command.
    
    res_agi
    ------------------
     * Agi command 'exec' can now be enabled
       to evaluate dialplan functions and variables
       by setting the variable AGIEXECFULL to yes.
    
    res_cliexec
    ------------------
     * A new CLI command, dialplan exec application, has
       been added which allows dialplan applications to be
       executed at the CLI, useful for some quick testing
       without needing to write dialplan.
    
    res_fax_spandsp
    ------------------
     * Adds support for spandsp 3.0.0.
    
    res_geolocation
    ------------------
     * Added res_geolocation which creates the core capabilities
       to manipulate Geolocation information on SIP INVITEs.
    
    res_parking
    ------------------
     * An m option to Park and ParkAndAnnounce now allows
       specifying a music on hold class override.
    
    res_pjproject
    ------------------
     * In pjproject.conf you can now map pjproject log levels
       to the Asterisk TRACE log level.  The default mappings
       have therefore changed so that only pjproject levels
       3 and 4 are mapped to DEBUG and 5 and 6 are now mapped
       to TRACE.  Previously 3, 4, 5, and 6 were all mapped to
       DEBUG.
    
    res_pjsip
    ------------------
     * A new transport option 'allow_wildcard_certs' has been added that when it
       and 'verify_server' are both set to 'yes', enables verification against
       wildcards, i.e. '*.' in certs for common, and subject alt names of type DNS
       for TLS transport types. Names must start with the wildcard. Partial wildcards,
       e.g. 'f*.example.com' and 'foo.*.com' are not allowed. As well, names only
       match against a single level meaning '*.example.com' matches 'foo.example.com',
       but not 'foo.bar.example.com'.
    
    res_pjsip_geolocation
    ------------------
     * Added res_pjsip_geolocation which gives chan_pjsip
       the ability to use the core geolocation capabilities.
    
    res_pjsip_header_funcs
    ------------------
     * Add function PJSIP_RESPONSE_HEADERS() to get list of header names from 200 response, in the same way as PJSIP_HEADERS() from the request.
    
       Add function PJSIP_RESPONSE_HEADER() to read header from 200 response, in the same way as PJSIP_HEADER() from the request.
    
    res_pjsip_pubsub
    ------------------
     * A new resource_list option, resource_display_name, indicates
       whether display name of resource or the resource name being
       provided for RLS entries.
       If this option is enabled, the Display Name will be provided.
       This option is disabled by default to remain the previous behavior.
       If the 'event' set to 'presence' or 'dialog' the non-empty HINT name
       will be set as the Display Name.
       The 'message-summary' is not supported yet.
    
     * The Resource List Subscriptions (RLS) is dynamic now.
       The asterisk now updates current subscriptions to reflect the changes
       to the list on subscription refresh. If list items are added,
       removed, updated or do not exist anymore, the asterisk regenerates
       the resource list.
    
    res_pjsip_registrar
    ------------------
     * Adds new PJSIP AOR option remove_unavailable to either
       remove unavailable contacts when a REGISTER exceeds
       max_contacts when remove_existing is disabled, or
       prioritize unavailable contacts over other existing
       contacts when remove_existing is enabled.
    
    res_pjsip_t38
    ------------------
     * In res_pjsip_sdp_rtp, the bind_rtp_to_media_address option and the
       fallback use of the transport's bind address solve problems sending
       media on systems that cannot send ipv4 packets on ipv6 sockets, and
       certain other situations. This change extends both of these behaviors
       to UDPTL sessions as well in res_pjsip_t38, to fix fax-specific
       problems on these systems, introducing a new option
       endpoint/t38_bind_udptl_to_media_address.
    
    res_rtp_asterisk
    ------------------
     * When the address of the STUN server (stunaddr) is a name resolved via DNS, the
       stunaddr will be recurringly resolved when the DNS answer Time-To-Live (TTL)
       expires. This allows the STUN server to change its IP address without having to
       reload the res_rtp_asterisk module.
    
    res_tonedetect
    ------------------
     * Arbitrary tone detection is now available through a
       WaitForTone application (blocking) and a TONE_DETECT
       function (non-blocking).
    
    say.c
    ------------------
     * Adds SAYFILES function to retrieve the file names that would
       be played by corresponding Say applications, such as
       SayDigits, SayAlpha, etc.
    
       Additionally adds SayMoney and SayOrdinal applications.
    
    stasis_channels
    ------------------
     * Expose channel driver's unique id (which is the Call-ID for SIP/PJSIP)
       to ARI channel resources as 'protocol_id'.
    
       ASTERISK-30027
    
    
    ------------------------------------------------------------------------------
    --- Functionality changes from Asterisk 18.0.0 to Asterisk 19.0.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.
    
    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.
    
     * 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.
    
       The default location for astcachedir is now /var/cache/asterisk
       instead of /tmp, please make sure to manually cleanup and/or
       migrate the temporary files in /tmp after upgrading.
    
    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.
    
    New Reload application
    ------------------
     * Adds an application to reload modules
    
    PlaybackFinished has a new error state
    ------------------
     * The PlaybackFinished event now has a new state "failed"
       that is used when the sound file was not played due to an error.
       Before the state on PlaybackFinished was always "done".
    
       In case of multiple sound files to be played,
       the PlaybackFinished is sent only once in the end of the list,
       even in case of error.
    
    WaitForCondition application
    ------------------
     * This application provides a way to halt
       dialplan execution until a provided
       condition evaluates to true.
    
    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".
    
    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_dial announcement option
    ------------------
     * The A option for Dial now supports
       playing audio to the caller as well
       as the called party.
    
    app_mixmonitor
    ------------------
     * app_mixmonitor now sends manager events MixMonitorStart, MixMonitorStop and
       MixMonitorMute when the channel monitoring is started, stopped and muted (or
       unmuted) respectively.
    
    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.
    
     * You can now customize the "beep" tone or omit it entirely.
    
    chan_iax2
    ------------------
     * You can now specify a default "auth" method in the
       [general] section of iax.conf
    
    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.
    
    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_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_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.
    
    func_volume now can be read
    ------------------
     * The VOLUME function can now also be used
       to read existing values previously set.
    
    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
    
     * 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.'
    
     * PJSIP support of registrations of endpoints in multidomain
       scenarios, where the endpoint contains the domain info
    
    
    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.
    
    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".
    
    
    ------------------------------------------------------------------------------
    --- New functionality introduced in Asterisk 18.0.0 --------------------------
    ------------------------------------------------------------------------------
    
    Core
    ------------------
     * The Streams API becomes the home for the core ACN capabilities.
       These include...
    
    
    Josh Soref's avatar
    Josh Soref committed
        * Parsing and formatting of codec negotiation 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
    
    Josh Soref's avatar
    Josh Soref committed
          and value strings to their respective 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