Merge "loader: support for permanent dlopen()"
authorFriendly Automation <jenkins2@gerrit.asterisk.org>
Fri, 19 Apr 2019 14:06:03 +0000 (09:06 -0500)
committerGerrit Code Review <gerrit2@gerrit.digium.api>
Fri, 19 Apr 2019 14:06:03 +0000 (09:06 -0500)
68 files changed:
CHANGES
UPGRADE-1.2.txt [deleted file]
UPGRADE-1.4.txt [deleted file]
UPGRADE-1.6.txt [deleted file]
UPGRADE-1.8.txt [deleted file]
UPGRADE-10.txt [deleted file]
UPGRADE-11.txt [deleted file]
UPGRADE-12.txt [deleted file]
UPGRADE-13.txt [deleted file]
UPGRADE-14.txt [deleted file]
UPGRADE-15.txt [deleted file]
UPGRADE-16.txt [deleted file]
UPGRADE.txt
addons/chan_ooh323.c
addons/chan_ooh323.h
addons/ooh323c/src/ooh323ep.c
addons/ooh323c/src/ooh323ep.h
apps/app_voicemail.c
bridges/bridge_softmix.c
channels/chan_pjsip.c
channels/chan_sip.c
configs/samples/pjsip.conf.sample
contrib/ast-db-manage/config/versions/3a094a18e75b_pjsip_add_norefersub.py [new file with mode: 0644]
doc/CHANGES-staging/README.md
doc/CHANGES-staging/bridging_stasis_cache.txt [new file with mode: 0644]
doc/CHANGES-staging/chan_sip_deprecated.txt [new file with mode: 0644]
doc/CHANGES-staging/channels_stasis_cache.txt [new file with mode: 0644]
doc/CHANGES-staging/res_pjsip_add_norefersub_global_config.txt [new file with mode: 0644]
doc/UPGRADE-staging/README.md
doc/UPGRADE-staging/applications_jabberstatus.txt [new file with mode: 0644]
doc/UPGRADE-staging/bridging_stasis_cache.txt [new file with mode: 0644]
doc/UPGRADE-staging/chan_sip_deprecated.txt [new file with mode: 0644]
doc/UPGRADE-staging/channels_stasis_cache.txt [new file with mode: 0644]
doc/UPGRADE-staging/func_callerid_callerpres.txt [new file with mode: 0644]
doc/UPGRADE-staging/res_parking_parkingslot.txt [new file with mode: 0644]
doc/UPGRADE-staging/res_xmpp_jabberstatus.txt [new file with mode: 0644]
include/asterisk/json.h
include/asterisk/res_pjsip.h
include/asterisk/rtp_engine.h
include/asterisk/stasis.h
main/config.c
main/json.c
main/pbx.c
main/rtp_engine.c
main/stasis.c
main/stasis_channels.c
pbx/pbx_dundi.c
res/ael/pval.c
res/ari/ari_model_validators.c
res/ari/ari_model_validators.h
res/ari/resource_channels.c
res/ari/resource_channels.h
res/res_ari_channels.c
res/res_mwi_devstate.c
res/res_pjsip.c
res/res_pjsip/config_global.c
res/res_pjsip/pjsip_message_filter.c
res/res_pjsip_refer.c
res/res_remb_modifier.c
res/res_rtp_asterisk.c
rest-api/api-docs/channels.json
tests/CI/buildAsterisk.sh
tests/CI/gateTestGroups.json
tests/CI/gates.jenkinsfile
tests/CI/periodic-dailyTestGroups.json
tests/CI/periodics-daily.jenkinsfile
tests/test_json.c
tests/test_stasis_channels.c

diff --git a/CHANGES b/CHANGES
index 4fd7b96..b00c4b4 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,9 @@
 ==============================================================================
 ===
+=== 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
@@ -9,69 +13,6 @@
 ==============================================================================
 
 ------------------------------------------------------------------------------
---- 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.2.0 to Asterisk 16.3.0 ----------
 ------------------------------------------------------------------------------
 
diff --git a/UPGRADE-1.2.txt b/UPGRADE-1.2.txt
deleted file mode 100644 (file)
index cfbff94..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-=========================================================
-===
-=== Information for upgrading from Asterisk 1.0 to 1.2
-===
-=== This file documents all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also includes advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=========================================================
-
-Compiling:
-
-* The Asterisk 1.2 source code now uses C language features
-  supported only by 'modern' C compilers.  Generally, this means GCC
-  version 3.0 or higher, although some GCC 2.96 releases will also
-  work.  Some non-GCC compilers that support C99 and the common GCC
-  extensions (including anonymous structures and unions) will also
-  work.  All releases of GCC 2.95 do _not_ have the requisite feature
-  support; systems using that compiler will need to be upgraded to
-  a more recent compiler release.
-
-Dialplan Expressions:
-
-* The dialplan expression parser (which handles $[ ... ] constructs)
-  has gone through a major upgrade, but has one incompatible change:
-  spaces are no longer required around expression operators, including
-  string comparisons. However, you can now use quoting to keep strings
-  together for comparison. For more details, please read the
-  doc/README.variables file, and check over your dialplan for possible
-  problems.
-
-Agents:
-
-* The default for ackcall has been changed to "no" instead of "yes"
-  because of a bug which caused the "yes" behavior to generally act like
-  "no".  You may need to adjust the value if your agents behave
-  differently than you expect with respect to acknowledgement.
-
-* The AgentCallBackLogin application now requires a second '|' before
-  specifying an extension@context.  This is to distinguish the options
-  string from the extension, so that they do not conflict.  See
-  'show application AgentCallbackLogin' for more details.
-
-Parking:
-
-* Parking behavior has changed slightly; when a parked call times out,
-  Asterisk will attempt to deliver the call back to the extension that
-  parked it, rather than the 's' extension. If that extension is busy
-  or unavailable, the parked call will be lost.
-
-Dialing:
-
-* The Caller*ID of the outbound leg is now the extension that was
-  called, rather than the Caller*ID of the inbound leg of the call.  The
-  "o" flag for Dial can be used to restore the original behavior if
-  desired.  Note that if you are looking for the originating callerid
-  from the manager event, there is a new manager event "Dial" which
-  provides the source and destination channels and callerid.
-
-IAX:
-
-* The naming convention for IAX channels has changed in two ways:
-   1. The call number follows a "-" rather than a "/" character.
-   2. The name of the channel has been simplified to IAX2/peer-callno,
-   rather than IAX2/peer@peer-callno or even IAX2/peer@peer/callno.
-
-SIP:
-
-* The global option "port" in 1.0.X that is used to set which port to
-  bind to has been changed to "bindport" to be more consistent with
-  the other channel drivers and to avoid confusion with the "port"
-  option for users/peers.
-
-* The "Registry" event now uses "Username" rather than "User" for
-  consistency with IAX.
-
-Applications:
-
-* With the addition of dialplan functions (which operate similarly
-  to variables), the SetVar application has been renamed to Set.
-
-* The CallerPres application has been removed.  Use SetCallerPres
-  instead.  It accepts both numeric and symbolic names.
-
-* The applications GetGroupCount, GetGroupMatchCount, SetGroup, and
-  CheckGroup have been deprecated in favor of functions.  Here is a
-  table of their replacements:
-
-  GetGroupCount([groupname][@category]        GROUP_COUNT([groupname][@category])      Set(GROUPCOUNT=${GROUP_COUNT()})
-  GroupMatchCount(groupmatch[@category])       GROUP_MATCH_COUNT(groupmatch[@category])        Set(GROUPCOUNT=${GROUP_MATCH_COUNT(SIP/.*)})
-  SetGroup(groupname[@category])              GROUP([category])=groupname              Set(GROUP()=test)
-  CheckGroup(max[@category])                  N/A                                      GotoIf($[ ${GROUP_COUNT()} > 5 ]?103)
-
-  Note that CheckGroup does not have a direct replacement.  There is
-  also a new function called GROUP_LIST() which will return a space
-  separated list of all of the groups set on a channel.  The GROUP()
-  function can also return the name of the group set on a channel when
-  used in a read environment.
-
-* The applications DBGet and DBPut have been deprecated in favor of
-  functions.  Here is a table of their replacements:
-
-  DBGet(foo=family/key)        Set(foo=${DB(family/key)})
-  DBPut(family/key=${foo})     Set(DB(family/key)=${foo})
-
-* The application SetLanguage has been deprecated in favor of the
-  function LANGUAGE().
-
-  SetLanguage(fr)              Set(LANGUAGE()=fr)
-
-  The LANGUAGE function can also return the currently set language:
-
-  Set(MYLANG=${LANGUAGE()})
-
-* The applications AbsoluteTimeout, DigitTimeout, and ResponseTimeout
-  have been deprecated in favor of the function TIMEOUT(timeouttype):
-
-  AbsoluteTimeout(300)         Set(TIMEOUT(absolute)=300)
-  DigitTimeout(15)             Set(TIMEOUT(digit)=15)
-  ResponseTimeout(15)          Set(TIMEOUT(response)=15)
-
-  The TIMEOUT() function can also return the currently set timeouts:
-
-  Set(DTIMEOUT=${TIMEOUT(digit)})
-
-* The applications SetCIDName, SetCIDNum, and SetRDNIS have been
-  deprecated in favor of the CALLERID(datatype) function:
-
-  SetCIDName(Joe Cool)         Set(CALLERID(name)=Joe Cool)
-  SetCIDNum(2025551212)                Set(CALLERID(number)=2025551212)
-  SetRDNIS(2024561414)         Set(CALLERID(RDNIS)=2024561414)
-
-* The application Record now uses the period to separate the filename
-  from the format, rather than the colon.
-
-* The application VoiceMail now supports a 'temporary' greeting for each
-  mailbox. This greeting can be recorded by using option 4 in the
-  'mailbox options' menu, and 'change your password' option has been
-  moved to option 5.
-
-* The application VoiceMailMain now only matches the 'default' context if
-  none is specified in the arguments.  (This was the previously
-  documented behavior, however, we didn't follow that behavior.)  The old
-  behavior can be restored by setting searchcontexts=yes in voicemail.conf.
-
-Queues:
-
-* A queue is now considered empty not only if there are no members but if
-  none of the members are available (e.g. agents not logged on).  To
-  restore the original behavior, use "leavewhenempty=strict" or
-  "joinwhenempty=strict" instead of "=yes" for those options.
-
-* It is now possible to use multi-digit extensions in the exit context
-  for a queue (although you should not have overlapping extensions,
-  as there is no digit timeout). This means that the EXITWITHKEY event
-  in queue_log can now contain a key field with more than a single
-  character in it.
-
-Extensions:
-
-* By default, there is a new option called "autofallthrough" in
-  extensions.conf that is set to yes.  Asterisk 1.0 (and earlier)
-  behavior was to wait for an extension to be dialed after there were no
-  more extensions to execute.  "autofallthrough" changes this behavior
-  so that the call will immediately be terminated with BUSY,
-  CONGESTION, or HANGUP based on Asterisk's best guess.  If you are
-  writing an extension for IVR, you must use the WaitExten application
-  if "autofallthrough" is set to yes.
-
-AGI:
-
-* AGI scripts did not always get SIGHUP at the end, previously.  That
-  behavior has been fixed.  If you do not want your script to terminate
-  at the end of AGI being called (e.g. on a hangup) then set SIGHUP to
-  be ignored within your application.
-
-* CallerID is reported with agi_callerid and agi_calleridname instead
-  of a single parameter holding both.
-
-Music On Hold:
-
-* The preferred format for musiconhold.conf has changed; please see the
-  sample configuration file for the new format. The existing format
-  is still supported but will generate warnings when the module is loaded.
-
-chan_modem:
-
-* All the chan_modem channel drivers (aopen, bestdata and i4l) are deprecated
-  in this release, and will be removed in the next major Asterisk release.
-  Please migrate to chan_misdn for ISDN interfaces; there is no upgrade
-  path for aopen and bestdata modem users.
-
-MeetMe:
-
-* The conference application now allows users to increase/decrease their
-  speaking volume and listening volume (independently of each other and
-  other users); the 'admin' and 'user' menus have changed, and new sound
-  files are included with this release. However, if a user calling in
-  over a Zaptel channel that does NOT have hardware DTMF detection
-  increases their speaking volume, it is likely they will no longer be
-  able to enter/exit the menu or make any further adjustments, as the
-  software DTMF detector will not be able to recognize the DTMF coming
-  from their device.
-
-GetVar Manager Action:
-
-* Previously, the behavior of the GetVar manager action reported the value
-  of a variable in the following manner:
-   > name: value
-  This has been changed to a manner similar to the SetVar action and is now
-   > Variable: name
-   > Value: value
diff --git a/UPGRADE-1.4.txt b/UPGRADE-1.4.txt
deleted file mode 100644 (file)
index 74cb1e5..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-=========================================================
-===
-=== Information for upgrading from Asterisk 1.2 to 1.4
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also includes advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-===
-=========================================================
-
-Build Process (configure script):
-
-Asterisk now uses an autoconf-generated configuration script to learn how it
-should build itself for your system. As it is a standard script, running:
-
-$ ./configure --help
-
-will show you all the options available. This script can be used to tell the
-build process what libraries you have on your system (if it cannot find them
-automatically), which libraries you wish to have ignored even though they may
-be present, etc.
-
-You must run the configure script before Asterisk will build, although it will
-attempt to automatically run it for you with no options specified; for most
-users, that will result in a similar build to what they would have had before
-the configure script was added to the build process (except for having to run
-'make' again after the configure script is run). Note that the configure script
-does NOT need to be re-run just to rebuild Asterisk; you only need to re-run it
-when your system configuration changes or you wish to build Asterisk with
-different options.
-
-Build Process (module selection):
-
-The Asterisk source tree now includes a basic module selection and build option
-selection tool called 'menuselect'. Run 'make menuselect' to make your choices.
-In this tool, you can disable building of modules that you don't care about,
-turn on/off global options for the build and see which modules will not
-(and cannot) be built because your system does not have the required external
-dependencies installed.
-
-The resulting file from menuselect is called 'menuselect.makeopts'. Note that
-the resulting menuselect.makeopts file generally contains which modules *not*
-to build. The modules listed in this file indicate which modules have unmet
-dependencies, a present conflict, or have been disabled by the user in the
-menuselect interface. Compiler Flags can also be set in the menuselect
-interface.  In this case, the resulting file contains which CFLAGS are in use,
-not which ones are not in use.
-
-If you would like to save your choices and have them applied against all
-builds, the file can be copied to '~/.asterisk.makeopts' or
-'/etc/asterisk.makeopts'.
-
-Build Process (Makefile targets):
-
-The 'valgrind' and 'dont-optimize' targets have been removed; their functionality
-is available by enabling the DONT_OPTIMIZE setting in the 'Compiler Flags' menu
-in the menuselect tool.
-
-It is now possible to run most make targets against a single subdirectory; from
-the top level directory, for example, 'make channels' will run 'make all' in the
-'channels' subdirectory. This also is true for 'clean', 'distclean' and 'depend'.
-
-Sound (prompt) and Music On Hold files:
-
-Beginning with Asterisk 1.4, the sound files and music on hold files supplied for
-use with Asterisk have been replaced with new versions produced from high quality
-master recordings, and are available in three languages (English, French and
-Spanish) and in five formats (WAV (uncompressed), mu-Law, a-Law, GSM and G.729).
-In addition, the music on hold files provided by opsound.org Music are now available
-in the same five formats, but no longer available in MP3 format.
-
-The Asterisk 1.4 tarball packages will only include English prompts in GSM format,
-(as were supplied with previous releases) and the opsound.org MOH files in WAV format.
-All of the other variations can be installed by running 'make menuselect' and
-selecting the packages you wish to install; when you run 'make install', those
-packages will be downloaded and installed along with the standard files included
-in the tarball.
-
-If for some reason you expect to not have Internet access at the time you will be
-running 'make install', you can make your package selections using menuselect and
-then run 'make sounds' to download (only) the sound packages; this will leave the
-sound packages in the 'sounds' subdirectory to be used later during installation.
-
-WARNING: Asterisk 1.4 supports a new layout for sound files in multiple languages;
-instead of the alternate-language files being stored in subdirectories underneath
-the existing files (for French, that would be digits/fr, letters/fr, phonetic/fr,
-etc.) the new layout creates one directory under /var/lib/asterisk/sounds for the
-language itself, then places all the sound files for that language under that
-directory and its subdirectories. This is the layout that will be created if you
-select non-English languages to be installed via menuselect, HOWEVER Asterisk does
-not default to this layout and will not find the files in the places it expects them
-to be. If you wish to use this layout, make sure you put 'languageprefix=yes' in your
-/etc/asterisk/asterisk.conf file, so that Asterisk will know how the files were
-installed.
-
-PBX Core:
-
-* The (very old and undocumented) ability to use BYEXTENSION for dialing
-  instead of ${EXTEN} has been removed.
-
-* Builtin (res_features) transfer functionality attempts to use the context
-  defined in TRANSFER_CONTEXT variable of the transferer channel first. If
-  not set, it uses the transferee variable. If not set in any channel, it will
-  attempt to use the last non macro context. If not possible, it will default
-  to the current context.
-
-* The autofallthrough setting introduced in Asterisk 1.2 now defaults to 'yes';
-  if your dialplan relies on the ability to 'run off the end' of an extension
-  and wait for a new extension without using WaitExten() to accomplish that,
-  you will need set autofallthrough to 'no' in your extensions.conf file.
-
-Command Line Interface:
-
-* 'show channels concise', designed to be used by applications that will parse
-  its output, previously used ':' characters to separate fields. However, some
-  of those fields can easily contain that character, making the output not
-  parseable. The delimiter has been changed to '!'.
-
-Applications:
-
-* In previous Asterisk releases, many applications would jump to priority n+101
-  to indicate some kind of status or error condition.  This functionality was
-  marked deprecated in Asterisk 1.2.  An option to disable it was provided with
-  the default value set to 'on'.  The default value for the global priority
-  jumping option is now 'off'.
-
-* The applications Cut, Sort, DBGet, DBPut, SetCIDNum, SetCIDName, SetRDNIS,
-  AbsoluteTimeout, DigitTimeout, ResponseTimeout, SetLanguage, GetGroupCount,
-  and GetGroupMatchCount were all deprecated in version 1.2, and therefore have
-  been removed in this version.  You should use the equivalent dialplan
-  function in places where you have previously used one of these applications.
-
-* The application SetGlobalVar has been deprecated.  You should replace uses
-  of this application with the following combination of Set and GLOBAL():
-  Set(GLOBAL(name)=value).  You may also access global variables exclusively by
-  using the GLOBAL() dialplan function, instead of relying on variable
-  interpolation falling back to globals when no channel variable is set.
-
-* The application SetVar has been renamed to Set.  The syntax SetVar was marked
-  deprecated in version 1.2 and is no longer recognized in this version.  The
-  use of Set with multiple argument pairs has also been deprecated.  Please
-  separate each name/value pair into its own dialplan line.
-
-* app_read has been updated to use the newer options codes, using "skip" or
-  "noanswer" will not work.  Use s or n.  Also there is a new feature i, for
-  using indication tones, so typing in skip would give you unexpected results.
-
-* OSPAuth is added to authenticate OSP tokens in in_bound call setup messages.
-
-* The CONNECT event in the queue_log from app_queue now has a second field
-  in addition to the holdtime field. It contains the unique ID of the
-  queue member channel that is taking the call. This is useful when trying
-  to link recording filenames back to a particular call from the queue.
-
-* The old/current behavior of app_queue has a serial type behavior
-  in that the queue will make all waiting callers wait in the queue
-  even if there is more than one available member ready to take
-  calls until the head caller is connected with the member they
-  were trying to get to. The next waiting caller in line then
-  becomes the head caller, and they are then connected with the
-  next available member and all available members and waiting callers
-  waits while this happens. This cycle continues until there are
-  no more available members or waiting callers, whichever comes first.
-  The new behavior, enabled by setting autofill=yes in queues.conf
-  either at the [general] level to default for all queues or
-  to set on a per-queue level, makes sure that when the waiting
-  callers are connecting with available members in a parallel fashion
-  until there are no more available members or no more waiting callers,
-  whichever comes first. This is probably more along the lines of how
-  one would expect a queue should work and in most cases, you will want
-  to enable this new behavior. If you do not specify or comment out this
-  option, it will default to "no" to keep backward compatability with the old
-  behavior.
-
-* Queues depend on the channel driver reporting the proper state
-  for each member of the queue. To get proper signalling on
-  queue members that use the SIP channel driver, you need to
-  enable a call limit (could be set to a high value so it
-  is not put into action) and also make sure that both inbound
-  and outbound calls are accounted for.
-
-  Example:
-
-       [general]
-       limitonpeer = yes
-
-       [peername]
-       type=friend
-       call-limit=10
-
-
-* The app_queue application now has the ability to use MixMonitor to
-  record conversations queue members are having with queue callers. Please
-  see configs/queues.conf.sample for more information on this option.
-
-* The app_queue application strategy called 'roundrobin' has been deprecated
-  for this release. Users are encouraged to use 'rrmemory' instead, since it
-  provides more 'true' round-robin call delivery. For the Asterisk 1.6 release,
-  'rrmemory' will be renamed 'roundrobin'.
-
-* The app_queue application option called 'monitor-join' has been deprecated
-  for this release. Users are encouraged to use 'monitor-type=mixmonitor' instead,
-  since it provides the same functionality but is not dependent on soxmix or some
-  other external program in order to mix the audio.
-
-* app_meetme: The 'm' option (monitor) is renamed to 'l' (listen only), and
-  the 'm' option now provides the functionality of "initially muted".
-  In practice, most existing dialplans using the 'm' flag should not notice
-  any difference, unless the keypad menu is enabled, allowing the user
-  to unmute themsleves.
-
-* ast_play_and_record would attempt to cancel the recording if a DTMF
-  '0' was received.  This behavior was not documented in most of the
-  applications that used ast_play_and_record and the return codes from
-  ast_play_and_record weren't checked for properly.
-  ast_play_and_record has been changed so that '0' no longer cancels a
-  recording.  If you want to allow DTMF digits to cancel an
-  in-progress recording use ast_play_and_record_full which allows you
-  to specify which DTMF digits can be used to accept a recording and
-  which digits can be used to cancel a recording.
-
-* ast_app_messagecount has been renamed to ast_app_inboxcount.  There is now a
-  new ast_app_messagecount function which takes a single context/mailbox/folder
-  mailbox specification and returns the message count for that folder only.
-  This addresses the deficiency of not being able to count the number of
-  messages in folders other than INBOX and Old.
-
-* The exit behavior of the AGI applications has changed. Previously, when
-  a connection to an AGI server failed, the application would cause the channel
-  to immediately stop dialplan execution and hangup. Now, the only time that
-  the AGI applications will cause the channel to stop dialplan execution is
-  when the channel itself requests hangup. The AGI applications now set an
-  AGISTATUS variable which will allow you to find out whether running the AGI
-  was successful or not.
-
-  Previously, there was no way to handle the case where Asterisk was unable to
-  locally execute an AGI script for some reason. In this case, dialplan
-  execution will continue as it did before, but the AGISTATUS variable will be
-  set to "FAILURE".
-
-  A locally executed AGI script can now exit with a non-zero exit code and this
-  failure will be detected by Asterisk. If an AGI script exits with a non-zero
-  exit code, the AGISTATUS variable will be set to "FAILURE" as opposed to
-  "SUCCESS".
-
-* app_voicemail: The ODBC_STORAGE capability now requires the extended table format
-  previously used only by EXTENDED_ODBC_STORAGE. This means that you will need to update
-  your table format using the schema provided in doc/odbcstorage.txt
-
-* app_waitforsilence: Fixes have been made to this application which changes the
-  default behavior with how quickly it returns. You can maintain "old-style" behavior
-  with the addition/use of a third "timeout" parameter.
-  Please consult the application documentation and make changes to your dialplan
-  if appropriate.
-
-Manager:
-
-* After executing the 'status' manager action, the "Status" manager events
-  included the header "CallerID:" which was actually only the CallerID number,
-  and not the full CallerID string.  This header has been renamed to
-  "CallerIDNum".  For compatibility purposes, the CallerID parameter will remain
-  until after the release of 1.4, when it will be removed.  Please use the time
-  during the 1.4 release to make this transition.
-
-* The AgentConnect event now has an additional field called "BridgedChannel"
-  which contains the unique ID of the queue member channel that is taking the
-  call. This is useful when trying to link recording filenames back to
-  a particular call from the queue.
-
-* app_userevent has been modified to always send Event: UserEvent with the
-  additional header UserEvent: <userspec>.  Also, the Channel and UniqueID
-  headers are not automatically sent, unless you specify them as separate
-  arguments.  Please see the application help for the new syntax.
-
-* app_meetme: Mute and Unmute events are now reported via the Manager API.
-  Native Manager API commands MeetMeMute and MeetMeUnmute are provided, which
-  are easier to use than "Action Command:". The MeetMeStopTalking event has
-  also been deprecated in favor of the already existing MeetmeTalking event
-  with a "Status" of "on" or "off" added.
-
-* OriginateFailure and OriginateSuccess events were replaced by event
-  OriginateResponse with a header named "Response" to indicate success or
-  failure
-
-Variables:
-
-* The builtin variables ${CALLERID}, ${CALLERIDNAME}, ${CALLERIDNUM},
-  ${CALLERANI}, ${DNID}, ${RDNIS}, ${DATETIME}, ${TIMESTAMP}, ${ACCOUNTCODE},
-  and ${LANGUAGE} have all been deprecated in favor of their related dialplan
-  functions.  You are encouraged to move towards the associated dialplan
-  function, as these variables will be removed in a future release.
-
-* The CDR-CSV variables uniqueid, userfield, and basing time on GMT are now
-  adjustable from cdr.conf, instead of recompiling.
-
-* OSP applications exports several new variables, ${OSPINHANDLE},
-  ${OSPOUTHANDLE}, ${OSPINTOKEN}, ${OSPOUTTOKEN}, ${OSPCALLING},
-  ${OSPINTIMELIMIT}, and ${OSPOUTTIMELIMIT}
-
-* Builtin transfer functionality sets the variable ${TRANSFERERNAME} in the new
-  created channel. This variables holds the channel name of the transferer.
-
-* The dial plan variable PRI_CAUSE will be removed from future versions
-  of Asterisk.
-  It is replaced by adding a cause value to the hangup() application.
-
-Functions:
-
-* The function ${CHECK_MD5()} has been deprecated in favor of using an
-  expression: $[${MD5(<string>)} = ${saved_md5}].
-
-* The 'builtin' functions that used to be combined in pbx_functions.so are
-  now built as separate modules. If you are not using 'autoload=yes' in your
-  modules.conf file then you will need to explicitly load the modules that
-  contain the functions you want to use.
-
-* The ENUMLOOKUP() function with the 'c' option (for counting the number of
-  records), but the lookup fails to match any records, the returned value will
-  now be "0" instead of blank.
-
-* The REALTIME() function is now available in version 1.4 and app_realtime has
-  been deprecated in favor of the new function. app_realtime will be removed
-  completely with the version 1.6 release so please take the time between
-  releases to make any necessary changes
-
-* The QUEUEAGENTCOUNT() function has been deprecated in favor of
-  QUEUE_MEMBER_COUNT().
-
-The IAX2 channel:
-
-* It is possible that previous configurations depended on the order in which
-  peers and users were specified in iax.conf for forcing the order in which
-  chan_iax2 matched against them.  This behavior is going away and is considered
-  deprecated in this version.  Avoid having ambiguous peer and user entries and
-  to make things easy on yourself, always set the "username" option for users
-  so that the remote end can match on that exactly instead of trying to infer
-  which user you want based on host.
-
-  If you would like to go ahead and use the new behavior which doesn't use the
-  order in the config file to influence matching order, then change the
-  MAX_PEER_BUCKETS define in chan_iax2.c to a value greater than one.  An
-  example is provided there.  By changing this, you will get *much* better
-  performance on systems that do a lot of peer and user lookups as they will be
-  stored in memory in a much more efficient manner.
-
-* The "mailboxdetail" option has been deprecated.  Previously, if this option
-  was not enabled, the 2 byte MSGCOUNT information element would be set to all
-  1's to indicate there there is some number of messages waiting.  With this
-  option enabled, the number of new messages were placed in one byte and the
-  number of old messages are placed in the other.  This is now the default
-  (and the only) behavior.
-
-The SIP channel:
-
-* The "incominglimit" setting is replaced by the "call-limit" setting in
-  sip.conf.
-
-* OSP support code is removed from SIP channel to OSP applications. ospauth
-  option in sip.conf is removed to osp.conf as authpolicy. allowguest option
-  in sip.conf cannot be set as osp anymore.
-
-* The Asterisk RTP stack has been changed in regards to RFC2833 reception
-  and transmission. Packets will now be sent with proper duration instead of all
-  at once. If you are receiving calls from a pre-1.4 Asterisk installation you
-  will want to turn on the rfc2833compensate option. Without this option your
-  DTMF reception may act poorly.
-
-* The $SIPUSERAGENT dialplan variable is deprecated and will be removed
-  in coming versions of Asterisk. Please use the dialplan function
-  SIPCHANINFO(useragent) instead.
-
-* The ALERT_INFO dialplan variable is deprecated and will be removed
-  in coming versions of Asterisk. Please use the dialplan application
-  sipaddheader() to add the "Alert-Info" header to the outbound invite.
-
-* The "canreinvite" option has changed. canreinvite=yes used to disable
-  re-invites if you had NAT=yes. In 1.4, you need to set canreinvite=nonat
-  to disable re-invites when NAT=yes. This is propably what you want.
-  The settings are now: "yes", "no", "nonat", "update". Please consult
-  sip.conf.sample for detailed information.
-
-The Zap channel:
-
-* Support for MFC/R2 has been removed, as it has not been functional for some
-  time and it has no maintainer.
-
-The Agent channel:
-
-* Callback mode (AgentCallbackLogin) is now deprecated, since the entire function
-  it provided can be done using dialplan logic, without requiring additional
-  channel and module locks (which frequently caused deadlocks). An example of
-  how to do this using AEL dialplan is in doc/queues-with-callback-members.txt.
-
-The G726-32 codec:
-
-* It has been determined that previous versions of Asterisk used the wrong codeword
-  packing order for G726-32 data. This version supports both available packing orders,
-  and can transcode between them. It also now selects the proper order when
-  negotiating with a SIP peer based on the codec name supplied in the SDP. However,
-  there are existing devices that improperly request one order and then use another;
-  Sipura and Grandstream ATAs are known to do this, and there may be others. To
-  be able to continue to use these devices with this version of Asterisk and the
-  G726-32 codec, a configuration parameter called 'g726nonstandard' has been added
-  to sip.conf, so that Asterisk can use the packing order expected by the device (even
-  though it requested a different order). In addition, the internal format number for
-  G726-32 has been changed, and the old number is now assigned to AAL2-G726-32. The
-  result of this is that this version of Asterisk will be able to interoperate over
-  IAX2 with older versions of Asterisk, as long as this version is told to allow
-  'g726aal2' instead of 'g726' as the codec for the call.
-
-Installation:
-
-* On BSD systems, the installation directories have changed to more "FreeBSDish"
-  directories. On startup, Asterisk will look for the main configuration in
-  /usr/local/etc/asterisk/asterisk.conf
-  If you have an old installation, you might want to remove the binaries and
-  move the configuration files to the new locations. The following directories
-  are now default:
-       ASTLIBDIR       /usr/local/lib/asterisk
-       ASTVARLIBDIR    /usr/local/share/asterisk
-       ASTETCDIR       /usr/local/etc/asterisk
-       ASTBINDIR       /usr/local/bin/asterisk
-       ASTSBINDIR      /usr/local/sbin/asterisk
-
-Music on Hold:
-
-* The music on hold handling has been changed in some significant ways in hopes
-  to make it work in a way that is much less confusing to users. Behavior will
-  not change if the same configuration is used from older versions of Asterisk.
-  However, there are some new configuration options that will make things work
-  in a way that makes more sense.
-
-  Previously, many of the channel drivers had an option called "musicclass" or
-  something similar. This option set what music on hold class this channel
-  would *hear* when put on hold. Some people expected (with good reason) that
-  this option was to configure what music on hold class to play when putting
-  the bridged channel on hold. This option has now been deprecated.
-
-  Two new music on hold related configuration options for channel drivers have
-  been introduced. Some channel drivers support both options, some just one,
-  and some support neither of them. Check the sample configuration files to see
-  which options apply to which channel driver.
-
-  The "mohsuggest" option specifies which music on hold class to suggest to the
-  bridged channel when putting them on hold. The only way that this class can
-  be overridden is if the bridged channel has a specific music class set that
-  was done in the dialplan using Set(CHANNEL(musicclass)=something).
-
-  The "mohinterpret" option is similar to the old "musicclass" option. It
-  specifies which music on hold class this channel would like to listen to when
-  put on hold. This music class is only effective if this channel has no music
-  class set on it from the dialplan and the bridged channel putting this one on
-  hold had no "mohsuggest" setting.
-
-  The IAX2 and Zap channel drivers have an additional feature for the
-  "mohinterpret" option. If this option is set to "passthrough", then these
-  channel drivers will pass through the HOLD message in signalling instead of
-  starting music on hold on the channel. An example for how this would be
-  useful is in an enterprise network of Asterisk servers. When one phone on one
-  server puts a phone on a different server on hold, the remote server will be
-  responsible for playing the hold music to its local phone that was put on
-  hold instead of the far end server across the network playing the music.
-
-CDR Records:
-
-* The behavior of the "clid" field of the CDR has always been that it will
-  contain the callerid ANI if it is set, or the callerid number if ANI was not
-  set.  When using the "callerid" option for various channel drivers, some
-  would set ANI and some would not.  This has been cleared up so that all
-  channel drivers set ANI.  If you would like to change the callerid number
-  on the channel from the dialplan and have that change also show up in the
-  CDR, then you *must* set CALLERID(ANI) as well as CALLERID(num).
-
-API:
-
-* There are some API functions that were not previously prefixed with the 'ast_'
-  prefix but now are; these include the ADSI, ODBC and AGI interfaces. If you
-  have a module that uses the services provided by res_adsi, res_odbc, or
-  res_agi, you will need to add ast_ prefixes to the functions that you call
-  from those modules.
-
-Formats:
-
-* format_wav: The GAIN preprocessor definition has been changed from 2 to 0
-  in Asterisk 1.4.  This change was made in response to user complaints of
-  choppiness or the clipping of loud signal peaks.  The GAIN preprocessor
-  definition will be retained in Asterisk 1.4, but will be removed in a
-  future release.  The use of GAIN for the increasing of voicemail message
-  volume should use the 'volgain' option in voicemail.conf
diff --git a/UPGRADE-1.6.txt b/UPGRADE-1.6.txt
deleted file mode 100644 (file)
index 4ae4401..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-=========================================================
-===
-=== Information for upgrading from Asterisk 1.4 to 1.6
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also includes advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-===
-=========================================================
-
-AEL:
-
-* Macros are now implemented underneath with the Gosub() application.
-  Heaven Help You if you wrote code depending on any aspect of this!
-  Previous to 1.6, macros were implemented with the Macro() app, which
-  provided a nice feature of auto-returning. The compiler will do its
-  best to insert a Return() app call at the end of your macro if you did
-  not include it, but really, you should make sure that all execution
-  paths within your macros end in "return;".
-
-* The conf2ael program is 'introduced' in this release; it is in a rather
-  crude state, but deemed useful for making a first pass at converting
-  extensions.conf code into AEL. More intelligence will come with time.
-
-Core:
-
-* The 'languageprefix' option in asterisk.conf is now deprecated, and
-  the default sound file layout for non-English sounds is the 'new
-  style' layout introduced in Asterisk 1.4 (and used by the automatic
-  sound file installer in the Makefile).
-
-* The ast_expr2 stuff has been modified to handle floating-point numbers.
-  Numbers of the format D.D are now acceptable input for the expr parser,
-  Where D is a string of base-10 digits. All math is now done in "long double",
-  if it is available on your compiler/architecture. This was half-way between
-  a bug-fix (because the MATH func returns fp by default), and an enhancement.
-  Also, for those counting on, or needing, integer operations, a series of
-  'functions' were also added to the expr language, to allow several styles
-  of rounding/truncation, along with a set of common floating point operations,
-  like sin, cos, tan, log, pow, etc. The ability to call external functions
-  like CDR(), etc. was also added, without having to use the ${...} notation.
-
-* The delimiter passed to applications has been changed to the comma (','), as
-  that is what people are used to using within extensions.conf.  If you are
-  using realtime extensions, you will need to translate your existing dialplan
-  to use this separator.  To use a literal comma, you need merely to escape it
-  with a backslash ('\').  Another possible side effect is that you may need to
-  remove the obscene level of backslashing that was necessary for the dialplan
-  to work correctly in 1.4 and previous versions.  This should make writing
-  dialplans less painful in the future, albeit with the pain of a one-time
-  conversion.  If you would like to avoid this conversion immediately, set
-  pbx_realtime=1.4 in the [compat] section of asterisk.conf.  After
-  transitioning, set pbx_realtime=1.6 in the same section.
-
-* For the same purpose as above, you may set res_agi=1.4 in the [compat]
-  section of asterisk.conf to continue to use the '|' delimiter in the EXEC
-  arguments of AGI applications.  After converting to use the ',' delimiter,
-  change this option to res_agi=1.6.
-
-* As a side effect of the application delimiter change, many places that used
-  to need quotes in order to get the proper meaning are no longer required.
-  You now only need to quote strings in configuration files if you literally
-  want quotation marks within a string.
-
-* Any applications run that contain the pipe symbol but not a comma symbol will
-  get a warning printed to the effect that the application delimiter has changed.
-  However, there are legitimate reasons why this might be useful in certain
-  situations, so this warning can be turned off with the dontwarn option in
-  asterisk.conf.
-
-* The logger.conf option 'rotatetimestamp' has been deprecated in favor of
-  'rotatestrategy'.  This new option supports a 'rotate' strategy that more
-  closely mimics the system logger in terms of file rotation.
-
-* The concise versions of various CLI commands are now deprecated. We recommend
-  using the manager interface (AMI) for application integration with Asterisk.
-
-Voicemail:
-
-* The voicemail configuration values 'maxmessage' and 'minmessage' have
-  been changed to 'maxsecs' and 'minsecs' to clarify their purpose and
-  to make them more distinguishable from 'maxmsgs', which sets folder
-  size.  The old variables will continue to work in this version, albeit
-  with a deprecation warning.
-
-* If you use any interface for modifying voicemail aside from the built in
-  dialplan applications, then the option "pollmailboxes" *must* be set in
-  voicemail.conf for message waiting indication (MWI) to work properly.  This
-  is because Voicemail notification is now event based instead of polling
-  based.  The channel drivers are no longer responsible for constantly manually
-  checking mailboxes for changes so that they can send MWI information to users.
-  Examples of situations that would require this option are web interfaces to
-  voicemail or an email client in the case of using IMAP storage.
-
-Applications:
-
-
-* ChanIsAvail() now has a 't' option, which allows the specified device
-  to be queried for state without consulting the channel drivers. This
-  performs mostly a 'ChanExists' sort of function.
-
-* ChannelRedirect() will not terminate the channel that fails to do a
-  channelredirect as it has done previously. Instead CHANNELREDIRECT_STATUS
-  will reflect if the attempt was successful of not.
-
-* SetCallerPres() has been replaced with the CALLERPRES() dialplan function
-  and is now deprecated.
-
-* DISA()'s fifth argument is now an options argument.  If you have previously
-  used 'NOANSWER' in this argument, you'll need to convert that to the new
-  option 'n'.
-
-* Macro() is now deprecated.  If you need subroutines, you should use the
-  Gosub()/Return() applications.  To replace MacroExclusive(), we have
-  introduced dialplan functions LOCK(), TRYLOCK(), and UNLOCK().  You may use
-  these functions in any location where you desire to ensure that only one
-  channel is executing that path at any one time.  The Macro() applications
-  are deprecated for performance reasons.  However, since Macro() has been
-  around for a long time and so many dialplans depend heavily on it, for the
-  sake of backwards compatibility it will not be removed .  It is also worth
-  noting that using both Macro() and GoSub() at the same time is _heavily_
-  discouraged.
-
-* Read() now sets a READSTATUS variable on exit.  It does NOT automatically
-  return -1 (and hangup) anymore on error.  If you want to hangup on error,
-  you need to do so explicitly in your dialplan.
-
-* Privacy() no longer uses privacy.conf, so any options must be specified
-  directly in the application arguments.
-
-* MusicOnHold application now has duration parameter which allows specifying
-  timeout in seconds.
-
-* WaitMusicOnHold application is now deprecated in favor of extended MusicOnHold.
-
-* SetMusicOnHold is now deprecated. You should use Set(CHANNEL(musicclass)=...)
-  instead.
-
-* The arguments in ExecIf changed a bit, to be more like other applications.
-  The syntax is now ExecIf(<cond>?appiftrue(args):appiffalse(args)).
-
-* The behavior of the Set application now depends upon a compatibility option,
-  set in asterisk.conf.  To use the old 1.4 behavior, which allowed Set to take
-  multiple key/value pairs, set app_set=1.4 in [compat] in asterisk.conf.  To
-  use the new behavior, which permits variables to be set with embedded commas,
-  set app_set=1.6 in [compat] in asterisk.conf.  Note that you can have both
-  behaviors at the same time, if you switch to using MSet if you want the old
-  behavior.
-
-Dialplan Functions:
-
-* QUEUE_MEMBER_COUNT() has been deprecated in favor of the QUEUE_MEMBER() function. For
-  more information, issue a "show function QUEUE_MEMBER" from the CLI.
-
-CDR:
-
-* The cdr_sqlite module has been marked as deprecated in favor of
-  cdr_sqlite3_custom.  It will potentially be removed from the tree
-  after Asterisk 1.6 is released.
-
-* The cdr_odbc module now uses res_odbc to manage its connections.  The
-  username and password parameters in cdr_odbc.conf, therefore, are no
-  longer used.  The dsn parameter now points to an entry in res_odbc.conf.
-
-* The uniqueid field in the core Asterisk structure has been changed from a
-  maximum 31 character field to a 149 character field, to account for all
-  possible values the systemname prefix could be.  In the past, if the
-  systemname was too long, the uniqueid would have been truncated.
-
-* The cdr_tds module now supports all versions of FreeTDS that contain
-  the db-lib frontend.  It will also now log the userfield variable if
-  the target database table contains a column for it.
-
-Formats:
-
-* format_wav: The GAIN preprocessor definition and source code that used it
-  is removed.  This change was made in response to user complaints of
-  choppiness or the clipping of loud signal peaks.  To increase the volume
-  of voicemail messages, use the 'volgain' option in voicemail.conf
-
-Channel Drivers:
-
-* SIP: a small upgrade to support the "Record" button on the SNOM360,
-  which sends a sip INFO message with a "Record: on" or "Record: off"
-  header. If Asterisk is set up (via features.conf) to accept "One Touch Monitor"
-  requests (by default, via '*1'), then the user-configured dialpad sequence
-  is generated, and recording can be started and stopped via this button. The
-  file names and formats are all controlled via the normal mechanisms. If the
-  user has not configured the automon feature, the normal "415 Unsupported media type"
-  is returned, and nothing is done.
-
-* SIP: The "call-limit" option is marked as deprecated. It still works in this version of
-  Asterisk, but will be removed in the following version. Please use the groupcount functions
-  in the dialplan to enforce call limits. The "limitonpeer" configuration option is
-  now renamed to "counteronpeer".
-
-* SIP: The "username" option is now renamed to "defaultuser" to match "defaultip".
-  These are used only before registration to call a peer with the uri
-       sip:defaultuser@defaultip
-  The "username" setting still work, but is deprecated and will not work in
-  the next version of Asterisk.
-
-* SIP: The old "insecure" options, deprecated in 1.4, have been removed.
-  "insecure=very" should be changed to "insecure=port,invite"
-  "insecure=yes" should be changed to "insecure=port"
-  Be aware that some telephony providers show the invalid syntax in their
-  sample configurations.
-
-* chan_local.c: the comma delimiter inside the channel name has been changed to a
-  semicolon, in order to make the Local channel driver compatible with the comma
-  delimiter change in applications.
-
-* H323: The "tos" setting has changed name to "tos_audio" and "cos" to "cos_audio"
-  to be compatible with settings in sip.conf. The "tos" and "cos" configuration
-  is deprecated and will stop working in the next release of Asterisk.
-
-* Console: A new console channel driver, chan_console, has been added to Asterisk.
-  This new module can not be loaded at the same time as chan_alsa or chan_oss.  The
-  default modules.conf only loads one of them (chan_oss by default).  So, unless you
-  have modified your modules.conf to not use the autoload option, then you will need
-  to modify modules.conf to add another "noload" line to ensure that only one of
-  these three modules gets loaded.
-
-* DAHDI: The chan_zap module that supported PSTN interfaces using
-  Zaptel has been renamed to chan_dahdi, and only supports the DAHDI
-  telephony driver package for PSTN interfaces. See the
-  Zaptel-to-DAHDI.txt file for more details on this transition.
-
-* DAHDI: The "msdstrip" option has been deprecated, as it provides no value over
-  the method of stripping digits in the dialplan using variable substring syntax.
-
-Configuration:
-
-* pbx_dundi.c: tos parameter changed to use new values. Old values like lowdelay,
-  lowcost and other is not acceptable now. Look into qos.tex for description of
-  this parameter.
-
-* queues.conf: the queue-lessthan sound file option is no longer available, and the
-  queue-round-seconds option no longer takes '1' as a valid parameter.
-
-Manager:
-
-* Manager has been upgraded to version 1.1 with a lot of changes.
-  Please check doc/manager_1_1.txt for information
-
-* The IAXpeers command output has been changed to more closely resemble the
-  output of the SIPpeers command.
-
-* cdr_manager now reports at the "cdr" level, not at "call"  You may need to
-   change your manager.conf to add the level to existing AMI users, if they
-   want to see the CDR events generated.
-
-* The Originate command now requires the Originate write permission.  For
-   Originate with the Application parameter, you need the additional System
-   privilege if you want to do anything that calls out to a subshell.
-
-iLBC Codec:
-
-* Previously, the Asterisk source code distribution included the iLBC
-  encoder/decoder source code, from Global IP Solutions
-  (http://www.gipscorp.com). This code is not licensed for
-  distribution, and thus has been removed from the Asterisk source
-  code distribution. If you wish to use codec_ilbc to support iLBC
-  channels in Asterisk, you can run the contrib/scripts/get_ilbc_source.sh
-  script to download the source and put it in the proper place in
-  the Asterisk build tree. Once that is done you can follow your normal
-  steps of building Asterisk. You will need to run 'menuselect' and enable
-  the iLBC codec in the 'Codec  Translators' category.
diff --git a/UPGRADE-1.8.txt b/UPGRADE-1.8.txt
deleted file mode 100644 (file)
index b01f762..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-===========================================================
-===
-=== Information for upgrading between Asterisk versions
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also includes advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
-===
-===========================================================
-
-From 1.8.13 to 1.8.14:
-* permitdirectmedia/denydirectmedia now controls whether peers can be
-  bridged via directmedia by comparing the ACL to the bridging peer's
-  address rather than its own address.
-
-From 1.8.12 to 1.8.13:
-* The complex processor detection and optimization has been removed from
-  the makefile in favor of using native optimization suppport when available.
-  BUILD_NATIVE can be disabled via menuselect under "Compiler Flags".
-
-From 1.8.10 to 1.8.11:
-
-* If no transport is specified in sip.conf, transport will default to UDP.
-  Also, if multiple transport= lines are used, only the last will be used.
-
-From 1.6.2 to 1.8:
-
-* chan_sip no longer sets HASH(SIP_CAUSE,<chan name>) on channels by default.
-  This must now be enabled by setting 'sipstorecause' to 'yes' in sip.conf.
-  This carries a performance penalty.
-
-* Asterisk now requires libpri 1.4.11+ for PRI support.
-
-* A couple of CLI commands in res_ais were changed back to their original form:
-    "ais show clm members" --> "ais clm show members"
-    "ais show evt event channels" --> "ais evt show event channels"
-
-* The default value for 'autofill' and 'shared_lastcall' in queues.conf has
-  been changed to 'yes'.
-
-* The default value for the alwaysauthreject option in sip.conf has been changed
-  from "no" to "yes".
-
-* The behavior of the 'parkedcallstimeout' has changed slightly.  The formulation
-  of the extension name that a timed out parked call is delivered to when this
-  option is set to 'no' was modified such that instead of converting '/' to '0',
-  the '/' is converted to an underscore '_'.  See the updated documentation in
-  features.conf.sample for more information on the behavior of the
-  'parkedcallstimeout' option.
-
-* Asterisk-addons no longer exists as an independent package.  Those modules
-  now live in the addons directory of the main Asterisk source tree.  They
-  are not enabled by default.  For more information about why modules live in
-  addons, see README-addons.txt.
-
-* The rarely used 'event_log' and LOG_EVENT channel have been removed; the few
-  users of this channel in the tree have been converted to LOG_NOTICE or removed
-  (in cases where the same message was already generated to another channel).
-
-* The usage of RTP inside of Asterisk has now become modularized. This means
-  the Asterisk RTP stack now exists as a loadable module, res_rtp_asterisk.
-  If you are not using autoload=yes in modules.conf you will need to ensure
-  it is set to load. If not, then any module which uses RTP (such as chan_sip)
-  will not be able to send or receive calls.
-
-* The app_dahdiscan.c file has been removed, but the dialplan app DAHDIScan still
-  remains. It now exists within app_chanspy.c and retains the exact same
-  functionality as before.
-
-* The default behavior for Set, AGI, and pbx_realtime has been changed to implement
-  1.6 behavior by default, if there is no [compat] section in asterisk.conf.  In
-  prior versions, the behavior defaulted to 1.4 behavior, to assist in upgrades.
-  Specifically, that means that pbx_realtime and res_agi expect you to use commas
-  to separate arguments in applications, and Set only takes a single pair of
-  a variable name/value.  The old 1.4 behavior may still be obtained by setting
-  app_set, pbx_realtime, and res_agi each to 1.4 in the [compat] section of
-  asterisk.conf.
-
-* The PRI channels in chan_dahdi can no longer change the channel name if a
-  different B channel is selected during call negotiation.  To prevent using
-  the channel name to infer what B channel a call is using and to avoid name
-  collisions, the channel name format is changed.
-  The new channel naming for PRI channels is:
-  DAHDI/i<span>/<number>[:<subaddress>]-<sequence-number>
-
-* Added CHANNEL(dahdi_span), CHANNEL(dahdi_channel), and CHANNEL(dahdi_type)
-  so the dialplan can determine the B channel currently in use by the channel.
-  Use CHANNEL(no_media_path) to determine if the channel even has a B channel.
-
-* Added AMI event DAHDIChannel to associate a DAHDI channel with an Asterisk
-  channel so AMI applications can passively determine the B channel currently
-  in use.  Calls with "no-media" as the DAHDIChannel do not have an associated
-  B channel.  No-media calls are either on hold or call-waiting.
-
-* The ChanIsAvail application has been changed so the AVAILSTATUS variable
-  no longer contains both the device state and cause code. The cause code
-  is now available in the AVAILCAUSECODE variable. If existing dialplan logic
-  is written to expect AVAILSTATUS to contain the cause code it needs to be
-  changed to use AVAILCAUSECODE.
-
-* ExternalIVR will now send Z events for invalid or missing files, T events
-  now include the interrupted file and bugs in argument parsing have been
-  fixed so there may be arguments specified in incorrect ways that were
-  working that will no longer work. Please see
-  https://wiki.asterisk.org/wiki/display/AST/External+IVR+Interface for details.
-
-* OSP lookup application changes following variable names:
-  OSPPEERIP to OSPINPEERIP
-  OSPTECH to OSPOUTTECH
-  OSPDEST to OSPDESTINATION
-  OSPCALLING to OSPOUTCALLING
-  OSPCALLED to OSPOUTCALLED
-  OSPRESULTS to OSPDESTREMAILS
-
-* The Manager event 'iax2 show peers' output has been updated.  It now has a
-  similar output of 'sip show peers'.
-
-* VoiceMailMain and VMAuthenticate, if a '*' is entered in the first position
-  of a Mailbox or Password, will, if it exists, jump to the 'a' extension in
-  the current dialplan context.
-
-* The CALLERPRES() dialplan function is deprecated in favor of
-  CALLERID(num-pres) and CALLERID(name-pres).
-
-* Environment variables that start with "AST_" are reserved to the system and
-  may no longer be set from the dialplan.
-
-* When a call is redirected inside of a Dial, the app and appdata fields of the
-  CDR will now be set to "AppDial" and "(Outgoing Line)" instead of being blank.
-
-* The CDR handling of billsec and duration field has changed. If your table
-  definition specifies those fields as float,double or similar they will now
-  be logged with microsecond accuracy instead of a whole integer.
-
-* chan_sip will no longer set up a local call forward when receiving a
-  482 Loop Detected response. The dialplan will just continue from where it
-  left off.
-
-* The 'stunaddr' option has been removed from chan_sip.  This feature did not
-  behave as expected, had no correct use case, and was not RFC compliant. The
-  removal of this feature will hopefully be followed by a correct RFC compliant
-  STUN implementation in chan_sip in the future.
-
-* The default value for the pedantic option in sip.conf has been changed
-  from "no" to "yes".
-
-* The ConnectedLineNum and ConnectedLineName headers were added to many AMI
-  events/responses if the CallerIDNum/CallerIDName headers were also present.
-  The addition of connected line support changes the behavior of the channel
-  caller ID somewhat.  The channel caller ID value no longer time shares with
-  the connected line ID on outgoing call legs.  The timing of some AMI
-  events/responses output the connected line ID as caller ID.  These party ID's
-  are now separate.
-
-* The Dial application d and H options do not automatically answer the call
-  anymore.  It broke DTMF attended transfers.  Since many SIP and ISDN phones
-  cannot send DTMF before a call is connected, you need to answer the call
-  leg to those phones before using Dial with these options for them to have
-  any effect before the dialed party answers.
-
-* The outgoing directory (where .call files are read) now uses inotify to
-  detect file changes instead of polling the directory on a regular basis.
-  If your outgoing folder is on a NFS mount or another network file system,
-  changes to the files will not be detected.  You can revert to polling the
-  directory by specifying --without-inotify to configure before compiling.
-
-* The 'sipusers' realtime table has been removed completely. Use the 'sippeers'
-  table with type 'user' for user type objects.
-
-* The sip.conf allowoverlap option now accepts 'dtmf' as a value.  If you
-  are using the early media DTMF overlap dialing method you now need to set
-  allowoverlap=dtmf.
-
-From 1.6.1 to 1.6.2:
-
-* SIP no longer sends the 183 progress message for early media by
-  default.  Applications requiring early media should use the
-  progress() dialplan app to generate the progress message.
-
-* The firmware for the IAXy has been removed from Asterisk.  It can be
-  downloaded from http://downloads.digium.com/pub/iaxy/.  To have Asterisk
-  install the firmware into its proper location, place the firmware in the
-  contrib/firmware/iax/ directory in the Asterisk source tree before running
-  "make install".
-
-* T.38 FAX error correction mode can no longer be configured in udptl.conf;
-  instead, it is configured on a per-peer (or global) basis in sip.conf, with
-  the same default as was present in udptl.conf.sample.
-
-* T.38 FAX maximum datagram size can no longer be configured in updtl.conf;
-  instead, it is either supplied by the application servicing the T.38 channel
-  (for a FAX send or receive) or calculated from the bridged endpoint's
-  maximum datagram size (for a T.38 FAX passthrough call). In addition, sip.conf
-  allows for overriding the value supplied by a remote endpoint, which is useful
-  when T.38 connections are made to gateways that supply incorrectly-calculated
-  maximum datagram sizes.
-
-* There have been some changes to the IAX2 protocol to address the security
-  concerns documented in the security advisory AST-2009-006.  Please see the
-  IAX2 security document, doc/IAX2-security.pdf, for information regarding
-  backwards compatibility with versions of Asterisk that do not contain these
-  changes to IAX2.
-
-* The 'canreinvite' option support by the SIP, MGCP and Skinny channel drivers
-  has been renamed to 'directmedia', to better reflect what it actually does.
-  In the case of SIP, there are still re-INVITEs issued for T.38 negotiation,
-  starting and stopping music-on-hold, and other reasons, and the 'canreinvite'
-  option never had any effect on these cases, it only affected the re-INVITEs
-  used for direct media path setup. For MGCP and Skinny, the option was poorly
-  named because those protocols don't even use INVITE messages at all. For
-  backwards compatibility, the old option is still supported in both normal
-  and Realtime configuration files, but all of the sample configuration files,
-  Realtime/LDAP schemas, and other documentation refer to it using the new name.
-
-* The default console now will use colors according to the default background
-  color, instead of forcing the background color to black.  If you are using a
-  light colored background for your console, you may wish to use the option
-  flag '-W' to present better color choices for the various messages.  However,
-  if you'd prefer the old method of forcing colors to white text on a black
-  background, the compatibility option -B is provided for this purpose.
-
-* SendImage() no longer hangs up the channel on transmission error or on
-  any other error; in those cases, a FAILURE status is stored in
-  SENDIMAGESTATUS and dialplan execution continues.  The possible
-  return values stored in SENDIMAGESTATUS are: SUCCESS, FAILURE, and
-  UNSUPPORTED. ('OK' has been replaced with 'SUCCESS', and 'NOSUPPORT'
-  has been replaced with 'UNSUPPORTED').  This change makes the
-  SendImage application more consistent with other applications.
-
-* skinny.conf now has separate sections for lines and devices.
-  Please have a look at configs/skinny.conf.sample and update
-  your skinny.conf.
-
-* Queue names previously were treated in a case-sensitive manner,
-  meaning that queues with names like "sales" and "sALeS" would be
-  seen as unique queues. The parsing logic has changed to use
-  case-insensitive comparisons now when originally hashing based on
-  queue names, meaning that now the two queues mentioned as examples
-  earlier will be seen as having the same name.
-
-* The SPRINTF() dialplan function has been moved into its own module,
-  func_sprintf, and is no longer included in func_strings. If you use this
-  function and do not use 'autoload=yes' in modules.conf, you will need
-  to explicitly load func_sprintf for it to be available.
-
-* The res_indications module has been removed.  Its functionality was important
-  enough that most of it has been moved into the Asterisk core.
-  Two applications previously provided by res_indications, PlayTones and
-  StopPlayTones, have been moved into a new module, app_playtones.
-
-* Support for Taiwanese was incorrectly supported with the "tw" language code.
-  In reality, the "tw" language code is reserved for the Twi language, native
-  to Ghana.  If you were previously using the "tw" language code, you should
-  switch to using either "zh" (for Mandarin Chinese) or "zh_TW" for Taiwan
-  specific localizations.  Additionally, "mx" should be changed to "es_MX",
-  Georgian was incorrectly specified as "ge" but should be "ka", and Czech is
-  "cs", not "cz".
-
-* DAHDISendCallreroutingFacility() parameters are now comma-separated,
-  instead of the old pipe.
-
-* res_jabber: autoprune has been disabled by default, to avoid misconfiguration
-  that would end up being interpreted as a bug once Asterisk started removing
-  the contacts from a user list.
-
-* The cdr.conf file must exist and be configured correctly in order for CDR
-  records to be written.
-
-* cdr_pgsql now assumes the encoding of strings it is handed are in LATIN9,
-  which should cover most uses of the extended ASCII set.  If your strings
-  use a different encoding in Asterisk, the "encoding" parameter may be set
-  to specify the correct character set.
-
-From 1.6.0.1 to 1.6.1:
-
-* The ast_agi_register_multiple() and ast_agi_unregister_multiple()
-  API calls were added in 1.6.0, so that modules that provide multiple
-  AGI commands could register/unregister them all with a single
-  step. However, these API calls were not implemented properly, and did
-  not allow the caller to know whether registration or unregistration
-  succeeded or failed. They have been redefined to now return success
-  or failure, but this means any code using these functions will need
-  be recompiled after upgrading to a version of Asterisk containing
-  these changes. In addition, the source code using these functions
-  should be reviewed to ensure it can properly react to failure
-  of registration or unregistration of its API commands.
-
-* The ast_agi_fdprintf() API call has been renamed to ast_agi_send()
-  to better match what it really does, and the argument order has been
-  changed to be consistent with other API calls that perform similar
-  operations.
-
-From 1.6.0.x to 1.6.1:
-
-* In previous versions of Asterisk, due to the way objects were arranged in
-  memory by chan_sip, the order of entries in sip.conf could be adjusted to
-  control the behavior of matching against peers and users.  The way objects
-  are managed has been significantly changed for reasons involving performance
-  and stability.  A side effect of these changes is that the order of entries
-  in sip.conf can no longer be relied upon to control behavior.
-
-* The following core commands dealing with dialplan have been deprecated: 'core
-  show globals', 'core set global' and 'core set chanvar'. Use the equivalent
-  'dialplan show globals', 'dialplan set global' and 'dialplan set chanvar'
-  instead.
-
-* In the dialplan expression parser, the logical value of spaces
-  immediately preceding a standalone 0 previously evaluated to
-  true. It now evaluates to false.  This has confused a good many
-  people in the past (typically because they failed to realize the
-  space had any significance).  Since this violates the Principle of
-  Least Surprise, it has been changed.
-
-* While app_directory has always relied on having a voicemail.conf or users.conf file
-  correctly set up, it now is dependent on app_voicemail being compiled as well.
-
-* SIP: All of the functionality in SIPCHANINFO() has been implemented in CHANNEL(),
-  and you should start using that function instead for retrieving information about
-  the channel in a technology-agnostic way.
-
-* If you have any third party modules which use a config file variable whose
-  name ends in a '+', please note that the append capability added to this
-  version may now conflict with that variable naming scheme.  An easy
-  workaround is to ensure that a space occurs between the '+' and the '=',
-  to differentiate your variable from the append operator.  This potential
-  conflict is unlikely, but is documented here to be thorough.
-
-* The "Join" event from app_queue now uses the CallerIDNum header instead of
-  the CallerID header to indicate the CallerID number.
-
-* If you use ODBC storage for voicemail, there is a new field called "flag"
-  which should be a char(8) or larger.  This field specifies whether or not a
-  message has been designated to be "Urgent", "PRIORITY", or not.
diff --git a/UPGRADE-10.txt b/UPGRADE-10.txt
deleted file mode 100644 (file)
index f4b2bec..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-===========================================================
-===
-=== Information for upgrading between Asterisk versions
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also include advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
-=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
-===
-===========================================================
-
-From 10.4 to 10.5:
-
-* The complex processor detection and optimization has been removed from
-  the makefile in favor of using native optimization suppport when available.
-  BUILD_NATIVE can be disabled via menuselect under "Compiler Flags".
-
-From 10.2 to 10.3:
-
-* If no transport is specified in sip.conf, transport will default to UDP.
-  Also, if multiple transport= lines are used, only the last will be used.
-
-From 1.8 to 10:
-
-cel_pgsql:
- - This module now expects an 'extra' column in the database for data added
-   using the CELGenUserEvent() application.
-
-ConfBridge
- - ConfBridge's dialplan arguments have changed and are not
-   backwards compatible.
-
-File Interpreters
- - The format interpreter formats/format_sln16.c for the file extension
-   '.sln16' has been removed. The '.sln16' file interpreter now exists
-   in the formats/format_sln.c module along with new support for sln12,
-   sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
-
-HTTP:
- - A bindaddr must be specified in order for the HTTP server
-   to run. Previous versions would default to 0.0.0.0 if no
-   bindaddr was specified.
-
-Gtalk:
- - The default value for 'context' and 'parkinglots' in gtalk.conf has
-   been changed to 'default', previously they were empty.
-
-chan_dahdi:
- - The mohinterpret=passthrough setting is deprecated in favor of
-   moh_signaling=notify.
-
-pbx_lua:
- - Execution no longer continues after applications that do dialplan jumps
-   (such as app.goto).  Now when an application such as app.goto() is called,
-   control is returned back to the pbx engine and the current extension
-   function stops executing.
- - the autoservice now defaults to being on by default
- - autoservice_start() and autoservice_start() no longer return a value.
-
-Queue:
- - Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
- - QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
-
-Asterisk Database:
- - The internal Asterisk database has been switched from Berkeley DB 1.86 to
-   SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
-   utility in the UTILS section of menuselect. If an existing astdb is found and no
-   astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
-   convert an existing astdb to the SQLite3 version automatically at runtime.
-
-Module Support Level
- - All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
-   formats, funcs, pbx, and res have been updated to include MODULEINFO data
-   that includes <support_level> tags with a value of core, extended, or deprecated.
-   More information is available on the Asterisk wiki at
-   https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
-
-   Deprecated modules are now marked to not build by default and must be explicitly
-   enabled in menuselect.
-
-===========================================================
-===========================================================
diff --git a/UPGRADE-11.txt b/UPGRADE-11.txt
deleted file mode 100644 (file)
index 58b70b6..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-===========================================================
-===
-=== Information for upgrading between Asterisk versions
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also include advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
-=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
-=== UPGRADE-10.txt -- Upgrade info for 1.8 to 10
-===
-===========================================================
-
-From 11.6 to 11.7:
-ConfBridge
- - ConfBridge now has the ability to set the language of announcements to the
-   conference.  The language can be set on a bridge profile in confbridge.conf
-   or by the dialplan function CONFBRIDGE(bridge,language)=en.
-chan_sip - Clarify The "sip show peers" Forcerport Column And Add Comedia
- - Under the "Forcerport" column, the "N" used to mean NAT (i.e. Yes).  With
-   the additon of auto_* NAT settings, the meaning changed and there was a
-   certain combination of letters added to indicate the current setting. The
-   combination of using "Y", "N", "A" or "a", can be confusing.  Therefore, we
-   now display clearly what the current Forcerport setting is: "Yes", "No",
-   "Auto (Yes)", "Auto (No)".
- - Since we are clarifying the Forcerport column, we have added a column to
-   display the Comedia setting since this is useful information as well.  We
-   no longer have a simple "NAT" setting like other versions before 11.
-
-From 11.5 to 11.6:
-* res_agi will now properly indicate if there was an error in streaming an
-  audio file.  The result code will be -1 and the result returned from the
-  the function will be RESULT_FAILURE instead of the prior behavior of always
-  returning RESULT_SUCCESS even if there was an error.
-
-From 11.4 to 11.5:
-* The default settings for chan_sip are now overriden properly by the general
-  settings in sip.conf.  Please look over your settings upon upgrading.
-
-From 11.3 to 11.4:
-* Added the 'n' option to MeetMe to prevent application of the DENOISE function
-  to a channel joining a conference. Some channel drivers that vary the number
-  of audio samples in a voice frame will experience significant quality problems
-  if a denoiser is attached to the channel; this option gives them the ability
-  to remove the denoiser without having to unload func_speex.
-
-* The Registry AMI event for SIP registrations will now always include the
-  Username field. A previous bug fix missed an instance where it was not
-  included; that has been corrected in this release.
-
-From 11.2.0 to 11.2.1:
-* Asterisk would previously not output certain error messages when a remote
-  console attempted to connect to Asterisk and no instance of Asterisk was
-  running. This error message is displayed on stderr; as a result, some
-  initialization scripts that used remote consoles to test for the presence
-  of a running Asterisk instance started to display erroneous error messages.
-  The init.d scripts and the safe_asterisk have been updated in the contrib
-  folder to account for this.
-
-From 11.2 to 11.3:
-
-* Now by default, when Asterisk is installed in a path other than /usr, the
-  Asterisk binary will search for shared libraries in ${libdir} in addition to
-  searching system libraries. This allows Asterisk to find its shared
-  libraries without having to specify LD_LIBRARY_PATH. This can be disabled by
-  passing --disable-rpath to configure.
-
-From 10 to 11:
-
-Voicemail:
- - All voicemails now have a "msg_id" which uniquely identifies a message. For
-   users of filesystem and IMAP storage of voicemail, this should be transparent.
-   For users of ODBC, you will need to add a "msg_id" column to your voice mail
-   messages table. This should be a string capable of holding at least 32 characters.
-   All messages created in old Asterisk installations will have a msg_id added to
-   them when required. This operation should be transparent as well.
-
-Parking:
- - The comebacktoorigin setting must now be set per parking lot. The setting in
-   the general section will not be applied automatically to each parking lot.
- - The BLINDTRANSFER channel variable is deleted from a channel when it is
-   bridged to prevent subtle bugs in the parking feature.  The channel
-   variable is used by Asterisk internally for the Park application to work
-   properly.  If you were using it for your own purposes, copy it to your
-   own channel variable before the channel is bridged.
-
-res_ais:
- - Users of res_ais in versions of Asterisk prior to Asterisk 11 must change
-   to use the res_corosync module, instead.  OpenAIS is deprecated, but
-   Corosync is still actively developed and maintained.  Corosync came out of
-   the OpenAIS project.
-
-Dialplan Functions:
- - MAILBOX_EXISTS has been deprecated. Use VM_INFO with the 'exists' parameter
-   instead.
- - Macro has been deprecated in favor of GoSub.  For redirecting and connected
-   line purposes use the following variables instead of their macro equivalents:
-   REDIRECTING_SEND_SUB, REDIRECTING_SEND_SUB_ARGS,
-   CONNECTED_LINE_SEND_SUB, CONNECTED_LINE_SEND_SUB_ARGS.
- - The REDIRECTING function now supports the redirecting original party id
-   and reason.
- - The HANGUPCAUSE and HANGUPCAUSE_KEYS functions have been introduced to
-   provide a replacement for the SIP_CAUSE hash. The HangupCauseClear
-   application has also been introduced to remove this data from the channel
-   when necessary.
-
-
-func_enum:
- - ENUM query functions now return a count of -1 on lookup error to
-   differentiate between a failed query and a successful query with 0 results
-   matching the specified type.
-
-CDR:
- - cdr_adaptive_odbc now supports specifying a schema so that Asterisk can
-   connect to databases that use schemas.
-
-Configuration Files:
- - Files listed below have been updated to be more consistent with how Asterisk
-   parses configuration files.  This makes configuration files more consistent
-   with what is expected across modules.
-
-   - cdr.conf: [general] and [csv] sections
-   - dnsmgr.conf
-   - dsp.conf
-
- - The 'verbose' setting in logger.conf now takes an optional argument,
-   specifying the verbosity level for each logging destination.  The default,
-   if not otherwise specified, is a verbosity of 3.
-
-AMI:
-  - DBDelTree now correctly returns an error when 0 rows are deleted just as
-    the DBDel action does.
-  - The IAX2 PeerStatus event now sends a 'Port' header.  In Asterisk 10, this was
-    erroneously being sent as a 'Post' header.
-
-CCSS:
- - Macro is deprecated. Use cc_callback_sub instead of cc_callback_macro
-   in channel configurations.
-
-app_meetme:
-  - The 'c' option (announce user count) will now work even if the 'q' (quiet)
-    option is enabled.
-
-app_followme:
- - Answered outgoing calls no longer get cut off when the next step is started.
-   You now have until the last step times out to decide if you want to accept
-   the call or not before being disconnected.
-
-chan_gtalk:
- - chan_gtalk has been deprecated in favor of the chan_motif channel driver. It is recommended
-   that users switch to using it as it is a core supported module.
-
-chan_jingle:
- - chan_jingle has been deprecated in favor of the chan_motif channel driver. It is recommended
-   that users switch to using it as it is a core supported module.
-
-SIP
-===
- - A new option "tonezone" for setting default tonezone for the channel driver
-   or individual devices
- - A new manager event, "SessionTimeout" has been added and is triggered when
-   a call is terminated due to RTP stream inactivity or SIP session timer
-   expiration.
- - SIP_CAUSE is now deprecated.  It has been modified to use the same
-   mechanism as the HANGUPCAUSE function.  Behavior should not change, but
-   performance should be vastly improved.  The HANGUPCAUSE function should now
-   be used instead of SIP_CAUSE. Because of this, the storesipcause option in
-   sip.conf is also deprecated.
- - The sip paramater for Originating Line Information (oli, isup-oli, and
-   ss7-oli) is now parsed out of the From header and copied into the channel's
-   ANI2 information field.  This is readable from the CALLERID(ani2) dialplan
-   function.
- - ICE support has been added and is enabled by default. Some endpoints may have
-   problems with the ICE candidates within the SDP. If this is the case ICE support
-   can be disabled globally or on a per-endpoint basis using the icesupport
-   configuration option. Symptoms of this include one way media or no media flow.
-
-chan_unistim
- - Due to massive update in chan_unistim phone keys functions and on-screen
-   information changed.
-
-users.conf:
- - A defined user with hasvoicemail=yes now finally uses a Gosub to stdexten
-   as documented in extensions.conf.sample since v1.6.0 instead of a Macro as
-   documented in v1.4.  Set the asterisk.conf stdexten=macro parameter to
-   invoke the stdexten the old way.
-
-res_jabber
- - This module has been deprecated in favor of the res_xmpp module. The res_xmpp
-   module is backwards compatible with the res_jabber configuration file, dialplan
-   functions, and AMI actions. The old CLI commands can also be made available using
-   the res_clialiases template for Asterisk 11.
-
-From 1.8 to 10:
-
-cel_pgsql:
- - This module now expects an 'extra' column in the database for data added
-   using the CELGenUserEvent() application.
-
-ConfBridge
- - ConfBridge's dialplan arguments have changed and are not
-   backwards compatible.
-
-File Interpreters
- - The format interpreter formats/format_sln16.c for the file extension
-   '.sln16' has been removed. The '.sln16' file interpreter now exists
-   in the formats/format_sln.c module along with new support for sln12,
-   sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
-
-HTTP:
- - A bindaddr must be specified in order for the HTTP server
-   to run. Previous versions would default to 0.0.0.0 if no
-   bindaddr was specified.
-
-Gtalk:
- - The default value for 'context' and 'parkinglots' in gtalk.conf has
-   been changed to 'default', previously they were empty.
-
-chan_dahdi:
- - The mohinterpret=passthrough setting is deprecated in favor of
-   moh_signaling=notify.
-
-pbx_lua:
- - Execution no longer continues after applications that do dialplan jumps
-   (such as app.goto).  Now when an application such as app.goto() is called,
-   control is returned back to the pbx engine and the current extension
-   function stops executing.
- - the autoservice now defaults to being on by default
- - autoservice_start() and autoservice_start() no longer return a value.
-
-Queue:
- - Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
- - QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
-
-Asterisk Database:
- - The internal Asterisk database has been switched from Berkeley DB 1.86 to
-   SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
-   utility in the UTILS section of menuselect. If an existing astdb is found and no
-   astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
-   convert an existing astdb to the SQLite3 version automatically at runtime. If
-   moving back from Asterisk 10 to Asterisk 1.8, the astdb2bdb utility can be used
-   to create a Berkeley DB copy of the SQLite3 astdb that Asterisk 10 uses.
-
-Manager:
- - The AMI protocol version was incremented to 1.2 as a result of changing two
-   instances of the Unlink event to Bridge events. This change was documented
-   as part of the AMI 1.1 update, but two Unlink events were inadvertently left
-   unchanged.
-
-Module Support Level
- - All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
-   formats, funcs, pbx, and res have been updated to include MODULEINFO data
-   that includes <support_level> tags with a value of core, extended, or deprecated.
-   More information is available on the Asterisk wiki at
-   https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
-
-   Deprecated modules are now marked to not build by default and must be explicitly
-   enabled in menuselect.
-
-chan_sip:
- - Setting of HASH(SIP_CAUSE,<slave-channel-name>) on channels is now disabled
-   by default. It can be enabled using the 'storesipcause' option. This feature
-   has a significant performance penalty.
-
-UDPTL:
- - The default UDPTL port range in udptl.conf.sample differed from the defaults
-   in the source. If you didn't have a config file, you got 4500 to 4599. Now the
-   default is 4000 to 4999.
-
-===========================================================
-===========================================================
diff --git a/UPGRADE-12.txt b/UPGRADE-12.txt
deleted file mode 100644 (file)
index 665e016..0000000
+++ /dev/null
@@ -1,478 +0,0 @@
-===========================================================
-===
-=== Information for upgrading between Asterisk versions
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also include advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
-=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
-=== UPGRADE-10.txt  -- Upgrade info for 1.8 to 10
-=== UPGRADE-11.txt  -- Upgrade info for 10 to 11
-===
-===========================================================
-
-There are many significant architectural changes in Asterisk 12. It is
-recommended that you not only read through this document for important
-changes that affect an upgrade, but that you also read through the CHANGES
-document in depth to better understand the new options available to you.
-
-Additional information on the architectural changes made in Asterisk can be
-found on the Asterisk wiki (https://wiki.asterisk.org)
-
-Of particular note, the following systems in Asterisk underwent significant
-changes. Documentation for the changes and a specification for their
-behavior in Asterisk 12 is also available on the Asterisk wiki.
- - AMI: Many events were changed, and the semantics of channels and bridges
-        were defined. In particular, how channels and bridges behave under
-        transfer scenarios and situations involving multiple parties has
-        changed significantly. See https://wiki.asterisk.org/wiki/x/dAFRAQ
-        for more information.
- - CDR: CDR logic was extracted from the many locations it existed in across
-        Asterisk and implemented as a consumer of Stasis message bus events.
-        As a result, consistency of records has improved significantly and the
-        behavior of CDRs in transfer scenarios has been defined in the CDR
-        specification. However, significant behavioral changes in CDRs resulted
-        from the transition. The most significant change is the addition of
-        CDR entries when a channel who is the Party A in a CDR leaves a bridge.
-        See https://wiki.asterisk.org/wiki/x/pwpRAQ for more information.
- - CEL: Much like CDRs, CEL was removed from the many locations it existed in
-        across Asterisk and implemented as a consumer of Stasis message bus
-        events. It now closely follows the Bridging API model of channels and
-        bridges, and has a much closer consistency of conveyed events as AMI.
-        For the changes in events, see https://wiki.asterisk.org/wiki/x/4ICLAQ.
-
-Build System:
- - Removed the CHANNEL_TRACE development mode build option. Certain aspects of
-   the CHANNEL_TRACE build option were incompatible with the new bridging
-   architecture.
-
- - Asterisk now depends on libjansson, libuuid and optionally (but recommended)
-   libxslt and uriparser.
-
- - The new SIP stack and channel driver uses a particular version of PJSIP.
-   Please see https://wiki.asterisk.org/wiki/x/J4GLAQ for more information on
-   configuring and installing PJSIP for use with Asterisk.
-
-AgentLogin and chan_agent:
- - Along with AgentRequest, this application has been modified to be a
-   replacement for chan_agent. The chan_agent module and the Agent channel
-   driver have been removed from Asterisk, as the concept of a channel driver
-   proxying in front of another channel driver was incompatible with the new
-   architecture (and has had numerous problems through past versions of
-   Asterisk). The act of a channel calling the AgentLogin application places the
-   channel into a pool of agents that can be requested by the AgentRequest
-   application. Note that this application, as well as all other agent related
-   functionality, is now provided by the app_agent_pool module.
-
- - This application no longer performs agent authentication. If authentication
-   is desired, the dialplan needs to perform this function using the
-   Authenticate or VMAuthenticate application or through an AGI script before
-   running AgentLogin.
-
- - The agents.conf schema has changed. Rather than specifying agents on a
-   single line in comma delineated fashion, each agent is defined in a separate
-   context. This allows agents to use the power of context templates in their
-   definition.
-
- - A number of parameters from agents.conf have been removed. This includes
-   maxloginretries, autologoffunavail, updatecdr, goodbye, group, recordformat,
-   urlprefix, and savecallsin. These options were obsoleted by the move from
-   a channel driver model to the bridging/application model provided by
-   app_agent_pool.
-
- - The AGENTUPDATECDR channel variable has also been removed, for the same
-   reason as the updatecdr option.
-
- - The endcall and enddtmf configuration options are removed.  Use the
-   dialplan function CHANNEL(dtmf_features) to set DTMF features on the agent
-   channel before calling AgentLogin.
-
-AgentMonitorOutgoing
- - This application has been removed. It was a holdover from when
-   AgentCallbackLogin was removed.
-
-Answer
- - It is no longer possible to bypass updating the CDR when answering a
-   channel. CDRs are based on the channel state and will be updated when
-   the channel is Answered.
-
-ControlPlayback
- - The channel variable CPLAYBACKSTATUS may now return the value
-   'REMOTESTOPPED' when playback is stopped by an external entity.
-
-DISA
- - This application now has a dependency on the app_cdr module. It uses this
-   module to hide the CDR created prior to execution of the DISA application.
-
-DumpChan:
- - The output of DumpChan no longer includes the DirectBridge or IndirectBridge
-   fields. Instead, if a channel is in a bridge, it includes a BridgeID field
-   containing the unique ID of the bridge that the channel happens to be in.
-
-ForkCDR:
- - Nearly every parameter in ForkCDR has been updated and changed to reflect
-   the changes in CDRs. Please see the documentation for the ForkCDR
-   application, as well as the CDR specification on the Asterisk wiki.
-
-NoCDR:
- - The NoCDR application has been deprecated. Please use the CDR_PROP function
-   to disable CDRs on a channel.
-
-ParkAndAnnounce:
- - The app_parkandannounce module has been removed. The application
-   ParkAndAnnounce is now provided by the res_parking module. See the
-   Parking changes for more information.
-
-ResetCDR:
- - The 'w' and 'a' options have been removed. Dispatching CDRs to registered
-   backends occurs on an as-needed basis in order to preserve linkedid
-   propagation and other needed behavior.
- - The 'e' option is deprecated. Please use the CDR_PROP function to enable
-   CDRs on a channel that they were previously disabled on.
- - The ResetCDR application is no longer a part of core Asterisk, and instead
-   is now delivered as part of app_cdr.
-
-Queues:
- - Queue strategy rrmemory now has a predictable order similar to strategy
-   rrordered. Members will be called in the order that they are added to the
-   queue.
-
- - Removed the queues.conf check_state_unknown option.  It is no longer
-   necessary.
-
- - It is now possible to play the Queue prompts to the first user waiting in a
-   call queue. Note that this may impact the ability for agents to talk with
-   users, as a prompt may still be playing when an agent connects to the user.
-   This ability is disabled by default but can be enabled on an individual
-   queue using the 'announce-to-first-user' option.
-
- - The configuration options eventwhencalled and eventmemberstatus have been
-   removed.  As a result, the AMI events QueueMemberStatus, AgentCalled,
-   AgentConnect, AgentComplete, AgentDump, and AgentRingNoAnswer will always be
-   sent.  The "Variable" fields will also no longer exist on the Agent* events.
-   These events can be filtered out from a connected AMI client using the
-   eventfilter setting in manager.conf.
-
- - The queue log now differentiates between blind and attended transfers. A
-   blind transfer will result in a BLINDTRANSFER message with the destination
-   context and extension. An attended transfer will result in an
-   ATTENDEDTRANSFER message. This message will indicate the method by which
-   the attended transfer was completed: "BRIDGE" for a bridge merge, "APP"
-   for running an application on a bridge or channel, or "LINK" for linking
-   two bridges together with local channels. The queue log will also now detect
-   externally initiated blind and attended transfers and record the transfer
-   status accordingly.
-
- - When performing queue pause/unpause on an interface without specifying an
-   individual queue, the PAUSEALL/UNPAUSEALL event will only be logged if at
-   least one member of any queue exists for that interface.
-
-SetAMAFlags
- - This application is deprecated in favor of CHANNEL(amaflags).
-
-VoiceMail:
- - Mailboxes defined by app_voicemail MUST be referenced by the rest of the
-   system as mailbox@context.  The rest of the system cannot add @default
-   to mailbox identifiers for app_voicemail that do not specify a context
-   any longer.  It is a mailbox identifier format that should only be
-   interpreted by app_voicemail.
-
- - The voicemail.conf configuration file now has an 'alias' configuration
-   parameter for use with the Directory application. The voicemail realtime
-   database table schema has also been updated with an 'alias' column. Systems
-   using voicemail with realtime should update their schemas accordingly.
-
-Channel Drivers:
- - When a channel driver is configured to enable jiterbuffers, they are now
-   applied unconditionally when a channel joins a bridge. If a jitterbuffer
-   is already set for that channel when it enters, such as by the JITTERBUFFER
-   function, then the existing jitterbuffer will be used and the one set by
-   the channel driver will not be applied.
-
-chan_bridge
- - chan_bridge is removed and its functionality is incorporated into ConfBridge
-   itself.
-
-chan_dahdi:
- - Analog port dialing and deferred DTMF dialing for PRI now distinguishes
-   between 'w' and 'W'.  The 'w' pauses dialing for half a second.  The 'W'
-   pauses dialing for one second.
-
- - The default for inband_on_proceeding has changed to no.
-
- - The CLI command 'dahdi destroy channel' is now 'dahdi destroy channels'.
-   A range of channels can be specified to be destroyed. Note that this command
-   should only be used if you understand the risks it entails.
-
- - The script specified by the chan_dahdi.conf mwimonitornotify option now gets
-   the exact configured mailbox name.  For app_voicemail mailboxes this is
-   mailbox@context.
-
- - Added mwi_vm_boxes that also must be configured for ISDN MWI to be enabled.
-
- - ignore_failed_channels now defaults to True: the channel will continue to
-   be configured even if configuring it has failed. This is generally a
-   better setup for systems with not more than one DAHDI device or with DAHDI
-   >= 2.8.0 .
-
-chan_local:
- - The /b option has been removed.
-
- - chan_local moved into the system core and is no longer a loadable module.
-
-chan_sip:
- - The 'callevents' parameter has been removed. Hold AMI events are now raised
-   in the core, and can be filtered out using the 'eventfilter' parameter
-   in manager.conf.
-
- - Dynamic realtime tables for SIP Users can now include a 'path' field. This
-   will store the path information for that peer when it registers. Realtime
-   tables can also use the 'supportpath' field to enable Path header support.
-
- - LDAP realtime configurations for SIP Users now have the AstAccountPathSupport
-   objectIdentifier. This maps to the supportpath option in sip.conf.
-
-Core:
- - Masquerades as an operation inside Asterisk have been effectively hidden
-   by the migration to the Bridging API. As such, many 'quirks' of Asterisk
-   no longer occur. This includes renaming of channels, "<ZOMBIE>" channels,
-   dropping of frame/audio hooks, and other internal implementation details
-   that users had to deal with. This fundamental change has large implications
-   throughout the changes documented for this version. For more information
-   about the new core architecture of Asterisk, please see the Asterisk wiki.
-
- - The following channel variables have changed behavior which is described in
-   the CHANGES file: TRANSFER_CONTEXT, BRIDGEPEER, BRIDGEPVTCALLID,
-   ATTENDED_TRANSFER_COMPLETE_SOUND, DYNAMIC_FEATURENAME, and DYNAMIC_PEERNAME.
-
-AMI (Asterisk Manager Interface):
- - Version 1.4 - The details of what happens to a channel when a masquerade
-   happens (transfers, parking, etc) have changed.
-   - The Masquerade event now includes the Uniqueid's of the clone and original
-     channels.
-   - Channels no longer swap Uniqueid's as a result of the masquerade.
-   - Instead of a shell game of renames, there's now a single rename, appending
-     <ZOMBIE> to the name of the original channel.
-
- - *Major* changes were made to both the syntax as well as the semantics of the
-   AMI protocol. In particular, AMI events have been substantially modified
-   and improved in this version of Asterisk. The major event changes are listed
-   below.
-   - NewPeerAccount has been removed. NewAccountCode is raised instead.
-   - Reload events have been consolidated and standardized.
-   - ModuleLoadReport has been removed.
-   - FaxSent is now SendFAX; FaxReceived is now ReceiveFAX. This standardizes
-     app_fax and res_fax events.
-   - MusicOnHold has been replaced with MusicOnHoldStart and MusicOnHoldStop.
-   - JabberEvent has been removed.
-   - Hold is now in the core and will now raise Hold and Unhold events.
-   - Join is now QueueCallerJoin.
-   - Leave is now QueueCallerLeave.
-   - Agentlogin/Agentlogoff is now AgentLogin/AgentLogoff, respectively.
-   - ChannelUpdate has been removed.
-   - Local channel optimization is now conveyed via LocalOptimizationBegin and
-     LocalOptimizationEnd.
-   - BridgeAction and BridgeExec have been removed.
-   - BlindTransfer and AttendedTransfer events were added.
-   - Dial is now DialBegin and DialEnd.
-   - DTMF is now DTMFBegin and DTMFEnd.
-   - Bridge has been replaced with BridgeCreate, BridgeEnter, BridgeLeave, and
-     BridgeDestroy
-   - MusicOnHold has been replaced with MusicOnHoldStart and MusicOnHoldStop
-   - AGIExec is now AGIExecStart and AGIExecEnd
-   - AsyncAGI is now AsyncAGIStart, AsyncAGIExec, and AsyncAGIEnd
-
- - The 'MCID' AMI event now publishes a channel snapshot when available and
-   its non-channel-snapshot parameters now use either the "MCallerID" or
-   'MConnectedID' prefixes with Subaddr*, Name*, and Num* suffixes instead
-   of 'CallerID' and 'ConnectedID' to avoid confusion with similarly named
-   parameters in the channel snapshot.
-
- - The 'Channel' key used in the 'AlarmClear', 'Alarm', and 'DNDState' has been
-   renamed "DAHDIChannel" since it does not convey an Asterisk channel name.
-
- - All AMI events now contain a 'SystemName' field, if available.
-
- - Local channel information in events is now prefixed with 'LocalOne' and
-   'LocalTwo'. This replaces the suffix of '1' and '2' for the two halves of
-   the Local channel. This affects the 'LocalBridge', 'LocalOptimizationBegin',
-   and 'LocalOptimizationEnd' events.
-
- - The 'RTCPSent'/'RTCPReceived' events have been significantly modified from
-   previous versions. They now report all SR/RR packets sent/received, and
-   have been restructured to better reflect the data sent in a SR/RR. In
-   particular, the event structure now supports multiple report blocks.
-
- - The deprecated use of | (pipe) as a separator in the channelvars setting in
-   manager.conf has been removed.
-
- - The SIP SIPqualifypeer action now sends a response indicating it will qualify
-   a peer once a peer has been found to qualify.  Once the qualify has been
-   completed it will now issue a SIPqualifypeerdone event.
-
- - The AMI event 'Newexten' field 'Extension' is deprecated, and may be removed
-   in a future release. Please use the common 'Exten' field instead.
-
- - The AMI events 'ParkedCall', 'ParkedCallTimeOut', 'ParkedCallGiveUp', and
-   'UnParkedCall' have changed significantly in the new res_parking module.
-   - The 'Channel' and 'From' headers are gone. For the channel that was parked
-     or is coming out of parking, a 'Parkee' channel snapshot is issued and it
-     has a number of fields associated with it. The old 'Channel' header relayed
-     the same data as the new 'ParkeeChannel' header.
-   - The 'From' field was ambiguous and changed meaning depending on the event.
-     for most of these, it was the name of the channel that parked the call
-     (the 'Parker'). There is no longer a header that provides this channel name,
-     however the 'ParkerDialString' will contain a dialstring to redial the
-     device that parked the call.
-   - On UnParkedCall events, the 'From' header would instead represent the
-     channel responsible for retrieving the parkee. It receives a channel
-     snapshot labeled 'Retriever'. The 'from' field is is replaced with
-     'RetrieverChannel'.
-   - Lastly, the 'Exten' field has been replaced with 'ParkingSpace'.
-
- - The AMI event 'Parkinglot' (response to 'Parkinglots' command) in a similar
-   fashion has changed the field names 'StartExten' and 'StopExten' to
-   'StartSpace' and 'StopSpace' respectively.
-
- - The AMI 'Status' response event to the AMI Status action replaces the
-   'BridgedChannel' and 'BridgedUniqueid' headers with the 'BridgeID' header to
-   indicate what bridge the channel is currently in.
-
-CDR (Call Detail Records)
- - Significant changes have been made to the behavior of CDRs. The CDR engine
-   was effectively rewritten and built on the Stasis message bus. For a full
-   definition of CDR behavior in Asterisk 12, please read the specification
-   on the Asterisk wiki (wiki.asterisk.org).
-
- - CDRs will now be created between all participants in a bridge. For each
-   pair of channels in a bridge, a CDR is created to represent the path of
-   communication between those two endpoints. This lets an end user choose who
-   to bill for what during bridge operations with multiple parties.
-
- - The duration, billsec, start, answer, and end times now reflect the times
-   associated with the current CDR for the channel, as opposed to a cumulative
-   measurement of all CDRs for that channel.
-
-CEL:
- - The Uniqueid field for a channel is now a stable identifier, and will not
-   change due to transfers, parking, etc.
-
- - CEL has undergone significant rework in Asterisk 12, and is now built on the
-   Stasis message bus. Please see the specification for CEL on the Asterisk
-   wiki at https://wiki.asterisk.org/wiki/x/4ICLAQ for more detailed
-   information. A summary of the affected events is below:
-   - BRIDGE_START, BRIDGE_END, BRIDGE_UPDATE, 3WAY_START, 3WAY_END, CONF_ENTER,
-     CONF_EXIT, CONF_START, and CONF_END events have all been removed. These
-     events have been replaced by BRIDGE_ENTER/BRIDGE_EXIT.
-   - BLINDTRANSFER/ATTENDEDTRANSFER events now report the peer as NULL and
-     additional information in the extra string field.
-
-Dialplan Functions:
-
- - Certain dialplan functions have been marked as 'dangerous', and may only be
-   executed from the dialplan. Execution from extenal sources (AMI's GetVar and
-   SetVar actions; etc.) may be inhibited by setting live_dangerously in the
-   [options] section of asterisk.conf to no. SHELL(), channel locking, and
-   direct file read/write functions are marked as dangerous. DB_DELETE() and
-   REALTIME_DESTROY() are marked as dangerous for reads, but can now safely
-   accept writes (which ignore the provided value).
- - The default value for live_dangerously was changed from yes (in Asterisk 11
-   and earlier) to no (in Asterisk 12 and greater).
-
-Dialplan:
- - All channel and global variable names are evaluated in a case-sensitive
-   manner. In previous versions of Asterisk, variables created and evaluated in
-   the dialplan were evaluated case-insensitively, but built-in variables and
-   variable evaluation done internally within Asterisk was done
-   case-sensitively.
-
- - Asterisk has always had code to ignore dash '-' characters that are not
-   part of a character set in the dialplan extensions.  The code now
-   consistently ignores these characters when matching dialplan extensions.
-
- - BRIDGE_FEATURES channel variable is now casesensitive for feature letter
-   codes. Uppercase variants apply them to the calling party while lowercase
-   variants apply them to the called party.
-
-Features:
- - The features.conf [applicationmap] <FeatureName>  ActivatedBy option is
-   no longer honored.  The feature is always activated by the channel that has
-   DYNAMIC_FEATURES defined on it when it enters the bridge. Use predial to set
-   different values of DYNAMIC_FEATURES on the channels
-
- - Executing a dynamic feature on the bridge peer in a multi-party bridge will
-   execute it on all peers of the activating channel.
-
- - There is no longer an explicit 'features reload' CLI command. Features can
-   still be reloaded using 'module reload features'.
-
- - It is no longer necessary (or possible) to define the ATXFER_NULL_TECH in
-   features.c for atxferdropcall=no to work properly. This option now just
-   works.
-
-Parking:
- - Parking has been extracted from the Asterisk core as a loadable module,
-   res_parking.
-
- - Configuration is found in res_parking.conf. It is no longer supported in
-   features.conf
-
- - The arguments for the Park, ParkedCall, and ParkAndAnnounce applications
-   have been modified significantly. See the application documents for
-   specific details.
-
- - Numerous changes to Parking related applications, AMI and CLI commands and
-   internal inter-workings  have been made. Please read the CHANGES file for
-   the detailed list.
-
-Security Events Framework:
- - Security Event timestamps now use ISO 8601 formatted date/time instead of
-   the "seconds-microseconds" format that it was using previously.
-
-AGENT:
- - The password option has been disabled, as the AgentLogin application no
-   longer provides authentication.
-
-AUDIOHOOK_INHERIT:
- - Due to changes in the Asterisk core, this function is no longer needed to
-   preserve a MixMonitor on a channel during transfer operations and dialplan
-   execution. It is effectively obsolete.
-
-CDR: (function)
- - The 'amaflags' and 'accountcode' attributes for the CDR function are
-   deprecated. Use the CHANNEL function instead to access these attributes.
-
- - The 'l' option has been removed. When reading a CDR attribute, the most
-   recent record is always used. When writing a CDR attribute, all non-finalized
-   CDRs are updated.
-
- - The 'r' option has been removed, for the same reason as the 'l' option.
-
- - The 's' option has been removed, as LOCKED semantics no longer exist in the
-   CDR engine.
-
-VMCOUNT:
- - Mailboxes defined by app_voicemail MUST be referenced by the rest of the
-   system as mailbox@context.  The rest of the system cannot add @default
-   to mailbox identifiers for app_voicemail that do not specify a context
-   any longer.  It is a mailbox identifier format that should only be
-   interpreted by app_voicemail.
-
-res_rtp_asterisk:
- - ICE/STUN/TURN support in res_rtp_asterisk has been made optional. To enable
-   them, an Asterisk-specific version of PJSIP needs to be installed.
-   Tarballs are available from https://github.com/asterisk/pjproject/tags/.
-
-
-===========================================================
-===========================================================
diff --git a/UPGRADE-13.txt b/UPGRADE-13.txt
deleted file mode 100644 (file)
index d532d29..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-===========================================================
-===
-=== Information for upgrading between Asterisk versions
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also include advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
-=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
-=== UPGRADE-10.txt  -- Upgrade info for 1.8 to 10
-=== UPGRADE-11.txt  -- Upgrade info for 10 to 11
-=== UPGRADE-12.txt  -- Upgrade info for 11 to 12
-===========================================================
-
-General Asterisk Changes:
- - The asterisk command line -I option and the asterisk.conf internal_timing
-   option are removed and always enabled if any timing module is loaded.
-
- - The per console verbose level feature as previously implemented caused a
-   large performance penalty.  The fix required some minor incompatibilities
-   if the new rasterisk is used to connect to an earlier version.  If the new
-   rasterisk connects to an older Asterisk version then the root console verbose
-   level is always affected by the "core set verbose" command of the remote
-   console even though it may appear to only affect the current console.  If
-   an older version of rasterisk connects to the new version then the
-   "core set verbose" command will have no effect.
-
- - The asterisk compatibility options in asterisk.conf have been removed.
-   These options enabled certain backwards compatibility features for
-   pbx_realtime, res_agi, and app_set that made their behaviour similar to
-   Asterisk 1.4. Users who used these backwards compatibility settings should
-   update their dialplans to use ',' instead of '|' as a delimiter, and should
-   use the Set dialplan application instead of the MSet dialplan application.
-
-Build System:
- - Sample config files have been moved from configs/ to a subfolder of that
-   directory, 'samples'.
-
- - The menuselect utility has been pulled into the Asterisk repository. As a
-   result, the libxml2 development library is now a required dependency for
-   Asterisk.
-
- - Added a new Compiler Flag, REF_DEBUG. When enabled, reference counted
-   objects will emit additional debug information to the refs log file located
-   in the standard Asterisk log file directory. This log file is useful in
-   tracking down object leaks and other reference counting issues. Prior to
-   this version, this option was only available by modifying the source code
-   directly. This change also includes a new script, refcounter.py, in the
-   contrib folder that will process the refs log file.
-
-Applications:
-
-ConfBridge:
- - The sound_place_into_conference sound used in Confbridge is now deprecated
-   and is no longer functional since it has been broken since its inception
-   and the fix involved using a different method to achieve the same goal. The
-   new method to achieve this functionality is by using sound_begin to play
-   a sound to the conference when waitmarked users are moved into the conference.
-
- - Added 'Admin' header to ConfbridgeJoin, ConfbridgeLeave, ConfbridgeMute,
-   ConfbridgeUnmute, and ConfbridgeTalking AMI events.
-
-ControlPlayback:
- - The ControlPlayback and 'control stream file' AGI command will no longer
-   implicitly answer the channel. If you do not answer the channel prior to
-   using either this application or AGI command, you must send Progress
-   first.
-
-Queue:
- - Queue rules provided in queuerules.conf can no longer be named "general".
-
-SetMusicOnHold:
- - The SetMusicOnHold dialplan application was deprecated and has been removed.
-   Users of the application should use the CHANNEL function's musicclass
-   setting instead.
-
-WaitMusicOnHold:
- - The WaitMusicOnHold dialplan application was deprecated and has been
-   removed. Users of the application should use MusicOnHold with a duration
-   parameter instead.
-
-CDR Backends:
- - The cdr_sqlite module was deprecated and has been removed. Users of this
-   module should use the cdr_sqlite3_custom module instead.
-
-Channel Drivers:
-
-chan_dahdi:
- - SS7 support now requires libss7 v2.0 or later.
-
- - Added the inband_on_setup_ack compatibility option to chan_dahdi.conf to
-   deal with switches that don't send an inband progress indication in the
-   SETUP ACKNOWLEDGE message.
-   Default is now no.
-
-chan_gtalk
- - This module was deprecated and has been removed. Users of chan_gtalk
-   should use chan_motif.
-
-chan_h323
- - This module was deprecated and has been removed. Users of chan_h323
-   should use chan_ooh323.
-
-chan_jingle
- - This module was deprecated and has been removed. Users of chan_jingle
-   should use chan_motif.
-
-chan_pjsip:
- - Added a 'force_avp' option to chan_pjsip which will force the usage of
-   'RTP/AVP', 'RTP/AVPF', 'RTP/SAVP', or 'RTP/SAVPF' as the media transport type
-   in SDP offers depending on settings, even when DTLS is used for media
-   encryption.
-
- - Added a 'media_use_received_transport' option to chan_pjsip which will
-   cause the SDP answer to use the media transport as received in the SDP
-   offer.
-
-chan_sip:
- - Made set SIPREFERREDBYHDR as inheritable for better chan_pjsip
-   interoperability.
-
- - The SIPPEER dialplan function no longer supports using a colon as a
-   delimiter for parameters. The parameters for the function should be
-   delimited using a comma.
-
- - The SIPCHANINFO dialplan function was deprecated and has been removed. Users
-   of the function should use the CHANNEL function instead.
-
- - Added a 'force_avp' option for chan_sip. When enabled this option will
-   cause the media transport in the offer or answer SDP to be 'RTP/AVP',
-   'RTP/AVPF', 'RTP/SAVP', or 'RTP/SAVPF' even if a DTLS stream has been
-   configured. This option can be set to improve interoperability with WebRTC
-   clients that don't use the RFC defined transport for DTLS.
-
- - The 'dtlsverify' option in chan_sip now has additional values besides
-   'yes' and 'no'. If 'yes' is specified both the certificate and fingerprint
-   will be verified. If 'no' is specified then neither the certificate or
-   fingerprint is verified. If 'certificate' is specified then only the
-   certificate is verified. If 'fingerprint' is specified then only the
-   fingerprint is verified.
-
- - A 'dtlsfingerprint' option has been added to chan_sip which allows the
-   hash to be specified for the DTLS fingerprint placed in SDP. Supported
-   values are 'sha-1' and 'sha-256' with 'sha-256' being the default.
-
- - The 'progressinband=never' option is now more zealous in the persecution of
-   progress messages coming from Asterisk. Channels bridged with a SIP channel
-   that has 'progressinband=never' set will not be able to forward their
-   progress indications through to the SIP device. chan_sip will now turn such
-   progress indications into a 180 Ringing (if a 180 has not yet been
-   transmitted) if 'progressinband=never'.
-
-  - The codec preference order in an SDP during an offer is slightly different
-    than previous releases. Prior to Asterisk 13, the preference order of
-    codecs used to be:
-    (1) Our preferred codec
-    (2) Our configured codecs
-    (3) Any non-audio joint codecs
-
-    One of the ways the new media format architecture in Asterisk 13 improves
-    performance is by reference counting formats, such that they can be reused
-    in many places without additional allocation. To not require a large
-    amount of locking, an instance of a format is immutable by convention.
-    This works well except for formats with attributes. Since a media format
-    with an attribute is a different object than the same format without an
-    attribute, we have to carry over the formats with attributes from an
-    inbound offer so that the correct attributes are offered in an outgoing
-    INVITE request. This requires some subtle tweaks to the preference order
-    to ensure that the media format with attributes is offered to a remote
-    peer, as opposed to the same media format (but without attributes) that
-    may be stored in the peer object.
-
-    All of this means that our offer offer list will now be:
-    (1) Our preferred codec
-    (2) Any joint codecs offered by the inbound offer
-    (3) All other codecs that are not the preferred codec and not a joint
-        codec offered by the inbound offer
-
-chan_unistim:
- - The unistim.conf 'dateformat' has changed meaning of options values to conform
-   values used inside Unistim protocol
-
- - Added 'dtmf_duration' option with changing default operation to disable
-   receivied dtmf playback on unistim phone
-
-Core:
-
-Account Codes:
- - accountcode behavior changed somewhat to add functional peeraccount
-   support.  The main change is that local channels now cross accountcode
-   and peeraccount across the special bridge between the ;1 and ;2 channels
-   just like channels between normal bridges.  See the CHANGES file for
-   more information.
-
-ARI:
- - The ARI version has been changed to 1.5.0. This is to reflect backwards
-   compatible changes made since 12.0.0 was released.
-
- - Added a new ARI resource 'mailboxes' which allows the creation and
-   modification of mailboxes managed by external MWI. Modules res_mwi_external
-   and res_stasis_mailbox must be enabled to use this resource.
-
- - Added new events for externally initiated transfers. The event
-   BridgeBlindTransfer is now raised when a channel initiates a blind transfer
-   of a bridge in the ARI controlled application to the dialplan; the
-   BridgeAttendedTransfer event is raised when a channel initiates an
-   attended transfer of a bridge in the ARI controlled application to the
-   dialplan.
-
- - Channel variables may now be specified as a body parameter to the
-   POST /channels operation. The 'variables' key in the JSON is interpreted
-   as a sequence of key/value pairs that will be added to the created channel
-   as channel variables. Other parameters in the JSON body are treated as
-   query parameters of the same name.
-
- - A bug fix in bridge creation has caused a behavioural change in how
-   subscriptions are created for bridges. A bridge created through ARI, does
-   not, by itself, have a subscription created for any particular Stasis
-   application. When a channel in a Stasis application joins a bridge, an
-   implicit event subscription is created for that bridge as well. Previously,
-   when a channel left such a bridge, the subscription was leaked; this allowed
-   for later bridge events to continue to be pushed to the subscribed
-   applications. That leak has been fixed; as a result, bridge events that were
-   delivered after a channel left the bridge are no longer delivered. An
-   application must subscribe to a bridge through the applications resource if
-   it wishes to receive all events related to a bridge.
-
-AMI:
- - The AMI version has been changed to 2.5.0. This is to reflect backwards
-   compatible changes made since 12.0.0 was released.
-
- - The DialStatus field in the DialEnd event can now have additional values.
-   This includes ABORT, CONTINUE, and GOTO.
-
- - The res_mwi_external_ami module can, if loaded, provide additional AMI
-   actions and events that convey MWI state within Asterisk. This includes
-   the MWIGet, MWIUpdate, and MWIDelete actions, as well as the MWIGet and
-   MWIGetComplete events that occur in response to an MWIGet action.
-
- - AMI now contains a new class authorization, 'security'. This is used with
-   the following new events: FailedACL, InvalidAccountID, SessionLimit,
-   MemoryLimit, LoadAverageLimit, RequestNotAllowed, AuthMethodNotAllowed,
-   RequestBadFormat, SuccessfulAuth, UnexpectedAddress, ChallengeResponseFailed,
-   InvalidPassword, ChallengeSent, and InvalidTransport.
-
- - Bridge related events now have two additional fields: BridgeName and
-   BridgeCreator. BridgeName is a descriptive name for the bridge;
-   BridgeCreator is the name of the entity that created the bridge. This
-   affects the following events: ConfbridgeStart, ConfbridgeEnd,
-   ConfbridgeJoin, ConfbridgeLeave, ConfbridgeRecord, ConfbridgeStopRecord,
-   ConfbridgeMute, ConfbridgeUnmute, ConfbridgeTalking, BlindTransfer,
-   AttendedTransfer, BridgeCreate, BridgeDestroy, BridgeEnter, BridgeLeave
-
- - MixMonitor AMI actions now require users to have authorization classes.
-   * MixMonitor - system
-   * MixMonitorMute - call or system
-   * StopMixMonitor - call or system
-
- - Removed the undocumented manager.conf block-sockets option.  It interferes with
-   TCP/TLS inactivity timeouts.
-
- - The response to the PresenceState AMI action has historically contained two
-   Message keys. The first of these is used as an informative message regarding
-   the success/failure of the action; the second contains a Presence state
-   specific message. Having two keys with the same unique name in an AMI
-   message is cumbersome for some client; hence, the Presence specific Message
-   has been deprecated. The message will now contain a PresenceMessage key
-   for the presence specific information; the Message key containing presence
-   information will be removed in the next major version of AMI.
-
- - The manager.conf 'eventfilter' now takes an "extended" regular expression
-   instead of a "basic" one.
-
-CDRs:
- - The "endbeforehexten" setting now defaults to "yes", instead of "no".
-   When set to "no", yhis setting will cause a new CDR to be generated when a
-   channel enters into hangup logic (either the 'h' extension or a hangup
-   handler subroutine). In general, this is not the preferred default: this
-   causes extra CDRs to be generated for a channel in many common dialplans.
-
-CLI commands:
- - "core show settings" now lists the current console verbosity in addition
-   to the root console verbosity.
-
- - "core set verbose" has not been able to support the by module verbose
-   logging levels since verbose logging levels were made per console.  That
-   syntax is now removed and a silence option added in its place.
-
-Logging:
- - The 'verbose' setting in logger.conf still takes an optional argument,
-   specifying the verbosity level for each logging destination.  However,
-   the default is now to once again follow the current root console level.
-   As a result, using the AMI Command action with "core set verbose" could
-   again set the root console verbose level and affect the verbose level
-   logged.
-
-HTTP:
- - Added http.conf session_inactivity timer option to close HTTP connections
-   that aren't doing anything.
-
- - Added support for persistent HTTP connections.  To enable persistent
-   HTTP connections configure the keep alive time between HTTP requests.  The
-   keep alive time between HTTP requests is configured in http.conf with the
-   session_keep_alive parameter.
-
-Realtime Configuration:
- - WARNING: The database migration script that adds the 'extensions' table for
-   realtime had to be modified due to an error when installing for MySQL.  The
-   'extensions' table's 'id' column was changed to be a primary key.  This could
-   potentially cause a migration problem.  If so, it may be necessary to
-   manually alter the affected table/column to bring it back in line with the
-   migration scripts.
-
- - New columns have been added to realtime tables for 'support_path' on
-   ps_registrations and ps_aors and for 'path' on ps_contacts for the new
-   SIP Path support in chan_pjsip.
-
- - The following new tables have been added for pjsip realtime: 'ps_systems',
-   'ps_globals', 'ps_tranports', 'ps_registrations'.
-
- - The following columns were added to the 'ps_aors' realtime table:
-   'maximum_expiration', 'outbound_proxy', and 'support_path'.
-
- - The following columns were added to the 'ps_contacts' realtime table:
-   'outbound_proxy', 'user_agent', and 'path'.
-
- - New columns have been added to the ps_endpoints realtime table for the
-   'media_address', 'redirect_method' and 'set_var' options.  Also the
-   'mwi_fromuser' column was renamed to 'mwi_from_user'. A new column
-   'message_context' was added to let users configure how MESSAGE requests are
-   routed to the dialplan.
-
- - A new column was added to the 'ps_globals' realtime table for the 'debug'
-   option.
-
- - PJSIP endpoint columns 'tos_audio' and 'tos_video' have been changed from
-   yes/no enumerators to string values. 'cos_audio' and 'cos_video' have been
-   changed from yes/no enumerators to integer values. PJSIP transport column
-   'tos' has been changed from a yes/no enumerator to a string value. 'cos' has
-   been changed from a yes/no enumerator to an integer value.
-
- - The 'queues' and 'queue_members' realtime tables have been added to the
-   config Alembic scripts.
-
- - A new set of Alembic scripts has been added for CDR tables. This will create
-   a 'cdr' table with the default schema that Asterisk expects.
-
- - A new upgrade script has been added that adds a 'queue_rules' table for
-   app_queue. Users of app_queue can store queue rules in a database. It is
-   important to note that app_queue only looks for this table on module load or
-   module reload; for more information, see the CHANGES file.
-
-Resources:
-
-res_odbc:
-- The compatibility setting, allow_empty_string_in_nontext, has been removed.
-  Empty column values will be stored as empty strings during realtime updates.
-
-res_jabber:
- - This module was deprecated and has been removed. Users of this module should
-   use res_xmpp instead.
-
-res_http_websocket:
- - Added a compatibility option to ari.conf, sip.conf, and pjsip.conf
-   'websocket_write_timeout'. When a websocket connection exists where Asterisk
-   writes a substantial amount of data to the connected client, and the connected
-   client is slow to process the received data, the socket may be disconnected.
-   In such cases, it may be necessary to adjust this value.
-   Default is 100 ms.
-Scripts:
-
-safe_asterisk:
- - The safe_asterisk script was previously not installed on top of an existing
-   version. This caused bug-fixes in that script not to be deployed. If your
-   safe_asterisk script is customized, be sure to keep your changes. Custom
-   values for variables should be created in *.sh file(s) inside
-   ASTETCDIR/startup.d/. See ASTERISK-21965.
-
- - Changed a log message in safe_asterisk and the $NOTIFY mail subject. If
-   you use tools to parse either of them, update your parse functions
-   accordingly. The changed strings are:
-   - "Exited on signal $EXITSIGNAL" => "Asterisk exited on signal $EXITSIGNAL."
-   - "Asterisk Died" => "Asterisk on $MACHINE died (sig $EXITSIGNAL)"
-
-Utilities:
- - The refcounter program has been removed in favor of the refcounter.py script
-   in contrib/scripts.
-
-===========================================================
-===========================================================
diff --git a/UPGRADE-14.txt b/UPGRADE-14.txt
deleted file mode 100644 (file)
index aaf236b..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-===========================================================
-===
-=== Information for upgrading between Asterisk versions
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also include advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
-=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
-=== UPGRADE-10.txt  -- Upgrade info for 1.8 to 10
-=== UPGRADE-11.txt  -- Upgrade info for 10 to 11
-=== UPGRADE-12.txt  -- Upgrade info for 11 to 12
-=== UPGRADE-13.txt  -- Upgrade info for 12 to 13
-===========================================================
-
-From 14.6.0 to 14.7.0:
-
-Core:
- - ast_app_parse_timelen now returns an error if it encounters extra characters
-   at the end of the string to be parsed.
-
-From 14.4.0 to 14.5.0:
-
-Core:
- - Support for embedded modules has been removed.  This has not worked in
-   many years.  LOADABLE_MODULES menuselect option is also removed as
-   loadable module support is now always enabled.
-
-From 14.3.0 to 14.4.0:
-
-res_rtp_asterisk:
- - The RTP layer of Asterisk now has support for RFC 5761: "Multiplexing RTP
-   Data and Control Packets on a Single Port." For the PJSIP channel driver,
-   chan_pjsip, you can set "rtcp_mux = yes" on a PJSIP endpoint in pjsip.conf
-   to enable the feature. For chan_sip you can set "rtcp_mux = yes" either
-   globally or on a per-peer basis in sip.conf.
-
-New in 14.0.0
-
-ARI:
- - The policy for when to send "Dial" events has changed. Previously, "Dial"
-   events were sent on the calling channel's topic. However, starting in Asterisk
-   14, if there is no calling channel on which to send the event, the event is
-   instead sent on the called channel's topic. Note that for the ARI channels
-   resource's dial operation, this means that the "Dial" events will always be
-   sent on the called channel's topic.
-
-Channel Drivers:
-
-chan_dahdi:
- - For users using the FXO port (FXS signaling) distinctive ring detection
-   feature, you will need to adjust the dringX count values.  The count
-   values now only record ring end events instead of any DAHDI event.  A
-   ring-ring-ring pattern would exceed the pattern limits and stop
-   Caller-ID detection.
-
-chan_sip:
- - The SIP dial string has been extended past the [!dnid] option by another
-   exclamation mark: [!dnid[!fromuri].  An exclamation mark in the To-URI
-   will now mean changes to the From-URI.
-
-Core:
- - The REF_DEBUG compiler flag is now used to enable refdebug by default.
-   The setting can be overridden in asterisk.conf by setting refdebug in
-   the options category.  No recompile is required to enable/disable it.
-
- - Modified processing of command-line options to first parse only what
-   is necessary to read asterisk.conf. Once asterisk.conf is fully loaded,
-   the remaining options are processed.  The -X option now applies to
-   asterisk.conf only.  To enable #exec for other config files you must
-   set execincludes=yes in asterisk.conf.  Any other option set on the
-   command-line will now override the equivalent setting from asterisk.conf.
-
-AMI:
- - The 'ModuleCheck' Action's Version key will no longer show the module
-   version. The value will always be blank.
-
-CLI:
- - The 'core show file version' command has been removed. When Asterisk
-   moved to Git, the source control version support was removed. As a
-   result, the CLi command was no longer useful and was removed as well.
-
-Logging:
- - The first callid created is now 1 instead of 0.  The value 0
-   is now reserved to represent a lack of callid.
-
-AMI:
- - The Command action now sends the output from the CLI command as a series
-   of Output headers for each line instead of as a block of text with the
-   --END COMMAND-- delimiter to match the output from other actions.
-
-   Commands that fail to execute (no such command, invalid syntax etc.) now
-   return an Error response instead of Success.
-
-app_amd:
- - The 'maximum_number_of_words' configuration option and parameter to the AMD
-   application previously did not match the documented functionality + variable
-   name.  In Asterisk 13, a value of '3' would mean that if '3' words were detected,
-   the result would be detection as a 'MACHINE'.  As of this version, the value
-   reflects the maximum words that if EXCEEDED (rather than reached), would
-   result in detection as a machine.  This means that you should update this
-   value to be one higher than your previos value, if your previous value
-   was working well for you.
-
-===========================================================
-===========================================================
diff --git a/UPGRADE-15.txt b/UPGRADE-15.txt
deleted file mode 100644 (file)
index d47bbe3..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-===========================================================
-===
-=== Information for upgrading between Asterisk versions
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also include advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
-=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
-=== UPGRADE-10.txt  -- Upgrade info for 1.8 to 10
-=== UPGRADE-11.txt  -- Upgrade info for 10 to 11
-=== UPGRADE-12.txt  -- Upgrade info for 11 to 12
-=== UPGRADE-13.txt  -- Upgrade info for 12 to 13
-=== UPGRADE-14.txt  -- Upgrade info for 13 to 14
-===========================================================
-
-From 15.2.0 to 15.3.0:
-
-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.
-
-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.
-
-New in 15.0.0:
-
-Build System:
- - '--with-pjproject-bundled' is now the default when running ./configure
-   It can be disabled with '--without-pjproject-bundled'.
-
-Core:
- - Multi-stream support has been added so a channel can have multiple
-   streams of the same type such as audio and video.
-
- - The 'Data Retrieval API' has been removed. This API was not actively
-   maintained, was not added to new modules (such as res_pjsip), and there
-   exist better alternatives to acquire the same information, such as the
-   ARI. As a result, the 'DataGet' AMI action as well as the 'data get'
-   CLI command have been removed.
diff --git a/UPGRADE-16.txt b/UPGRADE-16.txt
deleted file mode 100644 (file)
index 93e4b52..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-===========================================================
-===
-=== Information for upgrading between Asterisk versions
-===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also include advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
-===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
-=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
-=== UPGRADE-10.txt  -- Upgrade info for 1.8 to 10
-=== UPGRADE-11.txt  -- Upgrade info for 10 to 11
-=== UPGRADE-12.txt  -- Upgrade info for 11 to 12
-=== UPGRADE-13.txt  -- Upgrade info for 12 to 13
-=== UPGRADE-14.txt  -- Upgrade info for 13 to 14
-=== UPGRADE-15.txt  -- Upgrade info for 14 to 15
-===========================================================
-
-New in 16.0.0:
-
-app_fax:
- - The app_fax module is now deprecated, users should migrate to the
-   replacement module res_fax.
-
-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.
-
-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 ContactStatus event will no longer be sent by PJSIP when a device
-   refreshes its registration.
- - 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.
-
-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`.
-
-chan_dahdi:
- - Timeouts for reading digits from analog phones are now configurable in
-   chan_dahdi.conf: firstdigit_timeout, interdigit_timeout, matchdigit_timeout.
-
-cdr_syslog:
- - The cdr_syslog module is now deprecated and by default it is no longer
-   built.
-
-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.
-
-Core:
- - libedit is no longer available as an embedded library and must be provided
-   by the system.
- - 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.
index 53e9c4a..3abdb34 100644 (file)
 ===========================================================
 ===
+=== THIS FILE IS AUTOMATICALLY GENERATED DURING THE RELEASE
+=== PROCESS. DO NOT MAKE CHANGES HERE. INSTEAD, REFER TO
+=== doc/UPGRADE-staging/README.md FOR MORE DETAILS.
+===
 === Information for upgrading between Asterisk versions
 ===
-=== These files document all the changes that MUST be taken
-=== into account when upgrading between the Asterisk
-=== versions listed below. These changes may require that
-=== you modify your configuration files, dialplan or (in
-=== some cases) source code if you have your own Asterisk
-=== modules or patches. These files also include advance
-=== notice of any functionality that has been marked as
-=== 'deprecated' and may be removed in a future release,
-=== along with the suggested replacement functionality.
+=== This file documents all the changes that MUST be taken
+=== into account when upgrading between certain Asterisk
+=== versions. These changes may require that you modify
+=== your configuration files, dialplan or (in some cases)
+=== source code if you have your own Asterisk modules or
+=== patches. This file also includes advance notice of any
+=== functionality that has been marked as 'deprecated' and
+=== may be removed in a future release, along with the
+=== suggested replacement functionality.
 ===
-=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
-=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
-=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
-=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
-=== UPGRADE-10.txt  -- Upgrade info for 1.8 to 10
-=== UPGRADE-11.txt  -- Upgrade info for 10 to 11
-=== UPGRADE-12.txt  -- Upgrade info for 11 to 12
-=== UPGRADE-13.txt  -- Upgrade info for 12 to 13
-=== UPGRADE-14.txt  -- Upgrade info for 13 to 14
-=== UPGRADE-15.txt  -- Upgrade info for 14 to 15
-=== UPGRADE-16.txt  -- Upgrade info for 15 to 16
 ===========================================================
 
-New in 17.0.0:
+New in 16.0.0:
+
+app_fax:
+ - The app_fax module is now deprecated, users should migrate to the
+   replacement module res_fax.
+
+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.
+
+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 ContactStatus event will no longer be sent by PJSIP when a device
+   refreshes its registration.
+ - 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.
+
+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`.
+
+chan_dahdi:
+ - Timeouts for reading digits from analog phones are now configurable in
+   chan_dahdi.conf: firstdigit_timeout, interdigit_timeout, matchdigit_timeout.
+
+cdr_syslog:
+ - The cdr_syslog module is now deprecated and by default it is no longer
+   built.
+
+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.
+
+Core:
+ - libedit is no longer available as an embedded library and must be provided
+   by the system.
+ - 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.
+
+From 15.2.0 to 15.3.0:
+
+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.
+
+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.
+
+New in 15.0.0:
+
+Build System:
+ - '--with-pjproject-bundled' is now the default when running ./configure
+   It can be disabled with '--without-pjproject-bundled'.
+
+Core:
+ - Multi-stream support has been added so a channel can have multiple
+   streams of the same type such as audio and video.
+
+ - The 'Data Retrieval API' has been removed. This API was not actively
+   maintained, was not added to new modules (such as res_pjsip), and there
+   exist better alternatives to acquire the same information, such as the
+   ARI. As a result, the 'DataGet' AMI action as well as the 'data get'
+   CLI command have been removed.
+
+From 14.6.0 to 14.7.0:
+
+Core:
+ - ast_app_parse_timelen now returns an error if it encounters extra characters
+   at the end of the string to be parsed.
+
+From 14.4.0 to 14.5.0:
+
+Core:
+ - Support for embedded modules has been removed.  This has not worked in
+   many years.  LOADABLE_MODULES menuselect option is also removed as
+   loadable module support is now always enabled.
+
+From 14.3.0 to 14.4.0:
+
+res_rtp_asterisk:
+ - The RTP layer of Asterisk now has support for RFC 5761: "Multiplexing RTP
+   Data and Control Packets on a Single Port." For the PJSIP channel driver,
+   chan_pjsip, you can set "rtcp_mux = yes" on a PJSIP endpoint in pjsip.conf
+   to enable the feature. For chan_sip you can set "rtcp_mux = yes" either
+   globally or on a per-peer basis in sip.conf.
+
+New in 14.0.0
+
+ARI:
+ - The policy for when to send "Dial" events has changed. Previously, "Dial"
+   events were sent on the calling channel's topic. However, starting in Asterisk
+   14, if there is no calling channel on which to send the event, the event is
+   instead sent on the called channel's topic. Note that for the ARI channels
+   resource's dial operation, this means that the "Dial" events will always be
+   sent on the called channel's topic.
+
+Channel Drivers:
+
+chan_dahdi:
+ - For users using the FXO port (FXS signaling) distinctive ring detection
+   feature, you will need to adjust the dringX count values.  The count
+   values now only record ring end events instead of any DAHDI event.  A
+   ring-ring-ring pattern would exceed the pattern limits and stop
+   Caller-ID detection.
+
+chan_sip:
+ - The SIP dial string has been extended past the [!dnid] option by another
+   exclamation mark: [!dnid[!fromuri].  An exclamation mark in the To-URI
+   will now mean changes to the From-URI.
+
+Core:
+ - The REF_DEBUG compiler flag is now used to enable refdebug by default.
+   The setting can be overridden in asterisk.conf by setting refdebug in
+   the options category.  No recompile is required to enable/disable it.
+
+ - Modified processing of command-line options to first parse only what
+   is necessary to read asterisk.conf. Once asterisk.conf is fully loaded,
+   the remaining options are processed.  The -X option now applies to
+   asterisk.conf only.  To enable #exec for other config files you must
+   set execincludes=yes in asterisk.conf.  Any other option set on the
+   command-line will now override the equivalent setting from asterisk.conf.
+
+AMI:
+ - The 'ModuleCheck' Action's Version key will no longer show the module
+   version. The value will always be blank.
+
+CLI:
+ - The 'core show file version' command has been removed. When Asterisk
+   moved to Git, the source control version support was removed. As a
+   result, the CLi command was no longer useful and was removed as well.
+
+Logging:
+ - The first callid created is now 1 instead of 0.  The value 0
+   is now reserved to represent a lack of callid.
+
+AMI:
+ - The Command action now sends the output from the CLI command as a series
+   of Output headers for each line instead of as a block of text with the
+   --END COMMAND-- delimiter to match the output from other actions.
+
+   Commands that fail to execute (no such command, invalid syntax etc.) now
+   return an Error response instead of Success.
+
+app_amd:
+ - The 'maximum_number_of_words' configuration option and parameter to the AMD
+   application previously did not match the documented functionality + variable
+   name.  In Asterisk 13, a value of '3' would mean that if '3' words were detected,
+   the result would be detection as a 'MACHINE'.  As of this version, the value
+   reflects the maximum words that if EXCEEDED (rather than reached), would
+   result in detection as a machine.  This means that you should update this
+   value to be one higher than your previos value, if your previous value
+   was working well for you.
+
+From 12 to 13:
+
+General Asterisk Changes:
+ - The asterisk command line -I option and the asterisk.conf internal_timing
+   option are removed and always enabled if any timing module is loaded.
+
+ - The per console verbose level feature as previously implemented caused a
+   large performance penalty.  The fix required some minor incompatibilities
+   if the new rasterisk is used to connect to an earlier version.  If the new
+   rasterisk connects to an older Asterisk version then the root console verbose
+   level is always affected by the "core set verbose" command of the remote
+   console even though it may appear to only affect the current console.  If
+   an older version of rasterisk connects to the new version then the
+   "core set verbose" command will have no effect.
+
+ - The asterisk compatibility options in asterisk.conf have been removed.
+   These options enabled certain backwards compatibility features for
+   pbx_realtime, res_agi, and app_set that made their behaviour similar to
+   Asterisk 1.4. Users who used these backwards compatibility settings should
+   update their dialplans to use ',' instead of '|' as a delimiter, and should
+   use the Set dialplan application instead of the MSet dialplan application.
+
+Build System:
+ - Sample config files have been moved from configs/ to a subfolder of that
+   directory, 'samples'.
+
+ - The menuselect utility has been pulled into the Asterisk repository. As a
+   result, the libxml2 development library is now a required dependency for
+   Asterisk.
+
+ - Added a new Compiler Flag, REF_DEBUG. When enabled, reference counted
+   objects will emit additional debug information to the refs log file located
+   in the standard Asterisk log file directory. This log file is useful in
+   tracking down object leaks and other reference counting issues. Prior to
+   this version, this option was only available by modifying the source code
+   directly. This change also includes a new script, refcounter.py, in the
+   contrib folder that will process the refs log file.
+
+Applications:
+
+ConfBridge:
+ - The sound_place_into_conference sound used in Confbridge is now deprecated
+   and is no longer functional since it has been broken since its inception
+   and the fix involved using a different method to achieve the same goal. The
+   new method to achieve this functionality is by using sound_begin to play
+   a sound to the conference when waitmarked users are moved into the conference.
+
+ - Added 'Admin' header to ConfbridgeJoin, ConfbridgeLeave, ConfbridgeMute,
+   ConfbridgeUnmute, and ConfbridgeTalking AMI events.
+
+ControlPlayback:
+ - The ControlPlayback and 'control stream file' AGI command will no longer
+   implicitly answer the channel. If you do not answer the channel prior to
+   using either this application or AGI command, you must send Progress
+   first.
+
+Queue:
+ - Queue rules provided in queuerules.conf can no longer be named "general".
+
+SetMusicOnHold:
+ - The SetMusicOnHold dialplan application was deprecated and has been removed.
+   Users of the application should use the CHANNEL function's musicclass
+   setting instead.
+
+WaitMusicOnHold:
+ - The WaitMusicOnHold dialplan application was deprecated and has been
+   removed. Users of the application should use MusicOnHold with a duration
+   parameter instead.
+
+CDR Backends:
+ - The cdr_sqlite module was deprecated and has been removed. Users of this
+   module should use the cdr_sqlite3_custom module instead.
+
+Channel Drivers:
+
+chan_dahdi:
+ - SS7 support now requires libss7 v2.0 or later.
+
+ - Added the inband_on_setup_ack compatibility option to chan_dahdi.conf to
+   deal with switches that don't send an inband progress indication in the
+   SETUP ACKNOWLEDGE message.
+   Default is now no.
+
+chan_gtalk
+ - This module was deprecated and has been removed. Users of chan_gtalk
+   should use chan_motif.
+
+chan_h323
+ - This module was deprecated and has been removed. Users of chan_h323
+   should use chan_ooh323.
+
+chan_jingle
+ - This module was deprecated and has been removed. Users of chan_jingle
+   should use chan_motif.
+
+chan_pjsip:
+ - Added a 'force_avp' option to chan_pjsip which will force the usage of
+   'RTP/AVP', 'RTP/AVPF', 'RTP/SAVP', or 'RTP/SAVPF' as the media transport type
+   in SDP offers depending on settings, even when DTLS is used for media
+   encryption.
+
+ - Added a 'media_use_received_transport' option to chan_pjsip which will
+   cause the SDP answer to use the media transport as received in the SDP
+   offer.
+
+chan_sip:
+ - Made set SIPREFERREDBYHDR as inheritable for better chan_pjsip
+   interoperability.
+
+ - The SIPPEER dialplan function no longer supports using a colon as a
+   delimiter for parameters. The parameters for the function should be
+   delimited using a comma.
+
+ - The SIPCHANINFO dialplan function was deprecated and has been removed. Users
+   of the function should use the CHANNEL function instead.
+
+ - Added a 'force_avp' option for chan_sip. When enabled this option will
+   cause the media transport in the offer or answer SDP to be 'RTP/AVP',
+   'RTP/AVPF', 'RTP/SAVP', or 'RTP/SAVPF' even if a DTLS stream has been
+   configured. This option can be set to improve interoperability with WebRTC
+   clients that don't use the RFC defined transport for DTLS.
+
+ - The 'dtlsverify' option in chan_sip now has additional values besides
+   'yes' and 'no'. If 'yes' is specified both the certificate and fingerprint
+   will be verified. If 'no' is specified then neither the certificate or
+   fingerprint is verified. If 'certificate' is specified then only the
+   certificate is verified. If 'fingerprint' is specified then only the
+   fingerprint is verified.
+
+ - A 'dtlsfingerprint' option has been added to chan_sip which allows the
+   hash to be specified for the DTLS fingerprint placed in SDP. Supported
+   values are 'sha-1' and 'sha-256' with 'sha-256' being the default.
+
+ - The 'progressinband=never' option is now more zealous in the persecution of
+   progress messages coming from Asterisk. Channels bridged with a SIP channel
+   that has 'progressinband=never' set will not be able to forward their
+   progress indications through to the SIP device. chan_sip will now turn such
+   progress indications into a 180 Ringing (if a 180 has not yet been
+   transmitted) if 'progressinband=never'.
+
+  - The codec preference order in an SDP during an offer is slightly different
+    than previous releases. Prior to Asterisk 13, the preference order of
+    codecs used to be:
+    (1) Our preferred codec
+    (2) Our configured codecs
+    (3) Any non-audio joint codecs
+
+    One of the ways the new media format architecture in Asterisk 13 improves
+    performance is by reference counting formats, such that they can be reused
+    in many places without additional allocation. To not require a large
+    amount of locking, an instance of a format is immutable by convention.
+    This works well except for formats with attributes. Since a media format
+    with an attribute is a different object than the same format without an
+    attribute, we have to carry over the formats with attributes from an
+    inbound offer so that the correct attributes are offered in an outgoing
+    INVITE request. This requires some subtle tweaks to the preference order
+    to ensure that the media format with attributes is offered to a remote
+    peer, as opposed to the same media format (but without attributes) that
+    may be stored in the peer object.
+
+    All of this means that our offer offer list will now be:
+    (1) Our preferred codec
+    (2) Any joint codecs offered by the inbound offer
+    (3) All other codecs that are not the preferred codec and not a joint
+        codec offered by the inbound offer
+
+chan_unistim:
+ - The unistim.conf 'dateformat' has changed meaning of options values to conform
+   values used inside Unistim protocol
+
+ - Added 'dtmf_duration' option with changing default operation to disable
+   receivied dtmf playback on unistim phone
+
+Core:
+
+Account Codes:
+ - accountcode behavior changed somewhat to add functional peeraccount
+   support.  The main change is that local channels now cross accountcode
+   and peeraccount across the special bridge between the ;1 and ;2 channels
+   just like channels between normal bridges.  See the CHANGES file for
+   more information.
+
+ARI:
+ - The ARI version has been changed to 1.5.0. This is to reflect backwards
+   compatible changes made since 12.0.0 was released.
+
+ - Added a new ARI resource 'mailboxes' which allows the creation and
+   modification of mailboxes managed by external MWI. Modules res_mwi_external
+   and res_stasis_mailbox must be enabled to use this resource.
+
+ - Added new events for externally initiated transfers. The event
+   BridgeBlindTransfer is now raised when a channel initiates a blind transfer
+   of a bridge in the ARI controlled application to the dialplan; the
+   BridgeAttendedTransfer event is raised when a channel initiates an
+   attended transfer of a bridge in the ARI controlled application to the
+   dialplan.
+
+ - Channel variables may now be specified as a body parameter to the
+   POST /channels operation. The 'variables' key in the JSON is interpreted
+   as a sequence of key/value pairs that will be added to the created channel
+   as channel variables. Other parameters in the JSON body are treated as
+   query parameters of the same name.
+
+ - A bug fix in bridge creation has caused a behavioural change in how
+   subscriptions are created for bridges. A bridge created through ARI, does
+   not, by itself, have a subscription created for any particular Stasis
+   application. When a channel in a Stasis application joins a bridge, an
+   implicit event subscription is created for that bridge as well. Previously,
+   when a channel left such a bridge, the subscription was leaked; this allowed
+   for later bridge events to continue to be pushed to the subscribed
+   applications. That leak has been fixed; as a result, bridge events that were
+   delivered after a channel left the bridge are no longer delivered. An
+   application must subscribe to a bridge through the applications resource if
+   it wishes to receive all events related to a bridge.
+
+AMI:
+ - The AMI version has been changed to 2.5.0. This is to reflect backwards
+   compatible changes made since 12.0.0 was released.
+
+ - The DialStatus field in the DialEnd event can now have additional values.
+   This includes ABORT, CONTINUE, and GOTO.
+
+ - The res_mwi_external_ami module can, if loaded, provide additional AMI
+   actions and events that convey MWI state within Asterisk. This includes
+   the MWIGet, MWIUpdate, and MWIDelete actions, as well as the MWIGet and
+   MWIGetComplete events that occur in response to an MWIGet action.
+
+ - AMI now contains a new class authorization, 'security'. This is used with
+   the following new events: FailedACL, InvalidAccountID, SessionLimit,
+   MemoryLimit, LoadAverageLimit, RequestNotAllowed, AuthMethodNotAllowed,
+   RequestBadFormat, SuccessfulAuth, UnexpectedAddress, ChallengeResponseFailed,
+   InvalidPassword, ChallengeSent, and InvalidTransport.
+
+ - Bridge related events now have two additional fields: BridgeName and
+   BridgeCreator. BridgeName is a descriptive name for the bridge;
+   BridgeCreator is the name of the entity that created the bridge. This
+   affects the following events: ConfbridgeStart, ConfbridgeEnd,
+   ConfbridgeJoin, ConfbridgeLeave, ConfbridgeRecord, ConfbridgeStopRecord,
+   ConfbridgeMute, ConfbridgeUnmute, ConfbridgeTalking, BlindTransfer,
+   AttendedTransfer, BridgeCreate, BridgeDestroy, BridgeEnter, BridgeLeave
+
+ - MixMonitor AMI actions now require users to have authorization classes.
+   * MixMonitor - system
+   * MixMonitorMute - call or system
+   * StopMixMonitor - call or system
+
+ - Removed the undocumented manager.conf block-sockets option.  It interferes with
+   TCP/TLS inactivity timeouts.
+
+ - The response to the PresenceState AMI action has historically contained two
+   Message keys. The first of these is used as an informative message regarding
+   the success/failure of the action; the second contains a Presence state
+   specific message. Having two keys with the same unique name in an AMI
+   message is cumbersome for some client; hence, the Presence specific Message
+   has been deprecated. The message will now contain a PresenceMessage key
+   for the presence specific information; the Message key containing presence
+   information will be removed in the next major version of AMI.
+
+ - The manager.conf 'eventfilter' now takes an "extended" regular expression
+   instead of a "basic" one.
+
+CDRs:
+ - The "endbeforehexten" setting now defaults to "yes", instead of "no".
+   When set to "no", yhis setting will cause a new CDR to be generated when a
+   channel enters into hangup logic (either the 'h' extension or a hangup
+   handler subroutine). In general, this is not the preferred default: this
+   causes extra CDRs to be generated for a channel in many common dialplans.
+
+CLI commands:
+ - "core show settings" now lists the current console verbosity in addition
+   to the root console verbosity.
+
+ - "core set verbose" has not been able to support the by module verbose
+   logging levels since verbose logging levels were made per console.  That
+   syntax is now removed and a silence option added in its place.
+
+Logging:
+ - The 'verbose' setting in logger.conf still takes an optional argument,
+   specifying the verbosity level for each logging destination.  However,
+   the default is now to once again follow the current root console level.
+   As a result, using the AMI Command action with "core set verbose" could
+   again set the root console verbose level and affect the verbose level
+   logged.
+
+HTTP:
+ - Added http.conf session_inactivity timer option to close HTTP connections
+   that aren't doing anything.
+
+ - Added support for persistent HTTP connections.  To enable persistent
+   HTTP connections configure the keep alive time between HTTP requests.  The
+   keep alive time between HTTP requests is configured in http.conf with the
+   session_keep_alive parameter.
+
+Realtime Configuration:
+ - WARNING: The database migration script that adds the 'extensions' table for
+   realtime had to be modified due to an error when installing for MySQL.  The
+   'extensions' table's 'id' column was changed to be a primary key.  This could
+   potentially cause a migration problem.  If so, it may be necessary to
+   manually alter the affected table/column to bring it back in line with the
+   migration scripts.
+
+ - New columns have been added to realtime tables for 'support_path' on
+   ps_registrations and ps_aors and for 'path' on ps_contacts for the new
+   SIP Path support in chan_pjsip.
+
+ - The following new tables have been added for pjsip realtime: 'ps_systems',
+   'ps_globals', 'ps_tranports', 'ps_registrations'.
+
+ - The following columns were added to the 'ps_aors' realtime table:
+   'maximum_expiration', 'outbound_proxy', and 'support_path'.
+
+ - The following columns were added to the 'ps_contacts' realtime table:
+   'outbound_proxy', 'user_agent', and 'path'.
+
+ - New columns have been added to the ps_endpoints realtime table for the
+   'media_address', 'redirect_method' and 'set_var' options.  Also the
+   'mwi_fromuser' column was renamed to 'mwi_from_user'. A new column
+   'message_context' was added to let users configure how MESSAGE requests are
+   routed to the dialplan.
+
+ - A new column was added to the 'ps_globals' realtime table for the 'debug'
+   option.
+
+ - PJSIP endpoint columns 'tos_audio' and 'tos_video' have been changed from
+   yes/no enumerators to string values. 'cos_audio' and 'cos_video' have been
+   changed from yes/no enumerators to integer values. PJSIP transport column
+   'tos' has been changed from a yes/no enumerator to a string value. 'cos' has
+   been changed from a yes/no enumerator to an integer value.
+
+ - The 'queues' and 'queue_members' realtime tables have been added to the
+   config Alembic scripts.
+
+ - A new set of Alembic scripts has been added for CDR tables. This will create
+   a 'cdr' table with the default schema that Asterisk expects.
+
+ - A new upgrade script has been added that adds a 'queue_rules' table for
+   app_queue. Users of app_queue can store queue rules in a database. It is
+   important to note that app_queue only looks for this table on module load or
+   module reload; for more information, see the CHANGES file.
+
+Resources:
+
+res_odbc:
+- The compatibility setting, allow_empty_string_in_nontext, has been removed.
+  Empty column values will be stored as empty strings during realtime updates.
+
+res_jabber:
+ - This module was deprecated and has been removed. Users of this module should
+   use res_xmpp instead.
+
+res_http_websocket:
+ - Added a compatibility option to ari.conf, sip.conf, and pjsip.conf
+   'websocket_write_timeout'. When a websocket connection exists where Asterisk
+   writes a substantial amount of data to the connected client, and the connected
+   client is slow to process the received data, the socket may be disconnected.
+   In such cases, it may be necessary to adjust this value.
+   Default is 100 ms.
+Scripts:
+
+safe_asterisk:
+ - The safe_asterisk script was previously not installed on top of an existing
+   version. This caused bug-fixes in that script not to be deployed. If your
+   safe_asterisk script is customized, be sure to keep your changes. Custom
+   values for variables should be created in *.sh file(s) inside
+   ASTETCDIR/startup.d/. See ASTERISK-21965.
+
+ - Changed a log message in safe_asterisk and the $NOTIFY mail subject. If
+   you use tools to parse either of them, update your parse functions
+   accordingly. The changed strings are:
+   - "Exited on signal $EXITSIGNAL" => "Asterisk exited on signal $EXITSIGNAL."
+   - "Asterisk Died" => "Asterisk on $MACHINE died (sig $EXITSIGNAL)"
+
+Utilities:
+ - The refcounter program has been removed in favor of the refcounter.py script
+   in contrib/scripts.
+
+From 11 to 12:
+
+There are many significant architectural changes in Asterisk 12. It is
+recommended that you not only read through this document for important
+changes that affect an upgrade, but that you also read through the CHANGES
+document in depth to better understand the new options available to you.
+
+Additional information on the architectural changes made in Asterisk can be
+found on the Asterisk wiki (https://wiki.asterisk.org)
+
+Of particular note, the following systems in Asterisk underwent significant
+changes. Documentation for the changes and a specification for their
+behavior in Asterisk 12 is also available on the Asterisk wiki.
+ - AMI: Many events were changed, and the semantics of channels and bridges
+        were defined. In particular, how channels and bridges behave under
+        transfer scenarios and situations involving multiple parties has
+        changed significantly. See https://wiki.asterisk.org/wiki/x/dAFRAQ
+        for more information.
+ - CDR: CDR logic was extracted from the many locations it existed in across
+        Asterisk and implemented as a consumer of Stasis message bus events.
+        As a result, consistency of records has improved significantly and the
+        behavior of CDRs in transfer scenarios has been defined in the CDR
+        specification. However, significant behavioral changes in CDRs resulted
+        from the transition. The most significant change is the addition of
+        CDR entries when a channel who is the Party A in a CDR leaves a bridge.
+        See https://wiki.asterisk.org/wiki/x/pwpRAQ for more information.
+ - CEL: Much like CDRs, CEL was removed from the many locations it existed in
+        across Asterisk and implemented as a consumer of Stasis message bus
+        events. It now closely follows the Bridging API model of channels and
+        bridges, and has a much closer consistency of conveyed events as AMI.
+        For the changes in events, see https://wiki.asterisk.org/wiki/x/4ICLAQ.
+
+Build System:
+ - Removed the CHANNEL_TRACE development mode build option. Certain aspects of
+   the CHANNEL_TRACE build option were incompatible with the new bridging
+   architecture.
+
+ - Asterisk now depends on libjansson, libuuid and optionally (but recommended)
+   libxslt and uriparser.
+
+ - The new SIP stack and channel driver uses a particular version of PJSIP.
+   Please see https://wiki.asterisk.org/wiki/x/J4GLAQ for more information on
+   configuring and installing PJSIP for use with Asterisk.
+
+AgentLogin and chan_agent:
+ - Along with AgentRequest, this application has been modified to be a
+   replacement for chan_agent. The chan_agent module and the Agent channel
+   driver have been removed from Asterisk, as the concept of a channel driver
+   proxying in front of another channel driver was incompatible with the new
+   architecture (and has had numerous problems through past versions of
+   Asterisk). The act of a channel calling the AgentLogin application places the
+   channel into a pool of agents that can be requested by the AgentRequest
+   application. Note that this application, as well as all other agent related
+   functionality, is now provided by the app_agent_pool module.
+
+ - This application no longer performs agent authentication. If authentication
+   is desired, the dialplan needs to perform this function using the
+   Authenticate or VMAuthenticate application or through an AGI script before
+   running AgentLogin.
+
+ - The agents.conf schema has changed. Rather than specifying agents on a
+   single line in comma delineated fashion, each agent is defined in a separate
+   context. This allows agents to use the power of context templates in their
+   definition.
+
+ - A number of parameters from agents.conf have been removed. This includes
+   maxloginretries, autologoffunavail, updatecdr, goodbye, group, recordformat,
+   urlprefix, and savecallsin. These options were obsoleted by the move from
+   a channel driver model to the bridging/application model provided by
+   app_agent_pool.
+
+ - The AGENTUPDATECDR channel variable has also been removed, for the same
+   reason as the updatecdr option.
+
+ - The endcall and enddtmf configuration options are removed.  Use the
+   dialplan function CHANNEL(dtmf_features) to set DTMF features on the agent
+   channel before calling AgentLogin.
+
+AgentMonitorOutgoing
+ - This application has been removed. It was a holdover from when
+   AgentCallbackLogin was removed.
+
+Answer
+ - It is no longer possible to bypass updating the CDR when answering a
+   channel. CDRs are based on the channel state and will be updated when
+   the channel is Answered.
+
+ControlPlayback
+ - The channel variable CPLAYBACKSTATUS may now return the value
+   'REMOTESTOPPED' when playback is stopped by an external entity.
+
+DISA
+ - This application now has a dependency on the app_cdr module. It uses this
+   module to hide the CDR created prior to execution of the DISA application.
+
+DumpChan:
+ - The output of DumpChan no longer includes the DirectBridge or IndirectBridge
+   fields. Instead, if a channel is in a bridge, it includes a BridgeID field
+   containing the unique ID of the bridge that the channel happens to be in.
+
+ForkCDR:
+ - Nearly every parameter in ForkCDR has been updated and changed to reflect
+   the changes in CDRs. Please see the documentation for the ForkCDR
+   application, as well as the CDR specification on the Asterisk wiki.
+
+NoCDR:
+ - The NoCDR application has been deprecated. Please use the CDR_PROP function
+   to disable CDRs on a channel.
+
+ParkAndAnnounce:
+ - The app_parkandannounce module has been removed. The application
+   ParkAndAnnounce is now provided by the res_parking module. See the
+   Parking changes for more information.
+
+ResetCDR:
+ - The 'w' and 'a' options have been removed. Dispatching CDRs to registered
+   backends occurs on an as-needed basis in order to preserve linkedid
+   propagation and other needed behavior.
+ - The 'e' option is deprecated. Please use the CDR_PROP function to enable
+   CDRs on a channel that they were previously disabled on.
+ - The ResetCDR application is no longer a part of core Asterisk, and instead
+   is now delivered as part of app_cdr.
+
+Queues:
+ - Queue strategy rrmemory now has a predictable order similar to strategy
+   rrordered. Members will be called in the order that they are added to the
+   queue.
+
+ - Removed the queues.conf check_state_unknown option.  It is no longer
+   necessary.
+
+ - It is now possible to play the Queue prompts to the first user waiting in a
+   call queue. Note that this may impact the ability for agents to talk with
+   users, as a prompt may still be playing when an agent connects to the user.
+   This ability is disabled by default but can be enabled on an individual
+   queue using the 'announce-to-first-user' option.
+
+ - The configuration options eventwhencalled and eventmemberstatus have been
+   removed.  As a result, the AMI events QueueMemberStatus, AgentCalled,
+   AgentConnect, AgentComplete, AgentDump, and AgentRingNoAnswer will always be
+   sent.  The "Variable" fields will also no longer exist on the Agent* events.
+   These events can be filtered out from a connected AMI client using the
+   eventfilter setting in manager.conf.
+
+ - The queue log now differentiates between blind and attended transfers. A
+   blind transfer will result in a BLINDTRANSFER message with the destination
+   context and extension. An attended transfer will result in an
+   ATTENDEDTRANSFER message. This message will indicate the method by which
+   the attended transfer was completed: "BRIDGE" for a bridge merge, "APP"
+   for running an application on a bridge or channel, or "LINK" for linking
+   two bridges together with local channels. The queue log will also now detect
+   externally initiated blind and attended transfers and record the transfer
+   status accordingly.
+
+ - When performing queue pause/unpause on an interface without specifying an
+   individual queue, the PAUSEALL/UNPAUSEALL event will only be logged if at
+   least one member of any queue exists for that interface.
+
+SetAMAFlags
+ - This application is deprecated in favor of CHANNEL(amaflags).
+
+VoiceMail:
+ - Mailboxes defined by app_voicemail MUST be referenced by the rest of the
+   system as mailbox@context.  The rest of the system cannot add @default
+   to mailbox identifiers for app_voicemail that do not specify a context
+   any longer.  It is a mailbox identifier format that should only be
+   interpreted by app_voicemail.
+
+ - The voicemail.conf configuration file now has an 'alias' configuration
+   parameter for use with the Directory application. The voicemail realtime
+   database table schema has also been updated with an 'alias' column. Systems
+   using voicemail with realtime should update their schemas accordingly.
+
+Channel Drivers:
+ - When a channel driver is configured to enable jiterbuffers, they are now
+   applied unconditionally when a channel joins a bridge. If a jitterbuffer
+   is already set for that channel when it enters, such as by the JITTERBUFFER
+   function, then the existing jitterbuffer will be used and the one set by
+   the channel driver will not be applied.
+
+chan_bridge
+ - chan_bridge is removed and its functionality is incorporated into ConfBridge
+   itself.
+
+chan_dahdi:
+ - Analog port dialing and deferred DTMF dialing for PRI now distinguishes
+   between 'w' and 'W'.  The 'w' pauses dialing for half a second.  The 'W'
+   pauses dialing for one second.
+
+ - The default for inband_on_proceeding has changed to no.
+
+ - The CLI command 'dahdi destroy channel' is now 'dahdi destroy channels'.
+   A range of channels can be specified to be destroyed. Note that this command
+   should only be used if you understand the risks it entails.
+
+ - The script specified by the chan_dahdi.conf mwimonitornotify option now gets
+   the exact configured mailbox name.  For app_voicemail mailboxes this is
+   mailbox@context.
+
+ - Added mwi_vm_boxes that also must be configured for ISDN MWI to be enabled.
+
+ - ignore_failed_channels now defaults to True: the channel will continue to
+   be configured even if configuring it has failed. This is generally a
+   better setup for systems with not more than one DAHDI device or with DAHDI
+   >= 2.8.0 .
+
+chan_local:
+ - The /b option has been removed.
+
+ - chan_local moved into the system core and is no longer a loadable module.
+
+chan_sip:
+ - The 'callevents' parameter has been removed. Hold AMI events are now raised
+   in the core, and can be filtered out using the 'eventfilter' parameter
+   in manager.conf.
+
+ - Dynamic realtime tables for SIP Users can now include a 'path' field. This
+   will store the path information for that peer when it registers. Realtime
+   tables can also use the 'supportpath' field to enable Path header support.
+
+ - LDAP realtime configurations for SIP Users now have the AstAccountPathSupport
+   objectIdentifier. This maps to the supportpath option in sip.conf.
+
+Core:
+ - Masquerades as an operation inside Asterisk have been effectively hidden
+   by the migration to the Bridging API. As such, many 'quirks' of Asterisk
+   no longer occur. This includes renaming of channels, "<ZOMBIE>" channels,
+   dropping of frame/audio hooks, and other internal implementation details
+   that users had to deal with. This fundamental change has large implications
+   throughout the changes documented for this version. For more information
+   about the new core architecture of Asterisk, please see the Asterisk wiki.
+
+ - The following channel variables have changed behavior which is described in
+   the CHANGES file: TRANSFER_CONTEXT, BRIDGEPEER, BRIDGEPVTCALLID,
+   ATTENDED_TRANSFER_COMPLETE_SOUND, DYNAMIC_FEATURENAME, and DYNAMIC_PEERNAME.
+
+AMI (Asterisk Manager Interface):
+ - Version 1.4 - The details of what happens to a channel when a masquerade
+   happens (transfers, parking, etc) have changed.
+   - The Masquerade event now includes the Uniqueid's of the clone and original
+     channels.
+   - Channels no longer swap Uniqueid's as a result of the masquerade.
+   - Instead of a shell game of renames, there's now a single rename, appending
+     <ZOMBIE> to the name of the original channel.
+
+ - *Major* changes were made to both the syntax as well as the semantics of the
+   AMI protocol. In particular, AMI events have been substantially modified
+   and improved in this version of Asterisk. The major event changes are listed
+   below.
+   - NewPeerAccount has been removed. NewAccountCode is raised instead.
+   - Reload events have been consolidated and standardized.
+   - ModuleLoadReport has been removed.
+   - FaxSent is now SendFAX; FaxReceived is now ReceiveFAX. This standardizes
+     app_fax and res_fax events.
+   - MusicOnHold has been replaced with MusicOnHoldStart and MusicOnHoldStop.
+   - JabberEvent has been removed.
+   - Hold is now in the core and will now raise Hold and Unhold events.
+   - Join is now QueueCallerJoin.
+   - Leave is now QueueCallerLeave.
+   - Agentlogin/Agentlogoff is now AgentLogin/AgentLogoff, respectively.
+   - ChannelUpdate has been removed.
+   - Local channel optimization is now conveyed via LocalOptimizationBegin and
+     LocalOptimizationEnd.
+   - BridgeAction and BridgeExec have been removed.
+   - BlindTransfer and AttendedTransfer events were added.
+   - Dial is now DialBegin and DialEnd.
+   - DTMF is now DTMFBegin and DTMFEnd.
+   - Bridge has been replaced with BridgeCreate, BridgeEnter, BridgeLeave, and
+     BridgeDestroy
+   - MusicOnHold has been replaced with MusicOnHoldStart and MusicOnHoldStop
+   - AGIExec is now AGIExecStart and AGIExecEnd
+   - AsyncAGI is now AsyncAGIStart, AsyncAGIExec, and AsyncAGIEnd
+
+ - The 'MCID' AMI event now publishes a channel snapshot when available and
+   its non-channel-snapshot parameters now use either the "MCallerID" or
+   'MConnectedID' prefixes with Subaddr*, Name*, and Num* suffixes instead
+   of 'CallerID' and 'ConnectedID' to avoid confusion with similarly named
+   parameters in the channel snapshot.
+
+ - The 'Channel' key used in the 'AlarmClear', 'Alarm', and 'DNDState' has been
+   renamed "DAHDIChannel" since it does not convey an Asterisk channel name.
+
+ - All AMI events now contain a 'SystemName' field, if available.
+
+ - Local channel information in events is now prefixed with 'LocalOne' and
+   'LocalTwo'. This replaces the suffix of '1' and '2' for the two halves of
+   the Local channel. This affects the 'LocalBridge', 'LocalOptimizationBegin',
+   and 'LocalOptimizationEnd' events.
+
+ - The 'RTCPSent'/'RTCPReceived' events have been significantly modified from
+   previous versions. They now report all SR/RR packets sent/received, and
+   have been restructured to better reflect the data sent in a SR/RR. In
+   particular, the event structure now supports multiple report blocks.
+
+ - The deprecated use of | (pipe) as a separator in the channelvars setting in
+   manager.conf has been removed.
+
+ - The SIP SIPqualifypeer action now sends a response indicating it will qualify
+   a peer once a peer has been found to qualify.  Once the qualify has been
+   completed it will now issue a SIPqualifypeerdone event.
+
+ - The AMI event 'Newexten' field 'Extension' is deprecated, and may be removed
+   in a future release. Please use the common 'Exten' field instead.
+
+ - The AMI events 'ParkedCall', 'ParkedCallTimeOut', 'ParkedCallGiveUp', and
+   'UnParkedCall' have changed significantly in the new res_parking module.
+   - The 'Channel' and 'From' headers are gone. For the channel that was parked
+     or is coming out of parking, a 'Parkee' channel snapshot is issued and it
+     has a number of fields associated with it. The old 'Channel' header relayed
+     the same data as the new 'ParkeeChannel' header.
+   - The 'From' field was ambiguous and changed meaning depending on the event.
+     for most of these, it was the name of the channel that parked the call
+     (the 'Parker'). There is no longer a header that provides this channel name,
+     however the 'ParkerDialString' will contain a dialstring to redial the
+     device that parked the call.
+   - On UnParkedCall events, the 'From' header would instead represent the
+     channel responsible for retrieving the parkee. It receives a channel
+     snapshot labeled 'Retriever'. The 'from' field is is replaced with
+     'RetrieverChannel'.
+   - Lastly, the 'Exten' field has been replaced with 'ParkingSpace'.
+
+ - The AMI event 'Parkinglot' (response to 'Parkinglots' command) in a similar
+   fashion has changed the field names 'StartExten' and 'StopExten' to
+   'StartSpace' and 'StopSpace' respectively.
+
+ - The AMI 'Status' response event to the AMI Status action replaces the
+   'BridgedChannel' and 'BridgedUniqueid' headers with the 'BridgeID' header to
+   indicate what bridge the channel is currently in.
+
+CDR (Call Detail Records)
+ - Significant changes have been made to the behavior of CDRs. The CDR engine
+   was effectively rewritten and built on the Stasis message bus. For a full
+   definition of CDR behavior in Asterisk 12, please read the specification
+   on the Asterisk wiki (wiki.asterisk.org).
+
+ - CDRs will now be created between all participants in a bridge. For each
+   pair of channels in a bridge, a CDR is created to represent the path of
+   communication between those two endpoints. This lets an end user choose who
+   to bill for what during bridge operations with multiple parties.
+
+ - The duration, billsec, start, answer, and end times now reflect the times
+   associated with the current CDR for the channel, as opposed to a cumulative
+   measurement of all CDRs for that channel.
+
+CEL:
+ - The Uniqueid field for a channel is now a stable identifier, and will not
+   change due to transfers, parking, etc.
+
+ - CEL has undergone significant rework in Asterisk 12, and is now built on the
+   Stasis message bus. Please see the specification for CEL on the Asterisk
+   wiki at https://wiki.asterisk.org/wiki/x/4ICLAQ for more detailed
+   information. A summary of the affected events is below:
+   - BRIDGE_START, BRIDGE_END, BRIDGE_UPDATE, 3WAY_START, 3WAY_END, CONF_ENTER,
+     CONF_EXIT, CONF_START, and CONF_END events have all been removed. These
+     events have been replaced by BRIDGE_ENTER/BRIDGE_EXIT.
+   - BLINDTRANSFER/ATTENDEDTRANSFER events now report the peer as NULL and
+     additional information in the extra string field.
+
+Dialplan Functions:
+
+ - Certain dialplan functions have been marked as 'dangerous', and may only be
+   executed from the dialplan. Execution from extenal sources (AMI's GetVar and
+   SetVar actions; etc.) may be inhibited by setting live_dangerously in the
+   [options] section of asterisk.conf to no. SHELL(), channel locking, and
+   direct file read/write functions are marked as dangerous. DB_DELETE() and
+   REALTIME_DESTROY() are marked as dangerous for reads, but can now safely
+   accept writes (which ignore the provided value).
+ - The default value for live_dangerously was changed from yes (in Asterisk 11
+   and earlier) to no (in Asterisk 12 and greater).
+
+Dialplan:
+ - All channel and global variable names are evaluated in a case-sensitive
+   manner. In previous versions of Asterisk, variables created and evaluated in
+   the dialplan were evaluated case-insensitively, but built-in variables and
+   variable evaluation done internally within Asterisk was done
+   case-sensitively.
+
+ - Asterisk has always had code to ignore dash '-' characters that are not
+   part of a character set in the dialplan extensions.  The code now
+   consistently ignores these characters when matching dialplan extensions.
+
+ - BRIDGE_FEATURES channel variable is now casesensitive for feature letter
+   codes. Uppercase variants apply them to the calling party while lowercase
+   variants apply them to the called party.
+
+Features:
+ - The features.conf [applicationmap] <FeatureName>  ActivatedBy option is
+   no longer honored.  The feature is always activated by the channel that has
+   DYNAMIC_FEATURES defined on it when it enters the bridge. Use predial to set
+   different values of DYNAMIC_FEATURES on the channels
+
+ - Executing a dynamic feature on the bridge peer in a multi-party bridge will
+   execute it on all peers of the activating channel.
+
+ - There is no longer an explicit 'features reload' CLI command. Features can
+   still be reloaded using 'module reload features'.
+
+ - It is no longer necessary (or possible) to define the ATXFER_NULL_TECH in
+   features.c for atxferdropcall=no to work properly. This option now just
+   works.
+
+Parking:
+ - Parking has been extracted from the Asterisk core as a loadable module,
+   res_parking.
+
+ - Configuration is found in res_parking.conf. It is no longer supported in
+   features.conf
+
+ - The arguments for the Park, ParkedCall, and ParkAndAnnounce applications
+   have been modified significantly. See the application documents for
+   specific details.
+
+ - Numerous changes to Parking related applications, AMI and CLI commands and
+   internal inter-workings  have been made. Please read the CHANGES file for
+   the detailed list.
+
+Security Events Framework:
+ - Security Event timestamps now use ISO 8601 formatted date/time instead of
+   the "seconds-microseconds" format that it was using previously.
+
+AGENT:
+ - The password option has been disabled, as the AgentLogin application no
+   longer provides authentication.
+
+AUDIOHOOK_INHERIT:
+ - Due to changes in the Asterisk core, this function is no longer needed to
+   preserve a MixMonitor on a channel during transfer operations and dialplan
+   execution. It is effectively obsolete.
+
+CDR: (function)
+ - The 'amaflags' and 'accountcode' attributes for the CDR function are
+   deprecated. Use the CHANNEL function instead to access these attributes.
+
+ - The 'l' option has been removed. When reading a CDR attribute, the most
+   recent record is always used. When writing a CDR attribute, all non-finalized
+   CDRs are updated.
+
+ - The 'r' option has been removed, for the same reason as the 'l' option.
+
+ - The 's' option has been removed, as LOCKED semantics no longer exist in the
+   CDR engine.
+
+VMCOUNT:
+ - Mailboxes defined by app_voicemail MUST be referenced by the rest of the
+   system as mailbox@context.  The rest of the system cannot add @default
+   to mailbox identifiers for app_voicemail that do not specify a context
+   any longer.  It is a mailbox identifier format that should only be
+   interpreted by app_voicemail.
+
+res_rtp_asterisk:
+ - ICE/STUN/TURN support in res_rtp_asterisk has been made optional. To enable
+   them, an Asterisk-specific version of PJSIP needs to be installed.
+   Tarballs are available from https://github.com/asterisk/pjproject/tags/.
+
+From 11.6 to 11.7:
+ConfBridge
+ - ConfBridge now has the ability to set the language of announcements to the
+   conference.  The language can be set on a bridge profile in confbridge.conf
+   or by the dialplan function CONFBRIDGE(bridge,language)=en.
+chan_sip - Clarify The "sip show peers" Forcerport Column And Add Comedia
+ - Under the "Forcerport" column, the "N" used to mean NAT (i.e. Yes).  With
+   the additon of auto_* NAT settings, the meaning changed and there was a
+   certain combination of letters added to indicate the current setting. The
+   combination of using "Y", "N", "A" or "a", can be confusing.  Therefore, we
+   now display clearly what the current Forcerport setting is: "Yes", "No",
+   "Auto (Yes)", "Auto (No)".
+ - Since we are clarifying the Forcerport column, we have added a column to
+   display the Comedia setting since this is useful information as well.  We
+   no longer have a simple "NAT" setting like other versions before 11.
+
+From 11.5 to 11.6:
+* res_agi will now properly indicate if there was an error in streaming an
+  audio file.  The result code will be -1 and the result returned from the
+  the function will be RESULT_FAILURE instead of the prior behavior of always
+  returning RESULT_SUCCESS even if there was an error.
+
+From 11.4 to 11.5:
+* The default settings for chan_sip are now overriden properly by the general
+  settings in sip.conf.  Please look over your settings upon upgrading.
+
+From 11.3 to 11.4:
+* Added the 'n' option to MeetMe to prevent application of the DENOISE function
+  to a channel joining a conference. Some channel drivers that vary the number
+  of audio samples in a voice frame will experience significant quality problems
+  if a denoiser is attached to the channel; this option gives them the ability
+  to remove the denoiser without having to unload func_speex.
+
+* The Registry AMI event for SIP registrations will now always include the
+  Username field. A previous bug fix missed an instance where it was not
+  included; that has been corrected in this release.
+
+From 11.2.0 to 11.2.1:
+* Asterisk would previously not output certain error messages when a remote
+  console attempted to connect to Asterisk and no instance of Asterisk was
+  running. This error message is displayed on stderr; as a result, some
+  initialization scripts that used remote consoles to test for the presence
+  of a running Asterisk instance started to display erroneous error messages.
+  The init.d scripts and the safe_asterisk have been updated in the contrib
+  folder to account for this.
+
+From 11.2 to 11.3:
+
+* Now by default, when Asterisk is installed in a path other than /usr, the
+  Asterisk binary will search for shared libraries in ${libdir} in addition to
+  searching system libraries. This allows Asterisk to find its shared
+  libraries without having to specify LD_LIBRARY_PATH. This can be disabled by
+  passing --disable-rpath to configure.
+
+From 10 to 11:
+
+Voicemail:
+ - All voicemails now have a "msg_id" which uniquely identifies a message. For
+   users of filesystem and IMAP storage of voicemail, this should be transparent.
+   For users of ODBC, you will need to add a "msg_id" column to your voice mail
+   messages table. This should be a string capable of holding at least 32 characters.
+   All messages created in old Asterisk installations will have a msg_id added to
+   them when required. This operation should be transparent as well.
+
+Parking:
+ - The comebacktoorigin setting must now be set per parking lot. The setting in
+   the general section will not be applied automatically to each parking lot.
+ - The BLINDTRANSFER channel variable is deleted from a channel when it is
+   bridged to prevent subtle bugs in the parking feature.  The channel
+   variable is used by Asterisk internally for the Park application to work
+   properly.  If you were using it for your own purposes, copy it to your
+   own channel variable before the channel is bridged.
+
+res_ais:
+ - Users of res_ais in versions of Asterisk prior to Asterisk 11 must change
+   to use the res_corosync module, instead.  OpenAIS is deprecated, but
+   Corosync is still actively developed and maintained.  Corosync came out of
+   the OpenAIS project.
+
+Dialplan Functions:
+ - MAILBOX_EXISTS has been deprecated. Use VM_INFO with the 'exists' parameter
+   instead.
+ - Macro has been deprecated in favor of GoSub.  For redirecting and connected
+   line purposes use the following variables instead of their macro equivalents:
+   REDIRECTING_SEND_SUB, REDIRECTING_SEND_SUB_ARGS,
+   CONNECTED_LINE_SEND_SUB, CONNECTED_LINE_SEND_SUB_ARGS.
+ - The REDIRECTING function now supports the redirecting original party id
+   and reason.
+ - The HANGUPCAUSE and HANGUPCAUSE_KEYS functions have been introduced to
+   provide a replacement for the SIP_CAUSE hash. The HangupCauseClear
+   application has also been introduced to remove this data from the channel
+   when necessary.
+
+
+func_enum:
+ - ENUM query functions now return a count of -1 on lookup error to
+   differentiate between a failed query and a successful query with 0 results
+   matching the specified type.
+
+CDR:
+ - cdr_adaptive_odbc now supports specifying a schema so that Asterisk can
+   connect to databases that use schemas.
+
+Configuration Files:
+ - Files listed below have been updated to be more consistent with how Asterisk
+   parses configuration files.  This makes configuration files more consistent
+   with what is expected across modules.
+
+   - cdr.conf: [general] and [csv] sections
+   - dnsmgr.conf
+   - dsp.conf
+
+ - The 'verbose' setting in logger.conf now takes an optional argument,
+   specifying the verbosity level for each logging destination.  The default,
+   if not otherwise specified, is a verbosity of 3.
+
+AMI:
+  - DBDelTree now correctly returns an error when 0 rows are deleted just as
+    the DBDel action does.
+  - The IAX2 PeerStatus event now sends a 'Port' header.  In Asterisk 10, this was
+    erroneously being sent as a 'Post' header.
+
+CCSS:
+ - Macro is deprecated. Use cc_callback_sub instead of cc_callback_macro
+   in channel configurations.
+
+app_meetme:
+  - The 'c' option (announce user count) will now work even if the 'q' (quiet)
+    option is enabled.
+
+app_followme:
+ - Answered outgoing calls no longer get cut off when the next step is started.
+   You now have until the last step times out to decide if you want to accept
+   the call or not before being disconnected.
+
+chan_gtalk:
+ - chan_gtalk has been deprecated in favor of the chan_motif channel driver. It is recommended
+   that users switch to using it as it is a core supported module.
+
+chan_jingle:
+ - chan_jingle has been deprecated in favor of the chan_motif channel driver. It is recommended
+   that users switch to using it as it is a core supported module.
+
+SIP
+===
+ - A new option "tonezone" for setting default tonezone for the channel driver
+   or individual devices
+ - A new manager event, "SessionTimeout" has been added and is triggered when
+   a call is terminated due to RTP stream inactivity or SIP session timer
+   expiration.
+ - SIP_CAUSE is now deprecated.  It has been modified to use the same
+   mechanism as the HANGUPCAUSE function.  Behavior should not change, but
+   performance should be vastly improved.  The HANGUPCAUSE function should now
+   be used instead of SIP_CAUSE. Because of this, the storesipcause option in
+   sip.conf is also deprecated.
+ - The sip paramater for Originating Line Information (oli, isup-oli, and
+   ss7-oli) is now parsed out of the From header and copied into the channel's
+   ANI2 information field.  This is readable from the CALLERID(ani2) dialplan
+   function.
+ - ICE support has been added and is enabled by default. Some endpoints may have
+   problems with the ICE candidates within the SDP. If this is the case ICE support
+   can be disabled globally or on a per-endpoint basis using the icesupport
+   configuration option. Symptoms of this include one way media or no media flow.
+
+chan_unistim
+ - Due to massive update in chan_unistim phone keys functions and on-screen
+   information changed.
+
+users.conf:
+ - A defined user with hasvoicemail=yes now finally uses a Gosub to stdexten
+   as documented in extensions.conf.sample since v1.6.0 instead of a Macro as
+   documented in v1.4.  Set the asterisk.conf stdexten=macro parameter to
+   invoke the stdexten the old way.
+
+res_jabber
+ - This module has been deprecated in favor of the res_xmpp module. The res_xmpp
+   module is backwards compatible with the res_jabber configuration file, dialplan
+   functions, and AMI actions. The old CLI commands can also be made available using
+   the res_clialiases template for Asterisk 11.
+
+From 1.8 to 10:
+
+cel_pgsql:
+ - This module now expects an 'extra' column in the database for data added
+   using the CELGenUserEvent() application.
+
+ConfBridge
+ - ConfBridge's dialplan arguments have changed and are not
+   backwards compatible.
+
+File Interpreters
+ - The format interpreter formats/format_sln16.c for the file extension
+   '.sln16' has been removed. The '.sln16' file interpreter now exists
+   in the formats/format_sln.c module along with new support for sln12,
+   sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
+
+HTTP:
+ - A bindaddr must be specified in order for the HTTP server
+   to run. Previous versions would default to 0.0.0.0 if no
+   bindaddr was specified.
+
+Gtalk:
+ - The default value for 'context' and 'parkinglots' in gtalk.conf has
+   been changed to 'default', previously they were empty.
+
+chan_dahdi:
+ - The mohinterpret=passthrough setting is deprecated in favor of
+   moh_signaling=notify.
+
+pbx_lua:
+ - Execution no longer continues after applications that do dialplan jumps
+   (such as app.goto).  Now when an application such as app.goto() is called,
+   control is returned back to the pbx engine and the current extension
+   function stops executing.
+ - the autoservice now defaults to being on by default
+ - autoservice_start() and autoservice_start() no longer return a value.
+
+Queue:
+ - Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
+ - QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
+
+Asterisk Database:
+ - The internal Asterisk database has been switched from Berkeley DB 1.86 to
+   SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
+   utility in the UTILS section of menuselect. If an existing astdb is found and no
+   astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
+   convert an existing astdb to the SQLite3 version automatically at runtime. If
+   moving back from Asterisk 10 to Asterisk 1.8, the astdb2bdb utility can be used
+   to create a Berkeley DB copy of the SQLite3 astdb that Asterisk 10 uses.
+
+Manager:
+ - The AMI protocol version was incremented to 1.2 as a result of changing two
+   instances of the Unlink event to Bridge events. This change was documented
+   as part of the AMI 1.1 update, but two Unlink events were inadvertently left
+   unchanged.
+
+Module Support Level
+ - All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
+   formats, funcs, pbx, and res have been updated to include MODULEINFO data
+   that includes <support_level> tags with a value of core, extended, or deprecated.
+   More information is available on the Asterisk wiki at
+   https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
+
+   Deprecated modules are now marked to not build by default and must be explicitly
+   enabled in menuselect.
 
 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
-
-func_callerid:
- - The CALLERPRES() dialplan function, deprecated in Asterisk 1.8, has been
-   removed.
-
-res_parking:
- - The PARKINGSLOT channel variable, deprecated in Asterisk 12 in favor of the
-   PARKING_SPACE channel variable, will no longer be set.
-
-res_xmpp:
- - The JabberStatus application, deprecated in Asterisk 12, has been removed.
-
-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.
-
-Applications
- - The JabberStatus application, deprecated in Asterisk 12, has been removed.
-
-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.
+ - Setting of HASH(SIP_CAUSE,<slave-channel-name>) on channels is now disabled
+   by default. It can be enabled using the 'storesipcause' option. This feature
+   has a significant performance penalty.
+
+UDPTL:
+ - The default UDPTL port range in udptl.conf.sample differed from the defaults
+   in the source. If you didn't have a config file, you got 4500 to 4599. Now the
+   default is 4000 to 4999.
+
+From 10.4 to 10.5:
+
+* The complex processor detection and optimization has been removed from
+  the makefile in favor of using native optimization suppport when available.
+  BUILD_NATIVE can be disabled via menuselect under "Compiler Flags".
+
+From 10.2 to 10.3:
+
+* If no transport is specified in sip.conf, transport will default to UDP.
+  Also, if multiple transport= lines are used, only the last will be used.
+
+From 1.8 to 10:
+
+cel_pgsql:
+ - This module now expects an 'extra' column in the database for data added
+   using the CELGenUserEvent() application.
+
+ConfBridge
+ - ConfBridge's dialplan arguments have changed and are not
+   backwards compatible.
+
+File Interpreters
+ - The format interpreter formats/format_sln16.c for the file extension
+   '.sln16' has been removed. The '.sln16' file interpreter now exists
+   in the formats/format_sln.c module along with new support for sln12,
+   sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
+
+HTTP:
+ - A bindaddr must be specified in order for the HTTP server
+   to run. Previous versions would default to 0.0.0.0 if no
+   bindaddr was specified.
+
+Gtalk:
+ - The default value for 'context' and 'parkinglots' in gtalk.conf has
+   been changed to 'default', previously they were empty.
+
+chan_dahdi:
+ - The mohinterpret=passthrough setting is deprecated in favor of
+   moh_signaling=notify.
+
+pbx_lua:
+ - Execution no longer continues after applications that do dialplan jumps
+   (such as app.goto).  Now when an application such as app.goto() is called,
+   control is returned back to the pbx engine and the current extension
+   function stops executing.
+ - the autoservice now defaults to being on by default
+ - autoservice_start() and autoservice_start() no longer return a value.
+
+Queue:
+ - Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
+ - QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
+
+Asterisk Database:
+ - The internal Asterisk database has been switched from Berkeley DB 1.86 to
+   SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
+   utility in the UTILS section of menuselect. If an existing astdb is found and no
+   astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
+   convert an existing astdb to the SQLite3 version automatically at runtime.
+
+Module Support Level
+ - All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
+   formats, funcs, pbx, and res have been updated to include MODULEINFO data
+   that includes <support_level> tags with a value of core, extended, or deprecated.
+   More information is available on the Asterisk wiki at
+   https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
+
+   Deprecated modules are now marked to not build by default and must be explicitly
+   enabled in menuselect.
+
+From 1.8.13 to 1.8.14:
+* permitdirectmedia/denydirectmedia now controls whether peers can be
+  bridged via directmedia by comparing the ACL to the bridging peer's
+  address rather than its own address.
+
+From 1.8.12 to 1.8.13:
+* The complex processor detection and optimization has been removed from
+  the makefile in favor of using native optimization suppport when available.
+  BUILD_NATIVE can be disabled via menuselect under "Compiler Flags".
+
+From 1.8.10 to 1.8.11:
+
+* If no transport is specified in sip.conf, transport will default to UDP.
+  Also, if multiple transport= lines are used, only the last will be used.
+
+From 1.6.2 to 1.8:
+
+* chan_sip no longer sets HASH(SIP_CAUSE,<chan name>) on channels by default.
+  This must now be enabled by setting 'sipstorecause' to 'yes' in sip.conf.
+  This carries a performance penalty.
+
+* Asterisk now requires libpri 1.4.11+ for PRI support.
+
+* A couple of CLI commands in res_ais were changed back to their original form:
+    "ais show clm members" --> "ais clm show members"
+    "ais show evt event channels" --> "ais evt show event channels"
+
+* The default value for 'autofill' and 'shared_lastcall' in queues.conf has
+  been changed to 'yes'.
+
+* The default value for the alwaysauthreject option in sip.conf has been changed
+  from "no" to "yes".
+
+* The behavior of the 'parkedcallstimeout' has changed slightly.  The formulation
+  of the extension name that a timed out parked call is delivered to when this
+  option is set to 'no' was modified such that instead of converting '/' to '0',
+  the '/' is converted to an underscore '_'.  See the updated documentation in
+  features.conf.sample for more information on the behavior of the
+  'parkedcallstimeout' option.
+
+* Asterisk-addons no longer exists as an independent package.  Those modules
+  now live in the addons directory of the main Asterisk source tree.  They
+  are not enabled by default.  For more information about why modules live in
+  addons, see README-addons.txt.
+
+* The rarely used 'event_log' and LOG_EVENT channel have been removed; the few
+  users of this channel in the tree have been converted to LOG_NOTICE or removed
+  (in cases where the same message was already generated to another channel).
+
+* The usage of RTP inside of Asterisk has now become modularized. This means
+  the Asterisk RTP stack now exists as a loadable module, res_rtp_asterisk.
+  If you are not using autoload=yes in modules.conf you will need to ensure
+  it is set to load. If not, then any module which uses RTP (such as chan_sip)
+  will not be able to send or receive calls.
+
+* The app_dahdiscan.c file has been removed, but the dialplan app DAHDIScan still
+  remains. It now exists within app_chanspy.c and retains the exact same
+  functionality as before.
+
+* The default behavior for Set, AGI, and pbx_realtime has been changed to implement
+  1.6 behavior by default, if there is no [compat] section in asterisk.conf.  In
+  prior versions, the behavior defaulted to 1.4 behavior, to assist in upgrades.
+  Specifically, that means that pbx_realtime and res_agi expect you to use commas
+  to separate arguments in applications, and Set only takes a single pair of
+  a variable name/value.  The old 1.4 behavior may still be obtained by setting
+  app_set, pbx_realtime, and res_agi each to 1.4 in the [compat] section of
+  asterisk.conf.
+
+* The PRI channels in chan_dahdi can no longer change the channel name if a
+  different B channel is selected during call negotiation.  To prevent using
+  the channel name to infer what B channel a call is using and to avoid name
+  collisions, the channel name format is changed.
+  The new channel naming for PRI channels is:
+  DAHDI/i<span>/<number>[:<subaddress>]-<sequence-number>
+
+* Added CHANNEL(dahdi_span), CHANNEL(dahdi_channel), and CHANNEL(dahdi_type)
+  so the dialplan can determine the B channel currently in use by the channel.
+  Use CHANNEL(no_media_path) to determine if the channel even has a B channel.
+
+* Added AMI event DAHDIChannel to associate a DAHDI channel with an Asterisk
+  channel so AMI applications can passively determine the B channel currently
+  in use.  Calls with "no-media" as the DAHDIChannel do not have an associated
+  B channel.  No-media calls are either on hold or call-waiting.
+
+* The ChanIsAvail application has been changed so the AVAILSTATUS variable
+  no longer contains both the device state and cause code. The cause code
+  is now available in the AVAILCAUSECODE variable. If existing dialplan logic
+  is written to expect AVAILSTATUS to contain the cause code it needs to be
+  changed to use AVAILCAUSECODE.
+
+* ExternalIVR will now send Z events for invalid or missing files, T events
+  now include the interrupted file and bugs in argument parsing have been
+  fixed so there may be arguments specified in incorrect ways that were
+  working that will no longer work. Please see
+  https://wiki.asterisk.org/wiki/display/AST/External+IVR+Interface for details.
+
+* OSP lookup application changes following variable names:
+  OSPPEERIP to OSPINPEERIP
+  OSPTECH to OSPOUTTECH
+  OSPDEST to OSPDESTINATION
+  OSPCALLING to OSPOUTCALLING
+  OSPCALLED to OSPOUTCALLED
+  OSPRESULTS to OSPDESTREMAILS
+
+* The Manager event 'iax2 show peers' output has been updated.  It now has a
+  similar output of 'sip show peers'.
+
+* VoiceMailMain and VMAuthenticate, if a '*' is entered in the first position
+  of a Mailbox or Password, will, if it exists, jump to the 'a' extension in
+  the current dialplan context.
+
+* The CALLERPRES() dialplan function is deprecated in favor of
+  CALLERID(num-pres) and CALLERID(name-pres).
+
+* Environment variables that start with "AST_" are reserved to the system and
+  may no longer be set from the dialplan.
+
+* When a call is redirected inside of a Dial, the app and appdata fields of the
+  CDR will now be set to "AppDial" and "(Outgoing Line)" instead of being blank.
+
+* The CDR handling of billsec and duration field has changed. If your table
+  definition specifies those fields as float,double or similar they will now
+  be logged with microsecond accuracy instead of a whole integer.
+
+* chan_sip will no longer set up a local call forward when receiving a
+  482 Loop Detected response. The dialplan will just continue from where it
+  left off.
+
+* The 'stunaddr' option has been removed from chan_sip.  This feature did not
+  behave as expected, had no correct use case, and was not RFC compliant. The
+  removal of this feature will hopefully be followed by a correct RFC compliant
+  STUN implementation in chan_sip in the future.
+
+* The default value for the pedantic option in sip.conf has been changed
+  from "no" to "yes".
+
+* The ConnectedLineNum and ConnectedLineName headers were added to many AMI
+  events/responses if the CallerIDNum/CallerIDName headers were also present.
+  The addition of connected line support changes the behavior of the channel
+  caller ID somewhat.  The channel caller ID value no longer time shares with
+  the connected line ID on outgoing call legs.  The timing of some AMI
+  events/responses output the connected line ID as caller ID.  These party ID's
+  are now separate.
+
+* The Dial application d and H options do not automatically answer the call
+  anymore.  It broke DTMF attended transfers.  Since many SIP and ISDN phones
+  cannot send DTMF before a call is connected, you need to answer the call
+  leg to those phones before using Dial with these options for them to have
+  any effect before the dialed party answers.
+
+* The outgoing directory (where .call files are read) now uses inotify to
+  detect file changes instead of polling the directory on a regular basis.
+  If your outgoing folder is on a NFS mount or another network file system,
+  changes to the files will not be detected.  You can revert to polling the
+  directory by specifying --without-inotify to configure before compiling.
+
+* The 'sipusers' realtime table has been removed completely. Use the 'sippeers'
+  table with type 'user' for user type objects.
+
+* The sip.conf allowoverlap option now accepts 'dtmf' as a value.  If you
+  are using the early media DTMF overlap dialing method you now need to set
+  allowoverlap=dtmf.
+
+From 1.6.1 to 1.6.2:
+
+* SIP no longer sends the 183 progress message for early media by
+  default.  Applications requiring early media should use the
+  progress() dialplan app to generate the progress message.
+
+* The firmware for the IAXy has been removed from Asterisk.  It can be
+  downloaded from http://downloads.digium.com/pub/iaxy/.  To have Asterisk
+  install the firmware into its proper location, place the firmware in the
+  contrib/firmware/iax/ directory in the Asterisk source tree before running
+  "make install".
+
+* T.38 FAX error correction mode can no longer be configured in udptl.conf;
+  instead, it is configured on a per-peer (or global) basis in sip.conf, with
+  the same default as was present in udptl.conf.sample.
+
+* T.38 FAX maximum datagram size can no longer be configured in updtl.conf;
+  instead, it is either supplied by the application servicing the T.38 channel
+  (for a FAX send or receive) or calculated from the bridged endpoint's
+  maximum datagram size (for a T.38 FAX passthrough call). In addition, sip.conf
+  allows for overriding the value supplied by a remote endpoint, which is useful
+  when T.38 connections are made to gateways that supply incorrectly-calculated
+  maximum datagram sizes.
+
+* There have been some changes to the IAX2 protocol to address the security
+  concerns documented in the security advisory AST-2009-006.  Please see the
+  IAX2 security document, doc/IAX2-security.pdf, for information regarding
+  backwards compatibility with versions of Asterisk that do not contain these
+  changes to IAX2.
+
+* The 'canreinvite' option support by the SIP, MGCP and Skinny channel drivers
+  has been renamed to 'directmedia', to better reflect what it actually does.
+  In the case of SIP, there are still re-INVITEs issued for T.38 negotiation,
+  starting and stopping music-on-hold, and other reasons, and the 'canreinvite'
+  option never had any effect on these cases, it only affected the re-INVITEs
+  used for direct media path setup. For MGCP and Skinny, the option was poorly
+  named because those protocols don't even use INVITE messages at all. For
+  backwards compatibility, the old option is still supported in both normal
+  and Realtime configuration files, but all of the sample configuration files,
+  Realtime/LDAP schemas, and other documentation refer to it using the new name.
+
+* The default console now will use colors according to the default background
+  color, instead of forcing the background color to black.  If you are using a
+  light colored background for your console, you may wish to use the option
+  flag '-W' to present better color choices for the various messages.  However,
+  if you'd prefer the old method of forcing colors to white text on a black
+  background, the compatibility option -B is provided for this purpose.
+
+* SendImage() no longer hangs up the channel on transmission error or on
+  any other error; in those cases, a FAILURE status is stored in
+  SENDIMAGESTATUS and dialplan execution continues.  The possible
+  return values stored in SENDIMAGESTATUS are: SUCCESS, FAILURE, and
+  UNSUPPORTED. ('OK' has been replaced with 'SUCCESS', and 'NOSUPPORT'
+  has been replaced with 'UNSUPPORTED').  This change makes the
+  SendImage application more consistent with other applications.
+
+* skinny.conf now has separate sections for lines and devices.
+  Please have a look at configs/skinny.conf.sample and update
+  your skinny.conf.
+
+* Queue names previously were treated in a case-sensitive manner,
+  meaning that queues with names like "sales" and "sALeS" would be
+  seen as unique queues. The parsing logic has changed to use
+  case-insensitive comparisons now when originally hashing based on
+  queue names, meaning that now the two queues mentioned as examples
+  earlier will be seen as having the same name.
+
+* The SPRINTF() dialplan function has been moved into its own module,
+  func_sprintf, and is no longer included in func_strings. If you use this
+  function and do not use 'autoload=yes' in modules.conf, you will need
+  to explicitly load func_sprintf for it to be available.
+
+* The res_indications module has been removed.  Its functionality was important
+  enough that most of it has been moved into the Asterisk core.
+  Two applications previously provided by res_indications, PlayTones and
+  StopPlayTones, have been moved into a new module, app_playtones.
+
+* Support for Taiwanese was incorrectly supported with the "tw" language code.
+  In reality, the "tw" language code is reserved for the Twi language, native
+  to Ghana.  If you were previously using the "tw" language code, you should
+  switch to using either "zh" (for Mandarin Chinese) or "zh_TW" for Taiwan
+  specific localizations.  Additionally, "mx" should be changed to "es_MX",
+  Georgian was incorrectly specified as "ge" but should be "ka", and Czech is
+  "cs", not "cz".
+
+* DAHDISendCallreroutingFacility() parameters are now comma-separated,
+  instead of the old pipe.
+
+* res_jabber: autoprune has been disabled by default, to avoid misconfiguration
+  that would end up being interpreted as a bug once Asterisk started removing
+  the contacts from a user list.
+
+* The cdr.conf file must exist and be configured correctly in order for CDR
+  records to be written.
+
+* cdr_pgsql now assumes the encoding of strings it is handed are in LATIN9,
+  which should cover most uses of the extended ASCII set.  If your strings
+  use a different encoding in Asterisk, the "encoding" parameter may be set
+  to specify the correct character set.
+
+From 1.6.0.1 to 1.6.1:
+
+* The ast_agi_register_multiple() and ast_agi_unregister_multiple()
+  API calls were added in 1.6.0, so that modules that provide multiple
+  AGI commands could register/unregister them all with a single
+  step. However, these API calls were not implemented properly, and did
+  not allow the caller to know whether registration or unregistration
+  succeeded or failed. They have been redefined to now return success
+  or failure, but this means any code using these functions will need
+  be recompiled after upgrading to a version of Asterisk containing
+  these changes. In addition, the source code using these functions
+  should be reviewed to ensure it can properly react to failure
+  of registration or unregistration of its API commands.
+
+* The ast_agi_fdprintf() API call has been renamed to ast_agi_send()
+  to better match what it really does, and the argument order has been
+  changed to be consistent with other API calls that perform similar
+  operations.
+
+From 1.6.0.x to 1.6.1:
+
+* In previous versions of Asterisk, due to the way objects were arranged in
+  memory by chan_sip, the order of entries in sip.conf could be adjusted to
+  control the behavior of matching against peers and users.  The way objects
+  are managed has been significantly changed for reasons involving performance
+  and stability.  A side effect of these changes is that the order of entries
+  in sip.conf can no longer be relied upon to control behavior.
+
+* The following core commands dealing with dialplan have been deprecated: 'core
+  show globals', 'core set global' and 'core set chanvar'. Use the equivalent
+  'dialplan show globals', 'dialplan set global' and 'dialplan set chanvar'
+  instead.
+
+* In the dialplan expression parser, the logical value of spaces
+  immediately preceding a standalone 0 previously evaluated to
+  true. It now evaluates to false.  This has confused a good many
+  people in the past (typically because they failed to realize the
+  space had any significance).  Since this violates the Principle of
+  Least Surprise, it has been changed.
+
+* While app_directory has always relied on having a voicemail.conf or users.conf file
+  correctly set up, it now is dependent on app_voicemail being compiled as well.
+
+* SIP: All of the functionality in SIPCHANINFO() has been implemented in CHANNEL(),
+  and you should start using that function instead for retrieving information about
+  the channel in a technology-agnostic way.
+
+* If you have any third party modules which use a config file variable whose
+  name ends in a '+', please note that the append capability added to this
+  version may now conflict with that variable naming scheme.  An easy
+  workaround is to ensure that a space occurs between the '+' and the '=',
+  to differentiate your variable from the append operator.  This potential
+  conflict is unlikely, but is documented here to be thorough.
+
+* The "Join" event from app_queue now uses the CallerIDNum header instead of
+  the CallerID header to indicate the CallerID number.
+
+* If you use ODBC storage for voicemail, there is a new field called "flag"
+  which should be a char(8) or larger.  This field specifies whether or not a
+  message has been designated to be "Urgent", "PRIORITY", or not.
+
+From 1.4 to 1.6:
+
+AEL:
+
+* Macros are now implemented underneath with the Gosub() application.
+  Heaven Help You if you wrote code depending on any aspect of this!
+  Previous to 1.6, macros were implemented with the Macro() app, which
+  provided a nice feature of auto-returning. The compiler will do its
+  best to insert a Return() app call at the end of your macro if you did
+  not include it, but really, you should make sure that all execution
+  paths within your macros end in "return;".
+
+* The conf2ael program is 'introduced' in this release; it is in a rather
+  crude state, but deemed useful for making a first pass at converting
+  extensions.conf code into AEL. More intelligence will come with time.
+
+Core:
+
+* The 'languageprefix' option in asterisk.conf is now deprecated, and
+  the default sound file layout for non-English sounds is the 'new
+  style' layout introduced in Asterisk 1.4 (and used by the automatic
+  sound file installer in the Makefile).
+
+* The ast_expr2 stuff has been modified to handle floating-point numbers.
+  Numbers of the format D.D are now acceptable input for the expr parser,
+  Where D is a string of base-10 digits. All math is now done in "long double",
+  if it is available on your compiler/architecture. This was half-way between
+  a bug-fix (because the MATH func returns fp by default), and an enhancement.
+  Also, for those counting on, or needing, integer operations, a series of
+  'functions' were also added to the expr language, to allow several styles
+  of rounding/truncation, along with a set of common floating point operations,
+  like sin, cos, tan, log, pow, etc. The ability to call external functions
+  like CDR(), etc. was also added, without having to use the ${...} notation.
+
+* The delimiter passed to applications has been changed to the comma (','), as
+  that is what people are used to using within extensions.conf.  If you are
+  using realtime extensions, you will need to translate your existing dialplan
+  to use this separator.  To use a literal comma, you need merely to escape it
+  with a backslash ('\').  Another possible side effect is that you may need to
+  remove the obscene level of backslashing that was necessary for the dialplan
+  to work correctly in 1.4 and previous versions.  This should make writing
+  dialplans less painful in the future, albeit with the pain of a one-time
+  conversion.  If you would like to avoid this conversion immediately, set
+  pbx_realtime=1.4 in the [compat] section of asterisk.conf.  After
+  transitioning, set pbx_realtime=1.6 in the same section.
+
+* For the same purpose as above, you may set res_agi=1.4 in the [compat]
+  section of asterisk.conf to continue to use the '|' delimiter in the EXEC
+  arguments of AGI applications.  After converting to use the ',' delimiter,
+  change this option to res_agi=1.6.
+
+* As a side effect of the application delimiter change, many places that used
+  to need quotes in order to get the proper meaning are no longer required.
+  You now only need to quote strings in configuration files if you literally
+  want quotation marks within a string.
+
+* Any applications run that contain the pipe symbol but not a comma symbol will
+  get a warning printed to the effect that the application delimiter has changed.
+  However, there are legitimate reasons why this might be useful in certain
+  situations, so this warning can be turned off with the dontwarn option in
+  asterisk.conf.
+
+* The logger.conf option 'rotatetimestamp' has been deprecated in favor of
+  'rotatestrategy'.  This new option supports a 'rotate' strategy that more
+  closely mimics the system logger in terms of file rotation.
+
+* The concise versions of various CLI commands are now deprecated. We recommend
+  using the manager interface (AMI) for application integration with Asterisk.
+
+Voicemail:
+
+* The voicemail configuration values 'maxmessage' and 'minmessage' have
+  been changed to 'maxsecs' and 'minsecs' to clarify their purpose and
+  to make them more distinguishable from 'maxmsgs', which sets folder
+  size.  The old variables will continue to work in this version, albeit
+  with a deprecation warning.
+
+* If you use any interface for modifying voicemail aside from the built in
+  dialplan applications, then the option "pollmailboxes" *must* be set in
+  voicemail.conf for message waiting indication (MWI) to work properly.  This
+  is because Voicemail notification is now event based instead of polling
+  based.  The channel drivers are no longer responsible for constantly manually
+  checking mailboxes for changes so that they can send MWI information to users.
+  Examples of situations that would require this option are web interfaces to
+  voicemail or an email client in the case of using IMAP storage.
+
+Applications:
+
+
+* ChanIsAvail() now has a 't' option, which allows the specified device
+  to be queried for state without consulting the channel drivers. This
+  performs mostly a 'ChanExists' sort of function.
+
+* ChannelRedirect() will not terminate the channel that fails to do a
+  channelredirect as it has done previously. Instead CHANNELREDIRECT_STATUS
+  will reflect if the attempt was successful of not.
+
+* SetCallerPres() has been replaced with the CALLERPRES() dialplan function
+  and is now deprecated.
+
+* DISA()'s fifth argument is now an options argument.  If you have previously
+  used 'NOANSWER' in this argument, you'll need to convert that to the new
+  option 'n'.
+
+* Macro() is now deprecated.  If you need subroutines, you should use the
+  Gosub()/Return() applications.  To replace MacroExclusive(), we have
+  introduced dialplan functions LOCK(), TRYLOCK(), and UNLOCK().  You may use
+  these functions in any location where you desire to ensure that only one
+  channel is executing that path at any one time.  The Macro() applications
+  are deprecated for performance reasons.  However, since Macro() has been
+  around for a long time and so many dialplans depend heavily on it, for the
+  sake of backwards compatibility it will not be removed .  It is also worth
+  noting that using both Macro() and GoSub() at the same time is _heavily_
+  discouraged.
+
+* Read() now sets a READSTATUS variable on exit.  It does NOT automatically
+  return -1 (and hangup) anymore on error.  If you want to hangup on error,
+  you need to do so explicitly in your dialplan.
+
+* Privacy() no longer uses privacy.conf, so any options must be specified
+  directly in the application arguments.
+
+* MusicOnHold application now has duration parameter which allows specifying
+  timeout in seconds.
+
+* WaitMusicOnHold application is now deprecated in favor of extended MusicOnHold.
+
+* SetMusicOnHold is now deprecated. You should use Set(CHANNEL(musicclass)=...)
+  instead.
+
+* The arguments in ExecIf changed a bit, to be more like other applications.
+  The syntax is now ExecIf(<cond>?appiftrue(args):appiffalse(args)).
+
+* The behavior of the Set application now depends upon a compatibility option,
+  set in asterisk.conf.  To use the old 1.4 behavior, which allowed Set to take
+  multiple key/value pairs, set app_set=1.4 in [compat] in asterisk.conf.  To
+  use the new behavior, which permits variables to be set with embedded commas,
+  set app_set=1.6 in [compat] in asterisk.conf.  Note that you can have both
+  behaviors at the same time, if you switch to using MSet if you want the old
+  behavior.
+
+Dialplan Functions:
+
+* QUEUE_MEMBER_COUNT() has been deprecated in favor of the QUEUE_MEMBER() function. For
+  more information, issue a "show function QUEUE_MEMBER" from the CLI.
+
+CDR:
+
+* The cdr_sqlite module has been marked as deprecated in favor of
+  cdr_sqlite3_custom.  It will potentially be removed from the tree
+  after Asterisk 1.6 is released.
+
+* The cdr_odbc module now uses res_odbc to manage its connections.  The
+  username and password parameters in cdr_odbc.conf, therefore, are no
+  longer used.  The dsn parameter now points to an entry in res_odbc.conf.
+
+* The uniqueid field in the core Asterisk structure has been changed from a
+  maximum 31 character field to a 149 character field, to account for all
+  possible values the systemname prefix could be.  In the past, if the
+  systemname was too long, the uniqueid would have been truncated.
+
+* The cdr_tds module now supports all versions of FreeTDS that contain
+  the db-lib frontend.  It will also now log the userfield variable if
+  the target database table contains a column for it.
+
+Formats:
+
+* format_wav: The GAIN preprocessor definition and source code that used it
+  is removed.  This change was made in response to user complaints of
+  choppiness or the clipping of loud signal peaks.  To increase the volume
+  of voicemail messages, use the 'volgain' option in voicemail.conf
+
+Channel Drivers:
+
+* SIP: a small upgrade to support the "Record" button on the SNOM360,
+  which sends a sip INFO message with a "Record: on" or "Record: off"
+  header. If Asterisk is set up (via features.conf) to accept "One Touch Monitor"
+  requests (by default, via '*1'), then the user-configured dialpad sequence
+  is generated, and recording can be started and stopped via this button. The
+  file names and formats are all controlled via the normal mechanisms. If the
+  user has not configured the automon feature, the normal "415 Unsupported media type"
+  is returned, and nothing is done.
+
+* SIP: The "call-limit" option is marked as deprecated. It still works in this version of
+  Asterisk, but will be removed in the following version. Please use the groupcount functions
+  in the dialplan to enforce call limits. The "limitonpeer" configuration option is
+  now renamed to "counteronpeer".
+
+* SIP: The "username" option is now renamed to "defaultuser" to match "defaultip".
+  These are used only before registration to call a peer with the uri
+       sip:defaultuser@defaultip
+  The "username" setting still work, but is deprecated and will not work in
+  the next version of Asterisk.
+
+* SIP: The old "insecure" options, deprecated in 1.4, have been removed.
+  "insecure=very" should be changed to "insecure=port,invite"
+  "insecure=yes" should be changed to "insecure=port"
+  Be aware that some telephony providers show the invalid syntax in their
+  sample configurations.
+
+* chan_local.c: the comma delimiter inside the channel name has been changed to a
+  semicolon, in order to make the Local channel driver compatible with the comma
+  delimiter change in applications.
+
+* H323: The "tos" setting has changed name to "tos_audio" and "cos" to "cos_audio"
+  to be compatible with settings in sip.conf. The "tos" and "cos" configuration
+  is deprecated and will stop working in the next release of Asterisk.
+
+* Console: A new console channel driver, chan_console, has been added to Asterisk.
+  This new module can not be loaded at the same time as chan_alsa or chan_oss.  The
+  default modules.conf only loads one of them (chan_oss by default).  So, unless you
+  have modified your modules.conf to not use the autoload option, then you will need
+  to modify modules.conf to add another "noload" line to ensure that only one of
+  these three modules gets loaded.
+
+* DAHDI: The chan_zap module that supported PSTN interfaces using
+  Zaptel has been renamed to chan_dahdi, and only supports the DAHDI
+  telephony driver package for PSTN interfaces. See the
+  Zaptel-to-DAHDI.txt file for more details on this transition.
+
+* DAHDI: The "msdstrip" option has been deprecated, as it provides no value over
+  the method of stripping digits in the dialplan using variable substring syntax.
+
+Configuration:
+
+* pbx_dundi.c: tos parameter changed to use new values. Old values like lowdelay,
+  lowcost and other is not acceptable now. Look into qos.tex for description of
+  this parameter.
+
+* queues.conf: the queue-lessthan sound file option is no longer available, and the
+  queue-round-seconds option no longer takes '1' as a valid parameter.
+
+Manager:
+
+* Manager has been upgraded to version 1.1 with a lot of changes.
+  Please check doc/manager_1_1.txt for information
+
+* The IAXpeers command output has been changed to more closely resemble the
+  output of the SIPpeers command.
+
+* cdr_manager now reports at the "cdr" level, not at "call"  You may need to
+   change your manager.conf to add the level to existing AMI users, if they
+   want to see the CDR events generated.
+
+* The Originate command now requires the Originate write permission.  For
+   Originate with the Application parameter, you need the additional System
+   privilege if you want to do anything that calls out to a subshell.
+
+iLBC Codec:
+
+* Previously, the Asterisk source code distribution included the iLBC
+  encoder/decoder source code, from Global IP Solutions
+  (http://www.gipscorp.com). This code is not licensed for
+  distribution, and thus has been removed from the Asterisk source
+  code distribution. If you wish to use codec_ilbc to support iLBC
+  channels in Asterisk, you can run the contrib/scripts/get_ilbc_source.sh
+  script to download the source and put it in the proper place in
+  the Asterisk build tree. Once that is done you can follow your normal
+  steps of building Asterisk. You will need to run 'menuselect' and enable
+  the iLBC codec in the 'Codec  Translators' category.
+
+From 1.2 to 1.4:
+
+Build Process (configure script):
+
+Asterisk now uses an autoconf-generated configuration script to learn how it
+should build itself for your system. As it is a standard script, running:
+
+$ ./configure --help
+
+will show you all the options available. This script can be used to tell the
+build process what libraries you have on your system (if it cannot find them
+automatically), which libraries you wish to have ignored even though they may
+be present, etc.
+
+You must run the configure script before Asterisk will build, although it will
+attempt to automatically run it for you with no options specified; for most
+users, that will result in a similar build to what they would have had before
+the configure script was added to the build process (except for having to run
+'make' again after the configure script is run). Note that the configure script
+does NOT need to be re-run just to rebuild Asterisk; you only need to re-run it
+when your system configuration changes or you wish to build Asterisk with
+different options.
+
+Build Process (module selection):
+
+The Asterisk source tree now includes a basic module selection and build option
+selection tool called 'menuselect'. Run 'make menuselect' to make your choices.
+In this tool, you can disable building of modules that you don't care about,
+turn on/off global options for the build and see which modules will not
+(and cannot) be built because your system does not have the required external
+dependencies installed.
+
+The resulting file from menuselect is called 'menuselect.makeopts'. Note that
+the resulting menuselect.makeopts file generally contains which modules *not*
+to build. The modules listed in this file indicate which modules have unmet
+dependencies, a present conflict, or have been disabled by the user in the
+menuselect interface. Compiler Flags can also be set in the menuselect
+interface.  In this case, the resulting file contains which CFLAGS are in use,
+not which ones are not in use.
+
+If you would like to save your choices and have them applied against all
+builds, the file can be copied to '~/.asterisk.makeopts' or
+'/etc/asterisk.makeopts'.
+
+Build Process (Makefile targets):
+
+The 'valgrind' and 'dont-optimize' targets have been removed; their functionality
+is available by enabling the DONT_OPTIMIZE setting in the 'Compiler Flags' menu
+in the menuselect tool.
+
+It is now possible to run most make targets against a single subdirectory; from
+the top level directory, for example, 'make channels' will run 'make all' in the
+'channels' subdirectory. This also is true for 'clean', 'distclean' and 'depend'.
+
+Sound (prompt) and Music On Hold files:
+
+Beginning with Asterisk 1.4, the sound files and music on hold files supplied for
+use with Asterisk have been replaced with new versions produced from high quality
+master recordings, and are available in three languages (English, French and
+Spanish) and in five formats (WAV (uncompressed), mu-Law, a-Law, GSM and G.729).
+In addition, the music on hold files provided by opsound.org Music are now available
+in the same five formats, but no longer available in MP3 format.
+
+The Asterisk 1.4 tarball packages will only include English prompts in GSM format,
+(as were supplied with previous releases) and the opsound.org MOH files in WAV format.
+All of the other variations can be installed by running 'make menuselect' and
+selecting the packages you wish to install; when you run 'make install', those
+packages will be downloaded and installed along with the standard files included
+in the tarball.
+
+If for some reason you expect to not have Internet access at the time you will be
+running 'make install', you can make your package selections using menuselect and
+then run 'make sounds' to download (only) the sound packages; this will leave the
+sound packages in the 'sounds' subdirectory to be used later during installation.
+
+WARNING: Asterisk 1.4 supports a new layout for sound files in multiple languages;
+instead of the alternate-language files being stored in subdirectories underneath
+the existing files (for French, that would be digits/fr, letters/fr, phonetic/fr,
+etc.) the new layout creates one directory under /var/lib/asterisk/sounds for the
+language itself, then places all the sound files for that language under that
+directory and its subdirectories. This is the layout that will be created if you
+select non-English languages to be installed via menuselect, HOWEVER Asterisk does
+not default to this layout and will not find the files in the places it expects them
+to be. If you wish to use this layout, make sure you put 'languageprefix=yes' in your
+/etc/asterisk/asterisk.conf file, so that Asterisk will know how the files were
+installed.
+
+PBX Core:
+
+* The (very old and undocumented) ability to use BYEXTENSION for dialing
+  instead of ${EXTEN} has been removed.
+
+* Builtin (res_features) transfer functionality attempts to use the context
+  defined in TRANSFER_CONTEXT variable of the transferer channel first. If
+  not set, it uses the transferee variable. If not set in any channel, it will
+  attempt to use the last non macro context. If not possible, it will default
+  to the current context.
+
+* The autofallthrough setting introduced in Asterisk 1.2 now defaults to 'yes';
+  if your dialplan relies on the ability to 'run off the end' of an extension
+  and wait for a new extension without using WaitExten() to accomplish that,
+  you will need set autofallthrough to 'no' in your extensions.conf file.
+
+Command Line Interface:
+
+* 'show channels concise', designed to be used by applications that will parse
+  its output, previously used ':' characters to separate fields. However, some
+  of those fields can easily contain that character, making the output not
+  parseable. The delimiter has been changed to '!'.
+
+Applications:
+
+* In previous Asterisk releases, many applications would jump to priority n+101
+  to indicate some kind of status or error condition.  This functionality was
+  marked deprecated in Asterisk 1.2.  An option to disable it was provided with
+  the default value set to 'on'.  The default value for the global priority
+  jumping option is now 'off'.
+
+* The applications Cut, Sort, DBGet, DBPut, SetCIDNum, SetCIDName, SetRDNIS,
+  AbsoluteTimeout, DigitTimeout, ResponseTimeout, SetLanguage, GetGroupCount,
+  and GetGroupMatchCount were all deprecated in version 1.2, and therefore have
+  been removed in this version.  You should use the equivalent dialplan
+  function in places where you have previously used one of these applications.
+
+* The application SetGlobalVar has been deprecated.  You should replace uses
+  of this application with the following combination of Set and GLOBAL():
+  Set(GLOBAL(name)=value).  You may also access global variables exclusively by
+  using the GLOBAL() dialplan function, instead of relying on variable
+  interpolation falling back to globals when no channel variable is set.
+
+* The application SetVar has been renamed to Set.  The syntax SetVar was marked
+  deprecated in version 1.2 and is no longer recognized in this version.  The
+  use of Set with multiple argument pairs has also been deprecated.  Please
+  separate each name/value pair into its own dialplan line.
+
+* app_read has been updated to use the newer options codes, using "skip" or
+  "noanswer" will not work.  Use s or n.  Also there is a new feature i, for
+  using indication tones, so typing in skip would give you unexpected results.
+
+* OSPAuth is added to authenticate OSP tokens in in_bound call setup messages.
+
+* The CONNECT event in the queue_log from app_queue now has a second field
+  in addition to the holdtime field. It contains the unique ID of the
+  queue member channel that is taking the call. This is useful when trying
+  to link recording filenames back to a particular call from the queue.
+
+* The old/current behavior of app_queue has a serial type behavior
+  in that the queue will make all waiting callers wait in the queue
+  even if there is more than one available member ready to take
+  calls until the head caller is connected with the member they
+  were trying to get to. The next waiting caller in line then
+  becomes the head caller, and they are then connected with the
+  next available member and all available members and waiting callers
+  waits while this happens. This cycle continues until there are
+  no more available members or waiting callers, whichever comes first.
+  The new behavior, enabled by setting autofill=yes in queues.conf
+  either at the [general] level to default for all queues or
+  to set on a per-queue level, makes sure that when the waiting
+  callers are connecting with available members in a parallel fashion
+  until there are no more available members or no more waiting callers,
+  whichever comes first. This is probably more along the lines of how
+  one would expect a queue should work and in most cases, you will want
+  to enable this new behavior. If you do not specify or comment out this
+  option, it will default to "no" to keep backward compatability with the old
+  behavior.
+
+* Queues depend on the channel driver reporting the proper state
+  for each member of the queue. To get proper signalling on
+  queue members that use the SIP channel driver, you need to
+  enable a call limit (could be set to a high value so it
+  is not put into action) and also make sure that both inbound
+  and outbound calls are accounted for.
+
+  Example:
+
+       [general]
+       limitonpeer = yes
+
+       [peername]
+       type=friend
+       call-limit=10
+
+
+* The app_queue application now has the ability to use MixMonitor to
+  record conversations queue members are having with queue callers. Please
+  see configs/queues.conf.sample for more information on this option.
+
+* The app_queue application strategy called 'roundrobin' has been deprecated
+  for this release. Users are encouraged to use 'rrmemory' instead, since it
+  provides more 'true' round-robin call delivery. For the Asterisk 1.6 release,
+  'rrmemory' will be renamed 'roundrobin'.
+
+* The app_queue application option called 'monitor-join' has been deprecated
+  for this release. Users are encouraged to use 'monitor-type=mixmonitor' instead,
+  since it provides the same functionality but is not dependent on soxmix or some
+  other external program in order to mix the audio.
+
+* app_meetme: The 'm' option (monitor) is renamed to 'l' (listen only), and
+  the 'm' option now provides the functionality of "initially muted".
+  In practice, most existing dialplans using the 'm' flag should not notice
+  any difference, unless the keypad menu is enabled, allowing the user
+  to unmute themsleves.
+
+* ast_play_and_record would attempt to cancel the recording if a DTMF
+  '0' was received.  This behavior was not documented in most of the
+  applications that used ast_play_and_record and the return codes from
+  ast_play_and_record weren't checked for properly.
+  ast_play_and_record has been changed so that '0' no longer cancels a
+  recording.  If you want to allow DTMF digits to cancel an
+  in-progress recording use ast_play_and_record_full which allows you
+  to specify which DTMF digits can be used to accept a recording and
+  which digits can be used to cancel a recording.
+
+* ast_app_messagecount has been renamed to ast_app_inboxcount.  There is now a
+  new ast_app_messagecount function which takes a single context/mailbox/folder
+  mailbox specification and returns the message count for that folder only.
+  This addresses the deficiency of not being able to count the number of
+  messages in folders other than INBOX and Old.
+
+* The exit behavior of the AGI applications has changed. Previously, when
+  a connection to an AGI server failed, the application would cause the channel
+  to immediately stop dialplan execution and hangup. Now, the only time that
+  the AGI applications will cause the channel to stop dialplan execution is
+  when the channel itself requests hangup. The AGI applications now set an
+  AGISTATUS variable which will allow you to find out whether running the AGI
+  was successful or not.
+
+  Previously, there was no way to handle the case where Asterisk was unable to
+  locally execute an AGI script for some reason. In this case, dialplan
+  execution will continue as it did before, but the AGISTATUS variable will be
+  set to "FAILURE".
+
+  A locally executed AGI script can now exit with a non-zero exit code and this
+  failure will be detected by Asterisk. If an AGI script exits with a non-zero
+  exit code, the AGISTATUS variable will be set to "FAILURE" as opposed to
+  "SUCCESS".
+
+* app_voicemail: The ODBC_STORAGE capability now requires the extended table format
+  previously used only by EXTENDED_ODBC_STORAGE. This means that you will need to update
+  your table format using the schema provided in doc/odbcstorage.txt
+
+* app_waitforsilence: Fixes have been made to this application which changes the
+  default behavior with how quickly it returns. You can maintain "old-style" behavior
+  with the addition/use of a third "timeout" parameter.
+  Please consult the application documentation and make changes to your dialplan
+  if appropriate.
+
+Manager:
+
+* After executing the 'status' manager action, the "Status" manager events
+  included the header "CallerID:" which was actually only the CallerID number,
+  and not the full CallerID string.  This header has been renamed to
+  "CallerIDNum".  For compatibility purposes, the CallerID parameter will remain
+  until after the release of 1.4, when it will be removed.  Please use the time
+  during the 1.4 release to make this transition.
+
+* The AgentConnect event now has an additional field called "BridgedChannel"
+  which contains the unique ID of the queue member channel that is taking the
+  call. This is useful when trying to link recording filenames back to
+  a particular call from the queue.
+
+* app_userevent has been modified to always send Event: UserEvent with the
+  additional header UserEvent: <userspec>.  Also, the Channel and UniqueID
+  headers are not automatically sent, unless you specify them as separate
+  arguments.  Please see the application help for the new syntax.
+
+* app_meetme: Mute and Unmute events are now reported via the Manager API.
+  Native Manager API commands MeetMeMute and MeetMeUnmute are provided, which
+  are easier to use than "Action Command:". The MeetMeStopTalking event has
+  also been deprecated in favor of the already existing MeetmeTalking event
+  with a "Status" of "on" or "off" added.
+
+* OriginateFailure and OriginateSuccess events were replaced by event
+  OriginateResponse with a header named "Response" to indicate success or
+  failure
+
+Variables:
+
+* The builtin variables ${CALLERID}, ${CALLERIDNAME}, ${CALLERIDNUM},
+  ${CALLERANI}, ${DNID}, ${RDNIS}, ${DATETIME}, ${TIMESTAMP}, ${ACCOUNTCODE},
+  and ${LANGUAGE} have all been deprecated in favor of their related dialplan
+  functions.  You are encouraged to move towards the associated dialplan
+  function, as these variables will be removed in a future release.
+
+* The CDR-CSV variables uniqueid, userfield, and basing time on GMT are now
+  adjustable from cdr.conf, instead of recompiling.
+
+* OSP applications exports several new variables, ${OSPINHANDLE},
+  ${OSPOUTHANDLE}, ${OSPINTOKEN}, ${OSPOUTTOKEN}, ${OSPCALLING},
+  ${OSPINTIMELIMIT}, and ${OSPOUTTIMELIMIT}
+
+* Builtin transfer functionality sets the variable ${TRANSFERERNAME} in the new
+  created channel. This variables holds the channel name of the transferer.
+
+* The dial plan variable PRI_CAUSE will be removed from future versions
+  of Asterisk.
+  It is replaced by adding a cause value to the hangup() application.
+
+Functions:
+
+* The function ${CHECK_MD5()} has been deprecated in favor of using an
+  expression: $[${MD5(<string>)} = ${saved_md5}].
+
+* The 'builtin' functions that used to be combined in pbx_functions.so are
+  now built as separate modules. If you are not using 'autoload=yes' in your
+  modules.conf file then you will need to explicitly load the modules that
+  contain the functions you want to use.
+
+* The ENUMLOOKUP() function with the 'c' option (for counting the number of
+  records), but the lookup fails to match any records, the returned value will
+  now be "0" instead of blank.
+
+* The REALTIME() function is now available in version 1.4 and app_realtime has
+  been deprecated in favor of the new function. app_realtime will be removed
+  completely with the version 1.6 release so please take the time between
+  releases to make any necessary changes
+
+* The QUEUEAGENTCOUNT() function has been deprecated in favor of
+  QUEUE_MEMBER_COUNT().
+
+The IAX2 channel:
+
+* It is possible that previous configurations depended on the order in which
+  peers and users were specified in iax.conf for forcing the order in which
+  chan_iax2 matched against them.  This behavior is going away and is considered
+  deprecated in this version.  Avoid having ambiguous peer and user entries and
+  to make things easy on yourself, always set the "username" option for users
+  so that the remote end can match on that exactly instead of trying to infer
+  which user you want based on host.
+
+  If you would like to go ahead and use the new behavior which doesn't use the
+  order in the config file to influence matching order, then change the
+  MAX_PEER_BUCKETS define in chan_iax2.c to a value greater than one.  An
+  example is provided there.  By changing this, you will get *much* better
+  performance on systems that do a lot of peer and user lookups as they will be
+  stored in memory in a much more efficient manner.
+
+* The "mailboxdetail" option has been deprecated.  Previously, if this option
+  was not enabled, the 2 byte MSGCOUNT information element would be set to all
+  1's to indicate there there is some number of messages waiting.  With this
+  option enabled, the number of new messages were placed in one byte and the
+  number of old messages are placed in the other.  This is now the default
+  (and the only) behavior.
+
+The SIP channel:
+
+* The "incominglimit" setting is replaced by the "call-limit" setting in
+  sip.conf.
+
+* OSP support code is removed from SIP channel to OSP applications. ospauth
+  option in sip.conf is removed to osp.conf as authpolicy. allowguest option
+  in sip.conf cannot be set as osp anymore.
+
+* The Asterisk RTP stack has been changed in regards to RFC2833 reception
+  and transmission. Packets will now be sent with proper duration instead of all
+  at once. If you are receiving calls from a pre-1.4 Asterisk installation you
+  will want to turn on the rfc2833compensate option. Without this option your
+  DTMF reception may act poorly.
+
+* The $SIPUSERAGENT dialplan variable is deprecated and will be removed
+  in coming versions of Asterisk. Please use the dialplan function
+  SIPCHANINFO(useragent) instead.
+
+* The ALERT_INFO dialplan variable is deprecated and will be removed
+  in coming versions of Asterisk. Please use the dialplan application
+  sipaddheader() to add the "Alert-Info" header to the outbound invite.
+
+* The "canreinvite" option has changed. canreinvite=yes used to disable
+  re-invites if you had NAT=yes. In 1.4, you need to set canreinvite=nonat
+  to disable re-invites when NAT=yes. This is propably what you want.
+  The settings are now: "yes", "no", "nonat", "update". Please consult
+  sip.conf.sample for detailed information.
+
+The Zap channel:
+
+* Support for MFC/R2 has been removed, as it has not been functional for some
+  time and it has no maintainer.
+
+The Agent channel:
+
+* Callback mode (AgentCallbackLogin) is now deprecated, since the entire function
+  it provided can be done using dialplan logic, without requiring additional
+  channel and module locks (which frequently caused deadlocks). An example of
+  how to do this using AEL dialplan is in doc/queues-with-callback-members.txt.
+
+The G726-32 codec:
+
+* It has been determined that previous versions of Asterisk used the wrong codeword
+  packing order for G726-32 data. This version supports both available packing orders,
+  and can transcode between them. It also now selects the proper order when
+  negotiating with a SIP peer based on the codec name supplied in the SDP. However,
+  there are existing devices that improperly request one order and then use another;
+  Sipura and Grandstream ATAs are known to do this, and there may be others. To
+  be able to continue to use these devices with this version of Asterisk and the
+  G726-32 codec, a configuration parameter called 'g726nonstandard' has been added
+  to sip.conf, so that Asterisk can use the packing order expected by the device (even
+  though it requested a different order). In addition, the internal format number for
+  G726-32 has been changed, and the old number is now assigned to AAL2-G726-32. The
+  result of this is that this version of Asterisk will be able to interoperate over
+  IAX2 with older versions of Asterisk, as long as this version is told to allow
+  'g726aal2' instead of 'g726' as the codec for the call.
+
+Installation:
+
+* On BSD systems, the installation directories have changed to more "FreeBSDish"
+  directories. On startup, Asterisk will look for the main configuration in
+  /usr/local/etc/asterisk/asterisk.conf
+  If you have an old installation, you might want to remove the binaries and
+  move the configuration files to the new locations. The following directories
+  are now default:
+       ASTLIBDIR       /usr/local/lib/asterisk
+       ASTVARLIBDIR    /usr/local/share/asterisk
+       ASTETCDIR       /usr/local/etc/asterisk
+       ASTBINDIR       /usr/local/bin/asterisk
+       ASTSBINDIR      /usr/local/sbin/asterisk
+
+Music on Hold:
+
+* The music on hold handling has been changed in some significant ways in hopes
+  to make it work in a way that is much less confusing to users. Behavior will
+  not change if the same configuration is used from older versions of Asterisk.
+  However, there are some new configuration options that will make things work
+  in a way that makes more sense.
+
+  Previously, many of the channel drivers had an option called "musicclass" or
+  something similar. This option set what music on hold class this channel
+  would *hear* when put on hold. Some people expected (with good reason) that
+  this option was to configure what music on hold class to play when putting
+  the bridged channel on hold. This option has now been deprecated.
+
+  Two new music on hold related configuration options for channel drivers have
+  been introduced. Some channel drivers support both options, some just one,
+  and some support neither of them. Check the sample configuration files to see
+  which options apply to which channel driver.
+
+  The "mohsuggest" option specifies which music on hold class to suggest to the
+  bridged channel when putting them on hold. The only way that this class can
+  be overridden is if the bridged channel has a specific music class set that
+  was done in the dialplan using Set(CHANNEL(musicclass)=something).
+
+  The "mohinterpret" option is similar to the old "musicclass" option. It
+  specifies which music on hold class this channel would like to listen to when
+  put on hold. This music class is only effective if this channel has no music
+  class set on it from the dialplan and the bridged channel putting this one on
+  hold had no "mohsuggest" setting.
+
+  The IAX2 and Zap channel drivers have an additional feature for the
+  "mohinterpret" option. If this option is set to "passthrough", then these
+  channel drivers will pass through the HOLD message in signalling instead of
+  starting music on hold on the channel. An example for how this would be
+  useful is in an enterprise network of Asterisk servers. When one phone on one
+  server puts a phone on a different server on hold, the remote server will be
+  responsible for playing the hold music to its local phone that was put on
+  hold instead of the far end server across the network playing the music.
+
+CDR Records:
+
+* The behavior of the "clid" field of the CDR has always been that it will
+  contain the callerid ANI if it is set, or the callerid number if ANI was not
+  set.  When using the "callerid" option for various channel drivers, some
+  would set ANI and some would not.  This has been cleared up so that all
+  channel drivers set ANI.  If you would like to change the callerid number
+  on the channel from the dialplan and have that change also show up in the
+  CDR, then you *must* set CALLERID(ANI) as well as CALLERID(num).
+
+API:
+
+* There are some API functions that were not previously prefixed with the 'ast_'
+  prefix but now are; these include the ADSI, ODBC and AGI interfaces. If you
+  have a module that uses the services provided by res_adsi, res_odbc, or
+  res_agi, you will need to add ast_ prefixes to the functions that you call
+  from those modules.
+
+Formats:
+
+* format_wav: The GAIN preprocessor definition has been changed from 2 to 0
+  in Asterisk 1.4.  This change was made in response to user complaints of
+  choppiness or the clipping of loud signal peaks.  The GAIN preprocessor
+  definition will be retained in Asterisk 1.4, but will be removed in a
+  future release.  The use of GAIN for the increasing of voicemail message
+  volume should use the 'volgain' option in voicemail.conf
+
+From 1.0 to 1.2:
+
+Compiling:
+
+* The Asterisk 1.2 source code now uses C language features
+  supported only by 'modern' C compilers.  Generally, this means GCC
+  version 3.0 or higher, although some GCC 2.96 releases will also
+  work.  Some non-GCC compilers that support C99 and the common GCC
+  extensions (including anonymous structures and unions) will also
+  work.  All releases of GCC 2.95 do _not_ have the requisite feature
+  support; systems using that compiler will need to be upgraded to
+  a more recent compiler release.
+
+Dialplan Expressions:
+
+* The dialplan expression parser (which handles $[ ... ] constructs)
+  has gone through a major upgrade, but has one incompatible change:
+  spaces are no longer required around expression operators, including
+  string comparisons. However, you can now use quoting to keep strings
+  together for comparison. For more details, please read the
+  doc/README.variables file, and check over your dialplan for possible
+  problems.
+
+Agents:
+
+* The default for ackcall has been changed to "no" instead of "yes"
+  because of a bug which caused the "yes" behavior to generally act like
+  "no".  You may need to adjust the value if your agents behave
+  differently than you expect with respect to acknowledgement.
+
+* The AgentCallBackLogin application now requires a second '|' before
+  specifying an extension@context.  This is to distinguish the options
+  string from the extension, so that they do not conflict.  See
+  'show application AgentCallbackLogin' for more details.
+
+Parking:
+
+* Parking behavior has changed slightly; when a parked call times out,
+  Asterisk will attempt to deliver the call back to the extension that
+  parked it, rather than the 's' extension. If that extension is busy
+  or unavailable, the parked call will be lost.
+
+Dialing:
+
+* The Caller*ID of the outbound leg is now the extension that was
+  called, rather than the Caller*ID of the inbound leg of the call.  The
+  "o" flag for Dial can be used to restore the original behavior if
+  desired.  Note that if you are looking for the originating callerid
+  from the manager event, there is a new manager event "Dial" which
+  provides the source and destination channels and callerid.
+
+IAX:
+
+* The naming convention for IAX channels has changed in two ways:
+   1. The call number follows a "-" rather than a "/" character.
+   2. The name of the channel has been simplified to IAX2/peer-callno,
+   rather than IAX2/peer@peer-callno or even IAX2/peer@peer/callno.
+
+SIP:
+
+* The global option "port" in 1.0.X that is used to set which port to
+  bind to has been changed to "bindport" to be more consistent with
+  the other channel drivers and to avoid confusion with the "port"
+  option for users/peers.
+
+* The "Registry" event now uses "Username" rather than "User" for
+  consistency with IAX.
+
+Applications:
+
+* With the addition of dialplan functions (which operate similarly
+  to variables), the SetVar application has been renamed to Set.
+
+* The CallerPres application has been removed.  Use SetCallerPres
+  instead.  It accepts both numeric and symbolic names.
+
+* The applications GetGroupCount, GetGroupMatchCount, SetGroup, and
+  CheckGroup have been deprecated in favor of functions.  Here is a
+  table of their replacements:
+
+  GetGroupCount([groupname][@category]        GROUP_COUNT([groupname][@category])      Set(GROUPCOUNT=${GROUP_COUNT()})
+  GroupMatchCount(groupmatch[@category])       GROUP_MATCH_COUNT(groupmatch[@category])        Set(GROUPCOUNT=${GROUP_MATCH_COUNT(SIP/.*)})
+  SetGroup(groupname[@category])              GROUP([category])=groupname              Set(GROUP()=test)
+  CheckGroup(max[@category])                  N/A                                      GotoIf($[ ${GROUP_COUNT()} > 5 ]?103)
+
+  Note that CheckGroup does not have a direct replacement.  There is
+  also a new function called GROUP_LIST() which will return a space
+  separated list of all of the groups set on a channel.  The GROUP()
+  function can also return the name of the group set on a channel when
+  used in a read environment.
+
+* The applications DBGet and DBPut have been deprecated in favor of
+  functions.  Here is a table of their replacements:
+
+  DBGet(foo=family/key)        Set(foo=${DB(family/key)})
+  DBPut(family/key=${foo})     Set(DB(family/key)=${foo})
+
+* The application SetLanguage has been deprecated in favor of the
+  function LANGUAGE().
+
+  SetLanguage(fr)              Set(LANGUAGE()=fr)
+
+  The LANGUAGE function can also return the currently set language:
+
+  Set(MYLANG=${LANGUAGE()})
+
+* The applications AbsoluteTimeout, DigitTimeout, and ResponseTimeout
+  have been deprecated in favor of the function TIMEOUT(timeouttype):
+
+  AbsoluteTimeout(300)         Set(TIMEOUT(absolute)=300)
+  DigitTimeout(15)             Set(TIMEOUT(digit)=15)
+  ResponseTimeout(15)          Set(TIMEOUT(response)=15)
+
+  The TIMEOUT() function can also return the currently set timeouts:
+
+  Set(DTIMEOUT=${TIMEOUT(digit)})
+
+* The applications SetCIDName, SetCIDNum, and SetRDNIS have been
+  deprecated in favor of the CALLERID(datatype) function:
+
+  SetCIDName(Joe Cool)         Set(CALLERID(name)=Joe Cool)
+  SetCIDNum(2025551212)                Set(CALLERID(number)=2025551212)
+  SetRDNIS(2024561414)         Set(CALLERID(RDNIS)=2024561414)
+
+* The application Record now uses the period to separate the filename
+  from the format, rather than the colon.
+
+* The application VoiceMail now supports a 'temporary' greeting for each
+  mailbox. This greeting can be recorded by using option 4 in the
+  'mailbox options' menu, and 'change your password' option has been
+  moved to option 5.
+
+* The application VoiceMailMain now only matches the 'default' context if
+  none is specified in the arguments.  (This was the previously
+  documented behavior, however, we didn't follow that behavior.)  The old
+  behavior can be restored by setting searchcontexts=yes in voicemail.conf.
+
+Queues:
+
+* A queue is now considered empty not only if there are no members but if
+  none of the members are available (e.g. agents not logged on).  To
+  restore the original behavior, use "leavewhenempty=strict" or
+  "joinwhenempty=strict" instead of "=yes" for those options.
+
+* It is now possible to use multi-digit extensions in the exit context
+  for a queue (although you should not have overlapping extensions,
+  as there is no digit timeout). This means that the EXITWITHKEY event
+  in queue_log can now contain a key field with more than a single
+  character in it.
+
+Extensions:
+
+* By default, there is a new option called "autofallthrough" in
+  extensions.conf that is set to yes.  Asterisk 1.0 (and earlier)
+  behavior was to wait for an extension to be dialed after there were no
+  more extensions to execute.  "autofallthrough" changes this behavior
+  so that the call will immediately be terminated with BUSY,
+  CONGESTION, or HANGUP based on Asterisk's best guess.  If you are
+  writing an extension for IVR, you must use the WaitExten application
+  if "autofallthrough" is set to yes.
+
+AGI:
+
+* AGI scripts did not always get SIGHUP at the end, previously.  That
+  behavior has been fixed.  If you do not want your script to terminate
+  at the end of AGI being called (e.g. on a hangup) then set SIGHUP to
+  be ignored within your application.
+
+* CallerID is reported with agi_callerid and agi_calleridname instead
+  of a single parameter holding both.
+
+Music On Hold:
+
+* The preferred format for musiconhold.conf has changed; please see the
+  sample configuration file for the new format. The existing format
+  is still supported but will generate warnings when the module is loaded.
+
+chan_modem:
+
+* All the chan_modem channel drivers (aopen, bestdata and i4l) are deprecated
+  in this release, and will be removed in the next major Asterisk release.
+  Please migrate to chan_misdn for ISDN interfaces; there is no upgrade
+  path for aopen and bestdata modem users.
+
+MeetMe:
+
+* The conference application now allows users to increase/decrease their
+  speaking volume and listening volume (independently of each other and
+  other users); the 'admin' and 'user' menus have changed, and new sound
+  files are included with this release. However, if a user calling in
+  over a Zaptel channel that does NOT have hardware DTMF detection
+  increases their speaking volume, it is likely they will no longer be
+  able to enter/exit the menu or make any further adjustments, as the
+  software DTMF detector will not be able to recognize the DTMF coming
+  from their device.
+
+GetVar Manager Action:
 
+* Previously, the behavior of the GetVar manager action reported the value
+  of a variable in the following manner:
+   > name: value
+  This has been changed to a manner similar to the SetVar action and is now
+   > Variable: name
+   > Value: value
index 6a65b5f..3fe29cc 100644 (file)
@@ -82,7 +82,7 @@
 /* Defaults */
 #define DEFAULT_CONTEXT "default"
 #define DEFAULT_H323ID "Asterisk PBX"
-#define DEFAULT_LOGFILE "/var/log/asterisk/h323_log"
+#define DEFAULT_LOGFILE "h323_log"
 #define DEFAULT_H323ACCNT "ast_h323"
 
 /* Flags */
@@ -346,7 +346,8 @@ void onModeChanged(ooCallData *call, int t38mode);
 
 extern OOH323EndPoint gH323ep;
 
-static char gLogFile[256] = DEFAULT_LOGFILE;
+static char gLogFile[PATH_MAX] = DEFAULT_LOGFILE;
+static char gInitError[256] = "";
 static int  gPort = 1720;
 static char gIP[2+8*4+7];      /* Max for IPv6 addr */
 struct ast_sockaddr bindaddr;
@@ -2856,7 +2857,7 @@ int reload_config(int reload)
        }
 
        /* Inintialize everything to default */
-       strcpy(gLogFile, DEFAULT_LOGFILE);
+       snprintf(gLogFile, sizeof(gLogFile), "%s/%s", ast_config_AST_LOG_DIR, DEFAULT_LOGFILE);
        gPort = 1720;
        gIP[0] = '\0';
        strcpy(gCallerID, DEFAULT_H323ID);
@@ -3034,7 +3035,11 @@ int reload_config(int reload)
                        ast_copy_string(gRASIP, v->value, sizeof(gRASIP));
                        ast_verb(3, "  == Setting RAS IP to %s\n", gRASIP);
                } else if (!strcasecmp(v->name, "logfile")) {
-                       ast_copy_string(gLogFile, v->value, sizeof(gLogFile));
+                       if (v->value[0] == '/') {
+                               ast_copy_string(gLogFile, v->value, sizeof(gLogFile));
+                       } else {
+                               snprintf(gLogFile, sizeof(gLogFile), "%s/%s", ast_config_AST_LOG_DIR, v->value);
+                       }
                } else if (!strcasecmp(v->name, "context")) {
                        ast_copy_string(gContext, v->value, sizeof(gContext));
                        ast_verb(3, "  == Setting default context to %s\n", gContext);
@@ -3838,9 +3843,9 @@ static int load_module(void)
        if (!reload_config(0)) {
 
                /* fire up the H.323 Endpoint */
-               if (OO_OK != ooH323EpInitialize(OO_CALLMODE_AUDIOCALL, gLogFile)) {
-                       ast_log(LOG_ERROR, "Failed to initialize OOH323 endpoint-"
-                            "OOH323 Disabled\n");
+               if (OO_OK != ooH323EpInitialize(OO_CALLMODE_AUDIOCALL, gLogFile, gInitError, sizeof(gInitError))) {
+                       ast_log(LOG_ERROR, "Failed to initialize OOH323 endpoint: %s"
+                               "OOH323 Disabled\n", gInitError);
                        ao2_ref(gCap, -1);
                        gCap = NULL;
                        ao2_ref(ooh323_tech.capabilities, -1);
index e4d285e..1bd3812 100644 (file)
@@ -65,6 +65,7 @@
 #include "asterisk/udptl.h"
 #include "asterisk/stasis_channels.h"
 #include "asterisk/format_cache.h"
+#include "asterisk/paths.h"
 
 #include "ootypes.h"
 #include "ooUtils.h"
index 1dedecd..be43896 100644 (file)
@@ -34,7 +34,7 @@ ast_mutex_t bindPortLock;
 extern DList g_TimerList;
 
 int ooH323EpInitialize
-   (enum OOCallMode callMode, const char* tracefile)
+   (enum OOCallMode callMode, const char* tracefile, char* errstr, int errstr_max)
 {
 
    memset(&gH323ep, 0, sizeof(ooEndPoint));
@@ -46,7 +46,7 @@ int ooH323EpInitialize
    {
       if(strlen(tracefile)>= MAXFILENAME)
       {
-         printf("Error:File name longer than allowed maximum %d\n",
+         snprintf(errstr, errstr_max, "Error:File name longer than allowed maximum %d\n",
                  MAXFILENAME-1);
          return OO_FAILED;
       }
@@ -59,7 +59,7 @@ int ooH323EpInitialize
    gH323ep.fptraceFile = fopen(gH323ep.traceFile, "a");
    if(gH323ep.fptraceFile == NULL)
    {
-      printf("Error:Failed to open trace file %s for write.\n",
+      snprintf(errstr, errstr_max, "Error:Failed to open trace file %s for write.\n",
                   gH323ep.traceFile);
       return OO_FAILED;
    }
index a77b9e3..5c9c3dd 100644 (file)
@@ -163,7 +163,7 @@ typedef struct OOH323EndPoint {
  * @return               OO_OK, on success. OO_FAILED, on failure
  */
 EXTERN int ooH323EpInitialize
-   (enum OOCallMode callMode, const char* tracefile);
+   (enum OOCallMode callMode, const char* tracefile, char* errstr, int errstr_max);
 
 /**
  * This function is used to represent the H.323 application endpoint as
index a151f0c..5c06be7 100644 (file)
@@ -3812,6 +3812,54 @@ static void check_quota(struct vm_state *vms, char *mailbox) {
 
 #endif /* IMAP_STORAGE */
 
+static void cleanup_orphaned_lock_files(const char *base)
+{
+       DIR *dir;
+       struct dirent *e;
+
+       dir = opendir(base);
+       if (!dir) {
+               /* Don't complain about this too loudly */
+               ast_debug(2, "Unable to open `%s': %s\n", base, strerror(errno));
+               return;
+       }
+
+       while ((e = readdir(dir))) {
+               char *fullpath;
+               struct stat s;
+
+               /* Always skip . and .. */
+               if (!strcmp(e->d_name, ".") || !strcmp(e->d_name, "..")) {
+                       continue;
+               }
+
+               /* Build up the full path (using dynamic memory because PATH_MAX is crap) */
+               if (ast_asprintf(&fullpath, "%s/%s", base, e->d_name) == -1) {
+                       break;
+               }
+
+               if (lstat(fullpath, &s) < 0) {
+                       ast_free(fullpath);
+                       continue;
+               }
+
+               /* This is exposing an implementation detail of ast_lock_path, but it makes
+                * our life a bit easier */
+               if (!strcmp(e->d_name, ".lock") && S_ISLNK(s.st_mode)) {
+                       if (!ast_unlock_path(base)) {
+                               ast_log(AST_LOG_NOTICE, "Cleaned up orphaned lock file: %s/.lock\n", base);
+                       }
+               } else if (S_ISDIR(s.st_mode)) {
+                       /* If it is a directory, let's dive down */
+                       cleanup_orphaned_lock_files(fullpath);
+               }
+
+               ast_free(fullpath);
+       }
+
+       closedir(dir);
+}
+
 /*! \brief Lock file path
  * only return failure if ast_lock_path returns 'timeout',
  * not if the path does not exist or any other reason
@@ -12483,8 +12531,8 @@ static int append_mailbox(const char *context, const char *box, const char *data
        if (stringp && (s = strsep(&stringp, ","))) {
                ast_copy_string(vmu->pager, s, sizeof(vmu->pager));
        }
-       if (stringp && (s = strsep(&stringp, ","))) {
-               apply_options(vmu, s);
+       if (stringp) {
+               apply_options(vmu, stringp);
        }
 
        switch (vmu->passwordlocation) {
@@ -15355,6 +15403,9 @@ static int load_module(void)
        /* compute the location of the voicemail spool directory */
        snprintf(VM_SPOOL_DIR, sizeof(VM_SPOOL_DIR), "%s/voicemail/", ast_config_AST_SPOOL_DIR);
 
+       /* Now that we have a spool directory, clean up old lock files */
+       cleanup_orphaned_lock_files(VM_SPOOL_DIR);
+
        if (!(mwi_subscription_tps = ast_taskprocessor_get("app_voicemail", 0))) {
                ast_log(AST_LOG_WARNING, "failed to reference mwi subscription taskprocessor.  MWI will not work\n");
        }
index 290ea2b..f9f8520 100644 (file)
@@ -33,6 +33,8 @@
 
 #include "asterisk.h"
 
+#include <math.h>
+
 #include "asterisk/stream.h"
 #include "asterisk/test.h"
 #include "asterisk/vector.h"
@@ -75,8 +77,8 @@ struct softmix_remb_collector {
        struct ast_frame frame;
        /*! The REMB to send to the source which is collecting REMB reports */
        struct ast_rtp_rtcp_feedback feedback;
-       /*! The maximum bitrate */
-       unsigned int bitrate;
+       /*! The maximum bitrate (A single precision floating point is big enough) */
+       float bitrate;
 };
 
 struct softmix_stats {
@@ -1334,7 +1336,7 @@ static void remb_collect_report(struct ast_bridge *bridge, struct ast_bridge_cha
        struct softmix_bridge_data *softmix_data, struct softmix_channel *sc)
 {
        int i;
-       unsigned int bitrate;
+       float bitrate;
 
        /* If there are no video sources that we are a receiver of then we have noone to
         * report REMB to.
@@ -1391,6 +1393,7 @@ static void remb_collect_report(struct ast_bridge *bridge, struct ast_bridge_cha
 static void remb_send_report(struct ast_bridge_channel *bridge_channel, struct softmix_channel *sc)
 {
        int i;
+       int exp;
 
        if (!sc->remb_collector) {
                return;
@@ -1398,17 +1401,52 @@ static void remb_send_report(struct ast_bridge_channel *bridge_channel, struct s
 
        /* We always do this calculation as even when the bitrate is zero the browser
         * still prefers it to be accurate instead of lying.
+        *
+        * The mantissa only has 18 bits available, so make sure it fits. Adjust the
+        * value and exponent for those values that don't.
+        *
+        * For example given the following:
+        *
+        * bitrate = 123456789.0
+        * frexp(bitrate, &exp);
+        *
+        * 'exp' should now equal 27 (number of bits needed to represent the value). Since
+        * the mantissa must fit into an 18-bit unsigned integer, and the given bitrate is
+        * too large to fit, we must subtract 18 from the exponent in order to get the
+        * number of times the bitrate will fit into that size integer.
+        *
+        * exp -= 18;
+        *
+        * 'exp' is now equal to 9. Now we can get the mantissa that fits into an 18-bit
+        * unsigned integer by dividing the bitrate by 2^exp:
+        *
+        * mantissa = 123456789.0 / 2^9
+        *
+        * This makes the final mantissa equal to 241126 (implicitly cast), which is less
+        * than 262143 (the max value that can be put into an unsigned 18-bit integer).
+        * So now we have the following:
+        *
+        * exp = 9;
+        * mantissa = 241126;
+        *
+        * If we multiply that back we should come up with something close to the original
+        * bit rate:
+        *
+        * 241126 * 2^9 = 123456512
+        *
+        * Precision is lost due to the nature of floating point values. Easier to why from
+        * the binary:
+        *
+        * 241126 * 2^9 = 241126 << 9 = 111010110111100110 << 9 = 111010110111100110000000000
+        *
+        * Precision on the "lower" end is lost due to zeros being shifted in. This loss is
+        * both expected and acceptable.
         */
-       sc->remb_collector->feedback.remb.br_mantissa = sc->remb_collector->bitrate;
-       sc->remb_collector->feedback.remb.br_exp = 0;
+       frexp(sc->remb_collector->bitrate, &exp);
+       exp = exp > 18 ? exp - 18 : 0;
 
-       /* The mantissa only has 18 bits available, so while it exceeds them we bump
-        * up the exp.
-        */
-       while (sc->remb_collector->feedback.remb.br_mantissa > 0x3ffff) {
-               sc->remb_collector->feedback.remb.br_mantissa = sc->remb_collector->feedback.remb.br_mantissa >> 1;
-               sc->remb_collector->feedback.remb.br_exp++;
-       }
+       sc->remb_collector->feedback.remb.br_mantissa = sc->remb_collector->bitrate / (1 << exp);
+       sc->remb_collector->feedback.remb.br_exp = exp;
 
        for (i = 0; i < AST_VECTOR_SIZE(&bridge_channel->stream_map.to_bridge); ++i) {
                int bridge_num = AST_VECTOR_GET(&bridge_channel->stream_map.to_bridge, i);
index 55cd9ed..e1b3b18 100644 (file)
@@ -2016,7 +2016,7 @@ static int chan_pjsip_digit_begin(struct ast_channel *chan, char digit)
                break;
        case AST_SIP_DTMF_AUTO_INFO:
                if (!media || !media->rtp || (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_NONE)) {
-                       return -1;
+                       return 0;
                }
                ast_rtp_instance_dtmf_begin(media->rtp, digit);
                break;
index b5bfad4..bb2de27 100644 (file)
@@ -11637,7 +11637,7 @@ static int process_sdp_a_text(const char *a, struct sip_pvt *p, struct ast_rtp_c
                                ast_verbose("Discarded description format %s for ID %u\n", mimeSubtype, codec);
                }
        } else if (!strncmp(a, red_fmtp, strlen(red_fmtp))) {
-               char *rest;
+               char *rest = NULL;
                /* count numbers of generations in fmtp */
                red_cp = &red_fmtp[strlen(red_fmtp)];
                strncpy(red_fmtp, a, 100);
index 522a091..c7553b7 100644 (file)
                 ; with extreme caution and only to mitigate specific issues.
                 ; Under certain conditions they could make things worse.
 
+;norefersub=yes     ; Enable sending norefersub option tag in Supported header to advertise
+                    ; that the User Agent is capable of accepting a REFER request with
+                    ; creating an implicit subscription (see RFC 4488).
+                    ; (default: "yes")
+
 ; MODULE PROVIDING BELOW SECTION(S): res_pjsip_acl
 ;==========================ACL SECTION OPTIONS=========================
 ;[acl]
diff --git a/contrib/ast-db-manage/config/versions/3a094a18e75b_pjsip_add_norefersub.py b/contrib/ast-db-manage/config/versions/3a094a18e75b_pjsip_add_norefersub.py
new file mode 100644 (file)
index 0000000..1209ae2
--- /dev/null
@@ -0,0 +1,39 @@
+"""pjsip add norefersub
+
+Revision ID: 3a094a18e75b
+Revises: 80473bad3c16
+Create Date: 2019-04-17 09:25:42.040269
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '3a094a18e75b'
+down_revision = '80473bad3c16'
+
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects.postgresql import ENUM
+
+AST_BOOL_NAME = 'ast_bool_values'
+# We'll just ignore the n/y and f/t abbreviations as Asterisk does not write
+# those aliases.
+AST_BOOL_VALUES = [ '0', '1',
+                    'off', 'on',
+                    'false', 'true',
+                    'no', 'yes' ]
+
+
+def upgrade():
+    ############################# Enums ##############################
+
+    # ast_bool_values has already been created, so use postgres enum object
+    # type to get around "already created" issue - works okay with mysql
+    ast_bool_values = ENUM(*AST_BOOL_VALUES, name=AST_BOOL_NAME, create_type=True)
+
+    op.add_column('ps_globals', sa.Column('norefersub', ast_bool_values))
+
+
+def downgrade():
+    if op.get_context().bind.dialect.name == 'mssql':
+        op.drop_constraint('ck_ps_globals_norefersub_ast_bool_values', 'ps_globals')
+    op.drop_column('ps_globals', 'norefersub')
index da0df2a..8a2407f 100644 (file)
@@ -5,24 +5,28 @@ used by the release script to update the CHANGES file automatically. The only
 time that it is necessary to add something to the CHANGES-staging directory is
 if you are either adding a new feature to Asterisk or adding new functionality
 to an existing feature. The file does not need to have a meaningful name, but
-it probably should. If there are multiple items that need documenting, each can
-be separated with a subject line, which should always start with "Subject:",
-followed by the subject of the change. This is case sensitive! For example, if
-you are making a change to PJSIP, then you might add the file
-"res_pjsip_my_cool_feature" to this directory, with a short description of what
-it does. If you are adding multiple entries, they should be done in the same
-commit to avoid merge conflicts. Here's an example:
+it probably should. If there are multiple items that need documenting, you can
+add multiple files, each with their own description. If the message is going to
+be the same for each subject, then you can add multiple subject headers to one
+file. The "Subject: xxx" line is case sensitive! For example, if you are making
+a change to PJSIP, then you might add the file "res_pjsip_my_cool_feature" to
+this directory, with a short description of what it does. If you are adding
+multiple entries, they should be done in the same commit to avoid merge
+conflicts. Here's an example:
 
 > Subject: res_pjsip
+> Subject: Core
 >
 > Here's a pretty good description of my new feature that explains exactly what
 > it does and how to use it.
+
+Here's a master-only example:
+
+> Subject: res_ari
+> Master-Only: True
 >
-> Subject: core
-> Master-Only: true
->
-> Here's another description of something else I added that is a big enough
-> change to warrant another entry in the CHANGES file.
+> This change will only go into the master branch. The "Master-Only" header
+> will never be in a change not in master.
 
 Note that the second subject has another header: "Master-Only". Changes that go
 into the master branch and ONLY the master branch are the only ones that should
diff --git a/doc/CHANGES-staging/bridging_stasis_cache.txt b/doc/CHANGES-staging/bridging_stasis_cache.txt
new file mode 100644 (file)
index 0000000..df6b3cd
--- /dev/null
@@ -0,0 +1,36 @@
+Subject: Bridging
+Master-Only: true
+
+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.
diff --git a/doc/CHANGES-staging/chan_sip_deprecated.txt b/doc/CHANGES-staging/chan_sip_deprecated.txt
new file mode 100644 (file)
index 0000000..cffd1db
--- /dev/null
@@ -0,0 +1,7 @@
+Subject: chan_sip
+Master-Only: true
+
+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
diff --git a/doc/CHANGES-staging/channels_stasis_cache.txt b/doc/CHANGES-staging/channels_stasis_cache.txt
new file mode 100644 (file)
index 0000000..b4dbfc3
--- /dev/null
@@ -0,0 +1,16 @@
+Subject: Channels
+Master-Only: true
+
+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.
diff --git a/doc/CHANGES-staging/res_pjsip_add_norefersub_global_config.txt b/doc/CHANGES-staging/res_pjsip_add_norefersub_global_config.txt
new file mode 100644 (file)
index 0000000..4e07672
--- /dev/null
@@ -0,0 +1,13 @@
+res_pjsip:  Added a norefersub configuration setting
+
+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.
index 1ef9334..8147161 100644 (file)
@@ -5,23 +5,27 @@ used by the release script to update the UPGRADE.txt file automatically. The
 only time that it is necessary to add something to the UPGRADE-staging directory
 is if you are making a breaking change to an existing feature in Asterisk. The
 file does not need to have a meaningful name, but it probably should. If there
-are multiple items that need documenting, each can be separated with a subject
-line, which should always start with "Subject:", followed by the subject of the
-change. This is case sensitive! For example, if you are making a change to PJSIP,
-then you might add the file "res_pjsip_breaking_change" to this directory, with
-a short description of what it does. If you are adding multiple entries, they
-should be done in the same commit to avoid merge conflicts. Here's an example:
+are multiple items that need documenting, you can add multiple files, each with
+their own description. If the message is going to be the same for each subject,
+then you can add multiple subject headers to one file. The "Subject: xxx" line
+is case sensitive! For example, if you are making a change to PJSIP, then you
+might add the file "res_pjsip_my_cool_feature" to this directory, with a short
+description of what it does. If you are adding multiple entries, they should be
+done in the same commit to avoid merge conflicts. Here's an example:
 
 > Subject: res_pjsip
+> Subject: Core
 >
-> Here's a pretty good description of what I changed that explains exactly what
-> it does and why it breaks things (and why they needed to be broken).
->
-> Subject: core
-> Master-Only: true
+> Here's a pretty good description of my new feature that explains exactly what
+> it does and how to use it.
+
+Here's a master-only example:
+
+> Subject: res_ari
+> Master-Only: True
 >
-> Here's another description of something else I added that is a big enough
-> change to warrant another entry in the UPDATE.txt file.
+> This change will only go into the master branch. The "Master-Only" header
+> will never be in a change not in master.
 
 Note that the second subject has another header: "Master-Only". Changes that go
 into the master branch and ONLY the master branch are the only ones that should
diff --git a/doc/UPGRADE-staging/applications_jabberstatus.txt b/doc/UPGRADE-staging/applications_jabberstatus.txt
new file mode 100644 (file)
index 0000000..93e4112
--- /dev/null
@@ -0,0 +1,4 @@
+Subject: Applications
+Master-Only: true
+
+The JabberStatus application, deprecated in Asterisk 12, has been removed.
diff --git a/doc/UPGRADE-staging/bridging_stasis_cache.txt b/doc/UPGRADE-staging/bridging_stasis_cache.txt
new file mode 100644 (file)
index 0000000..df6b3cd
--- /dev/null
@@ -0,0 +1,36 @@
+Subject: Bridging
+Master-Only: true
+
+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.
diff --git a/doc/UPGRADE-staging/chan_sip_deprecated.txt b/doc/UPGRADE-staging/chan_sip_deprecated.txt
new file mode 100644 (file)
index 0000000..cffd1db
--- /dev/null
@@ -0,0 +1,7 @@
+Subject: chan_sip
+Master-Only: true
+
+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
diff --git a/doc/UPGRADE-staging/channels_stasis_cache.txt b/doc/UPGRADE-staging/channels_stasis_cache.txt
new file mode 100644 (file)
index 0000000..b4dbfc3
--- /dev/null
@@ -0,0 +1,16 @@
+Subject: Channels
+Master-Only: true
+
+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.
diff --git a/doc/UPGRADE-staging/func_callerid_callerpres.txt b/doc/UPGRADE-staging/func_callerid_callerpres.txt
new file mode 100644 (file)
index 0000000..003d67d
--- /dev/null
@@ -0,0 +1,5 @@
+Subject: func_callerid
+Master-Only: true
+
+The CALLERPRES() dialplan function, deprecated in Asterisk 1.8, has been
+removed.
diff --git a/doc/UPGRADE-staging/res_parking_parkingslot.txt b/doc/UPGRADE-staging/res_parking_parkingslot.txt
new file mode 100644 (file)
index 0000000..b5b4cbc
--- /dev/null
@@ -0,0 +1,5 @@
+Subject: res_parking
+Master-Only: true
+
+The PARKINGSLOT channel variable, deprecated in Asterisk 12 in favor of the
+PARKING_SPACE channel variable, will no longer be set.
diff --git a/doc/UPGRADE-staging/res_xmpp_jabberstatus.txt b/doc/UPGRADE-staging/res_xmpp_jabberstatus.txt
new file mode 100644 (file)
index 0000000..4400278
--- /dev/null
@@ -0,0 +1,4 @@
+Subject: res_xmpp
+Master-Only: true
+
+The JabberStatus application, deprecated in Asterisk 12, has been removed.
index 665380c..ce0baa4 100644 (file)
@@ -993,6 +993,22 @@ struct ast_json *ast_json_timeval(const struct timeval tv, const char *zone);
 struct ast_json *ast_json_ipaddr(const struct ast_sockaddr *addr, enum ast_transport transport_type);
 
 /*!
+ * \brief Construct a context/exten/priority/application/application_data as JSON.
+ *
+ * If a \c NULL is passed for \c context or \c exten or \c app_name or \c app_data,
+ * or -1 for \c priority, the fields is set to ast_json_null().
+ *
+ * \param context Context name.
+ * \param exten Extension.
+ * \param priority Dialplan priority.
+ * \param app_name Application name.
+ * \param app_data Application argument.
+ * \return JSON object with \c context, \c exten and \c priority \c app_name \c app_data fields
+ */
+struct ast_json *ast_json_dialplan_cep_app(
+               const char *context, const char *exten, int priority, const char *app_name, const char *app_data);
+
+/*!
  * \brief Construct a context/exten/priority as JSON.
  *
  * If a \c NULL is passed for \c context or \c exten, or -1 for \c priority,
index 335b3e5..f38e0b3 100644 (file)
@@ -2789,6 +2789,13 @@ unsigned int ast_sip_get_mwi_disable_initial_unsolicited(void);
 unsigned int ast_sip_get_use_callerid_contact(void);
 
 /*!
+ * \brief Retrieve the global setting 'norefersub'.
+ *
+ * \retval non zero if norefersub is to be sent in "Supported" Headers
+ */
+unsigned int ast_sip_get_norefersub(void);
+
+/*!
  * \brief Retrieve the global setting 'ignore_uri_user_options'.
  * \since 13.12.0
  *
index 98d7773..57aaefe 100644 (file)
@@ -2683,6 +2683,20 @@ struct stasis_message_type *ast_rtp_rtcp_sent_type(void);
 struct stasis_message_type *ast_rtp_rtcp_received_type(void);
 
 /*!
+ * \brief Convert given stat instance into json format
+ * \param stats
+ * \retval A json format stat
+ */
+struct ast_json *ast_rtp_convert_stats_json(const struct ast_rtp_instance_stats *stats);
+
+/*!
+ * \brief Retrieve statistics about an RTP instance in json format
+ * \param instance
+ * \retval json object of stats
+ */
+struct ast_json *ast_rtp_instance_get_stats_all_json(struct ast_rtp_instance *instance);
+
+/*!
  * \since 12
  * \brief \ref stasis topic for RTP and RTCP related messages
  *
index 0b229bf..8e9c6c7 100644 (file)
@@ -520,15 +520,56 @@ struct stasis_topic;
 struct stasis_topic *stasis_topic_create(const char *name);
 
 /*!
+ * \brief Create a new topic with given detail.
+ * \param name Name of the new topic.
+ * \param detail Detail description of the new topic. i.e. "Queue main topic for subscribing every queue event"
+ * \return New topic instance.
+ * \return \c NULL on error.
+ *
+ * \note There is no explicit ability to unsubscribe all subscribers
+ * from a topic and destroy it. As a result the topic can persist until
+ * the last subscriber unsubscribes itself even if there is no
+ * publisher.
+ */
+struct stasis_topic *stasis_topic_create_with_detail(
+               const char *name, const char *detail);
+
+/*!
+ * \brief Get a topic of the given name.
+ * \param name Topic's name.
+ * \return Name of the topic.
+ * \return \c NULL on error or not exist.
+ *
+ * \note This SHOULD NOT be used in normal operation for publishing messages.
+ */
+struct stasis_topic *stasis_topic_get(const char *name);
+
+/*!
+ * \brief Return the uniqueid of a topic.
+ * \param topic Topic.
+ * \return Uniqueid of the topic.
+ * \return \c NULL if topic is \c NULL.
+ */
+const char *stasis_topic_uniqueid(const struct stasis_topic *topic);
+
+/*!
  * \brief Return the name of a topic.
  * \param topic Topic.
  * \return Name of the topic.
  * \return \c NULL if topic is \c NULL.
- * \since 12
  */
 const char *stasis_topic_name(const struct stasis_topic *topic);
 
 /*!
+ * \brief Return the detail of a topic.
+ * \param topic Topic.
+ * \return Detail of the topic.
+ * \return \c NULL if topic is \c NULL.
+ * \since 12
+ */
+const char *stasis_topic_detail(const struct stasis_topic *topic);
+
+/*!
  * \brief Return the number of subscribers of a topic.
  * \param topic Topic.
  * \return Number of subscribers of the topic.
index f694c2b..5660fbe 100644 (file)
@@ -2904,7 +2904,10 @@ static int reload_module(void)
                ast_copy_string(buf, v->value, sizeof(buf));
                stringp = buf;
                driver = strsep(&stringp, ",");
-
+               if (!stringp) {
+                       ast_log(LOG_WARNING, "extconfig.conf: value '%s' ignored due to wrong format\n", v->value);
+                       continue;
+               }
                if ((tmp = strchr(stringp, '\"')))
                        stringp = tmp;
 
index f72de41..09101aa 100644 (file)
@@ -629,12 +629,21 @@ struct ast_json *ast_json_name_number(const char *name, const char *number)
                "number", AST_JSON_UTF8_VALIDATE(number));
 }
 
+struct ast_json *ast_json_dialplan_cep_app(
+               const char *context, const char *exten, int priority, const char *app_name, const char *app_data)
+{
+       return ast_json_pack("{s: s?, s: s?, s: o, s: s?, s: s?}",
+               "context", context,
+               "exten", exten,
+               "priority", priority != -1 ? ast_json_integer_create(priority) : ast_json_null(),
+               "app_name", app_name,
+               "app_data", app_data
+               );
+}
+
 struct ast_json *ast_json_dialplan_cep(const char *context, const char *exten, int priority)
 {
-       return ast_json_pack("{s: o, s: o, s: o}",
-               "context", context ? ast_json_string_create(context) : ast_json_null(),
-               "exten", exten ? ast_json_string_create(exten) : ast_json_null(),
-               "priority", priority != -1 ? ast_json_integer_create(priority) : ast_json_null());
+       return ast_json_dialplan_cep_app(context, exten, priority, "", "");
 }
 
 struct ast_json *ast_json_timeval(const struct timeval tv, const char *zone)
index ee5ed7e..83bfb90 100644 (file)
@@ -1216,6 +1216,18 @@ static char *action2str(enum ext_match_t action)
 
 #endif
 
+static const char *candidate_exten_advance(const char *str)
+{
+       str++;
+       while (*str == '-') {
+               str++;
+       }
+       return str;
+}
+
+#define MORE(s) (*candidate_exten_advance(s))
+#define ADVANCE(s) candidate_exten_advance(s)
+
 static void new_find_extension(const char *str, struct scoreboard *score, struct match_char *tree, int length, int spec, const char *callerid, const char *label, enum ext_match_t action)
 {
        struct match_char *p; /* note minimal stack storage requirements */
@@ -1231,7 +1243,7 @@ static void new_find_extension(const char *str, struct scoreboard *score, struct
                        if (p->x[0] == 'N') {
                                if (p->x[1] == 0 && *str >= '2' && *str <= '9' ) {
 #define        NEW_MATCHER_CHK_MATCH          \
-                                       if (p->exten && !(*(str + 1))) { /* if a shorter pattern matches along the way, might as well report it */             \
+                                       if (p->exten && !MORE(str)) { /* if a shorter pattern matches along the way, might as well report it */             \
                                                if (action == E_MATCH || action == E_SPAWN || action == E_FINDLABEL) { /* if in CANMATCH/MATCHMORE, don't let matches get in the way */   \
                                                        update_scoreboard(score, length + 1, spec + p->specificity, p->exten, 0, callerid, p->deleted, p);                 \
                                                        if (!p->deleted) {                                                                                           \
@@ -1249,10 +1261,10 @@ static void new_find_extension(const char *str, struct scoreboard *score, struct
                                        }
 
 #define        NEW_MATCHER_RECURSE                \
-                                       if (p->next_char && (*(str + 1) || (p->next_char->x[0] == '/' && p->next_char->x[1] == 0)                 \
+                                       if (p->next_char && (MORE(str) || (p->next_char->x[0] == '/' && p->next_char->x[1] == 0)                 \
                                                       || p->next_char->x[0] == '!')) {                                          \
-                                               if (*(str + 1) || p->next_char->x[0] == '!') {                                                         \
-                                                       new_find_extension(str + 1, score, p->next_char, length + 1, spec + p->specificity, callerid, label, action); \
+                                               if (MORE(str) || p->next_char->x[0] == '!') {                                                         \
+                                                       new_find_extension(ADVANCE(str), score, p->next_char, length + 1, spec + p->specificity, callerid, label, action); \
                                                        if (score->exten)  {                                                                             \
                                                        ast_debug(4 ,"returning an exact match-- %s\n", score->exten->name);                         \
                                                                return; /* the first match is all we need */                                                 \
@@ -1265,7 +1277,7 @@ static void new_find_extension(const char *str, struct scoreboard *score, struct
                                                                return; /* the first match is all we need */                                                 \
                                                        }                                                                                                                                                \
                                                }                                                                                                    \
-                                       } else if ((p->next_char || action == E_CANMATCH) && !*(str + 1)) {                                                                  \
+                                       } else if ((p->next_char || action == E_CANMATCH) && !MORE(str)) {                                                                  \
                                                score->canmatch = 1;                                                                                 \
                                                score->canmatch_exten = get_canmatch_exten(p);                                                       \
                                                if (action == E_CANMATCH || action == E_MATCHMORE) {                                                 \
@@ -1362,6 +1374,9 @@ static void new_find_extension(const char *str, struct scoreboard *score, struct
        ast_debug(4, "return at end of func\n");
 }
 
+#undef MORE
+#undef ADVANCE
+
 /* the algorithm for forming the extension pattern tree is also a bit simple; you
  * traverse all the extensions in a context, and for each char of the extension,
  * you see if it exists in the tree; if it doesn't, you add it at the appropriate
@@ -8760,6 +8775,7 @@ static int pbx_parseable_goto(struct ast_channel *chan, const char *goto_string,
        char *stringp;
        int ipri;
        int mode = 0;
+       char rest[2] = "";
 
        if (ast_strlen_zero(goto_string)) {
                ast_log(LOG_WARNING, "Goto requires an argument ([[context,]extension,]priority)\n");
@@ -8785,7 +8801,7 @@ static int pbx_parseable_goto(struct ast_channel *chan, const char *goto_string,
                mode = -1;
                pri++;
        }
-       if (sscanf(pri, "%30d", &ipri) != 1) {
+       if (sscanf(pri, "%30d%1s", &ipri, rest) != 1) {
                ipri = ast_findlabel_extension(chan, context ? context : ast_channel_context(chan),
                        exten ? exten : ast_channel_exten(chan), pri,
                        S_COR(ast_channel_caller(chan)->id.number.valid, ast_channel_caller(chan)->id.number.str, NULL));
index 403b663..90ade04 100644 (file)
@@ -278,6 +278,20 @@ static struct stasis_topic *rtp_topic;
 
 
 /*!
+ * \brief Set given json object into target with name
+ *
+ * \param target Target json.
+ * \param name key of given object.
+ * \param obj Json value will be set.
+ */
+#define SET_AST_JSON_OBJ(target, name, obj) ({                                 \
+       struct ast_json *j_tmp = obj;                                           \
+       if (j_tmp) {                                            \
+               ast_json_object_set(target, name, j_tmp);                                               \
+       }                                               \
+})
+
+/*!
  * \internal
  * \brief Destructor for \c ast_rtp_payload_type
  */
@@ -3740,3 +3754,77 @@ void ast_rtp_instance_set_stream_num(struct ast_rtp_instance *rtp, int stream_nu
        }
        ao2_unlock(rtp);
 }
+
+struct ast_json *ast_rtp_convert_stats_json(const struct ast_rtp_instance_stats *stats)
+{
+       struct ast_json *j_res;
+       int ret;
+
+       j_res = ast_json_object_create();
+       if (!j_res) {
+               return NULL;
+       }
+
+       /* set mandatory items */
+       ret = ast_json_object_set(j_res, "txcount", ast_json_integer_create(stats->txcount));
+       ret |= ast_json_object_set(j_res, "rxcount", ast_json_integer_create(stats->rxcount));
+
+       ret |= ast_json_object_set(j_res, "txploss", ast_json_integer_create(stats->txploss));
+       ret |= ast_json_object_set(j_res, "rxploss", ast_json_integer_create(stats->rxploss));
+
+       ret |= ast_json_object_set(j_res, "local_ssrc", ast_json_integer_create(stats->local_ssrc));
+       ret |= ast_json_object_set(j_res, "remote_ssrc", ast_json_integer_create(stats->remote_ssrc));
+
+       ret |= ast_json_object_set(j_res, "txoctetcount", ast_json_integer_create(stats->txoctetcount));
+       ret |= ast_json_object_set(j_res, "rxoctetcount", ast_json_integer_create(stats->rxoctetcount));
+
+       ret |= ast_json_object_set(j_res, "channel_uniqueid", ast_json_string_create(stats->channel_uniqueid));
+       if (ret) {
+               ast_log(LOG_WARNING, "Could not create rtp statistics info. channel: %s\n", stats->channel_uniqueid);
+               ast_json_unref(j_res);
+               return NULL;
+       }
+
+       /* set other items */
+       SET_AST_JSON_OBJ(j_res, "txjitter", ast_json_real_create(stats->txjitter));
+       SET_AST_JSON_OBJ(j_res, "rxjitter", ast_json_real_create(stats->rxjitter));
+
+       SET_AST_JSON_OBJ(j_res, "remote_maxjitter", ast_json_real_create(stats->remote_maxjitter));
+       SET_AST_JSON_OBJ(j_res, "remote_minjitter", ast_json_real_create(stats->remote_minjitter));
+       SET_AST_JSON_OBJ(j_res, "remote_normdevjitter", ast_json_real_create(stats->remote_normdevjitter));
+       SET_AST_JSON_OBJ(j_res, "remote_stdevjitter", ast_json_real_create(stats->remote_stdevjitter));
+
+       SET_AST_JSON_OBJ(j_res, "local_maxjitter", ast_json_real_create(stats->local_maxjitter));
+       SET_AST_JSON_OBJ(j_res, "local_minjitter", ast_json_real_create(stats->local_minjitter));
+       SET_AST_JSON_OBJ(j_res, "local_normdevjitter", ast_json_real_create(stats->local_normdevjitter));
+       SET_AST_JSON_OBJ(j_res, "local_stdevjitter", ast_json_real_create(stats->local_stdevjitter));
+
+       SET_AST_JSON_OBJ(j_res, "remote_maxrxploss", ast_json_real_create(stats->remote_maxrxploss));
+       SET_AST_JSON_OBJ(j_res, "remote_minrxploss", ast_json_real_create(stats->remote_minrxploss));
+       SET_AST_JSON_OBJ(j_res, "remote_normdevrxploss", ast_json_real_create(stats->remote_normdevrxploss));
+       SET_AST_JSON_OBJ(j_res, "remote_stdevrxploss", ast_json_real_create(stats->remote_stdevrxploss));
+
+       SET_AST_JSON_OBJ(j_res, "local_maxrxploss", ast_json_real_create(stats->local_maxrxploss));
+       SET_AST_JSON_OBJ(j_res, "local_minrxploss", ast_json_real_create(stats->local_minrxploss));
+       SET_AST_JSON_OBJ(j_res, "local_normdevrxploss", ast_json_real_create(stats->local_normdevrxploss));
+       SET_AST_JSON_OBJ(j_res, "local_stdevrxploss", ast_json_real_create(stats->local_stdevrxploss));
+
+       SET_AST_JSON_OBJ(j_res, "rtt", ast_json_real_create(stats->rtt));
+       SET_AST_JSON_OBJ(j_res, "maxrtt", ast_json_real_create(stats->maxrtt));
+       SET_AST_JSON_OBJ(j_res, "minrtt", ast_json_real_create(stats->minrtt));
+       SET_AST_JSON_OBJ(j_res, "normdevrtt", ast_json_real_create(stats->normdevrtt));
+       SET_AST_JSON_OBJ(j_res, "stdevrtt", ast_json_real_create(stats->stdevrtt));
+
+       return j_res;
+}
+
+struct ast_json *ast_rtp_instance_get_stats_all_json(struct ast_rtp_instance *instance)
+{
+       struct ast_rtp_instance_stats stats = {0,};
+
+       if(ast_rtp_instance_get_stats(instance, &stats, AST_RTP_INSTANCE_STAT_ALL)) {
+               return NULL;
+       }
+
+       return ast_rtp_convert_stats_json(&stats);
+}
index 7dd3893..4ce7052 100644 (file)
@@ -41,9 +41,7 @@
 #include "asterisk/stasis_bridges.h"
 #include "asterisk/stasis_endpoints.h"
 #include "asterisk/config_options.h"
-#ifdef AST_DEVMODE
 #include "asterisk/cli.h"
-#endif
 
 /*** DOCUMENTATION
        <managerEvent language="en_US" name="UserEvent">
@@ -307,6 +305,16 @@ static struct ast_threadpool *pool;
 
 STASIS_MESSAGE_TYPE_DEFN(stasis_subscription_change_type);
 
+#if defined(LOW_MEMORY)
+
+#define TOPIC_ALL_BUCKETS 257
+
+#else
+
+#define TOPIC_ALL_BUCKETS 997
+
+#endif
+
 #ifdef AST_DEVMODE
 
 /*! The number of buckets to use for topic statistics */
@@ -372,9 +380,37 @@ struct stasis_topic {
        int subscriber_id;
 
        /*! Name of the topic */
-       char name[0];
+       char *name;
+
+       /*! Detail of the topic */
+       char *detail;
+
+       /*! Creation time */
+       struct timeval *creationtime;
 };
 
+struct ao2_container *topic_all;
+
+struct topic_proxy {
+       AO2_WEAKPROXY();
+
+       char *name;
+       char *detail;
+
+       struct timeval creationtime;
+
+       char buf[0];
+};
+
+AO2_STRING_FIELD_HASH_FN(topic_proxy, name);
+AO2_STRING_FIELD_CMP_FN(topic_proxy, name);
+AO2_STRING_FIELD_CASE_SORT_FN(topic_proxy, name);
+
+static void proxy_dtor(void *weakproxy, void *data)
+{
+       ao2_unlink(topic_all, weakproxy);
+}
+
 /* Forward declarations for the tightly-coupled subscription object */
 static int topic_add_subscription(struct stasis_topic *topic,
        struct stasis_subscription *sub);
@@ -394,6 +430,9 @@ static void topic_dtor(void *obj)
 {
        struct stasis_topic *topic = obj;
 
+       ast_debug(2, "Destroying topic. name: %s, detail: %s\n",
+                       topic->name, topic->detail);
+
        /* Subscribers hold a reference to topics, so they should all be
         * unsubscribed before we get here. */
        ast_assert(AST_VECTOR_SIZE(&topic->subscribers) == 0);
@@ -442,40 +481,145 @@ static struct stasis_topic_statistics *stasis_topic_statistics_create(struct sta
 }
 #endif
 
-struct stasis_topic *stasis_topic_create(const char *name)
+static int link_topic_proxy(struct stasis_topic *topic, const char *name, const char *detail)
+{
+       struct topic_proxy *proxy;
+       struct stasis_topic* topic_tmp;
+
+       if (!topic || !name || !strlen(name) || !detail) {
+               return -1;
+       }
+
+       ao2_wrlock(topic_all);
+
+       topic_tmp = stasis_topic_get(name);
+       if (topic_tmp) {
+               ast_log(LOG_ERROR, "The same topic is already exist. name: %s\n", name);
+               ao2_ref(topic_tmp, -1);
+               ao2_unlock(topic_all);
+
+               return -1;
+       }
+
+       proxy = ao2_t_weakproxy_alloc(
+                       sizeof(*proxy) + strlen(name) + 1 + strlen(detail) + 1, NULL, topic->name);
+       if (!proxy) {
+               ao2_unlock(topic_all);
+
+               return -1;
+       }
+
+       /* set the proxy info */
+       proxy->name = proxy->buf;
+       proxy->detail = proxy->name + strlen(name) + 1;
+
+       strcpy(proxy->name, name); /* SAFE */
+       strcpy(proxy->detail, detail); /* SAFE */
+       proxy->creationtime = ast_tvnow();
+
+       /* We have exclusive access to proxy, no need for locking here. */
+       if (ao2_t_weakproxy_set_object(proxy, topic, OBJ_NOLOCK, "weakproxy link")) {
+               ao2_cleanup(proxy);
+               ao2_unlock(topic_all);
+
+               return -1;
+       }
+
+       if (ao2_weakproxy_subscribe(proxy, proxy_dtor, NULL, OBJ_NOLOCK)) {
+               ao2_cleanup(proxy);
+               ao2_unlock(topic_all);
+
+               return -1;
+       }
+
+       /* setting the topic point to the proxy */
+       topic->name = proxy->name;
+       topic->detail = proxy->detail;
+       topic->creationtime = &(proxy->creationtime);
+
+       ao2_link_flags(topic_all, proxy, OBJ_NOLOCK);
+       ao2_ref(proxy, -1);
+
+       ao2_unlock(topic_all);
+
+       return 0;
+}
+
+struct stasis_topic *stasis_topic_create_with_detail(
+               const char *name, const char* detail
+               )
 {
        struct stasis_topic *topic;
        int res = 0;
 
-       topic = ao2_t_alloc(sizeof(*topic) + strlen(name) + 1, topic_dtor, name);
+       if (!name|| !strlen(name) || !detail) {
+               return NULL;
+       }
+       ast_debug(2, "Creating topic. name: %s, detail: %s\n", name, detail);
+
+       topic = stasis_topic_get(name);
+       if (topic) {
+               ast_debug(2, "Topic is already exist. name: %s, detail: %s\n",
+                               name, detail);
+               return topic;
+       }
+
+       topic = ao2_t_alloc(sizeof(*topic), topic_dtor, name);
        if (!topic) {
                return NULL;
        }
 
-       strcpy(topic->name, name); /* SAFE */
        res |= AST_VECTOR_INIT(&topic->subscribers, INITIAL_SUBSCRIBERS_MAX);
        res |= AST_VECTOR_INIT(&topic->upstream_topics, 0);
-       ast_debug(1, "Topic '%s': %p created\n", topic->name, topic);
+       if (res) {
+               ao2_ref(topic, -1);
+               return NULL;
+       }
+
+       /* link to the proxy */
+       if (link_topic_proxy(topic, name, detail)) {
+               ao2_ref(topic, -1);
+               return NULL;
+       }
 
 #ifdef AST_DEVMODE
        topic->statistics = stasis_topic_statistics_create(topic);
-       if (!topic->name || !topic->statistics || res)
-#else
-       if (!topic->name || res)
-#endif
-       {
+       if (!topic->statistics) {
                ao2_ref(topic, -1);
                return NULL;
        }
+#endif
+       ast_debug(1, "Topic '%s': %p created\n", topic->name, topic);
 
        return topic;
 }
 
+struct stasis_topic *stasis_topic_create(const char *name)
+{
+       return stasis_topic_create_with_detail(name, "");
+}
+
+struct stasis_topic *stasis_topic_get(const char *name)
+{
+       return ao2_weakproxy_find(topic_all, name, OBJ_SEARCH_KEY, "");
+}
+
 const char *stasis_topic_name(const struct stasis_topic *topic)
 {
+       if (!topic) {
+               return NULL;
+       }
        return topic->name;
 }
 
+const char *stasis_topic_detail(const struct stasis_topic *topic)
+{
+       if (!topic) {
+               return NULL;
+       }
+       return topic->detail;
+}
+
 size_t stasis_topic_subscribers(const struct stasis_topic *topic)
 {
        return AST_VECTOR_SIZE(&topic->subscribers);
@@ -2134,6 +2278,142 @@ STASIS_MESSAGE_TYPE_DEFN(ast_multi_user_event_type,
 
 /*! @} */
 
+/*!
+ * \internal
+ * \brief CLI command implementation for 'stasis show topics'
+ */
+static char *stasis_show_topics(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+       struct ao2_iterator iter;
+       struct topic_proxy *topic;
+       struct ao2_container *tmp_container;
+       int count = 0;
+#define FMT_HEADERS            "%-64s %-64s\n"
+#define FMT_FIELDS             "%-64s %-64s\n"
+
+       switch (cmd) {
+       case CLI_INIT:
+               e->command = "stasis show topics";
+               e->usage =
+                       "Usage: stasis show topics\n"
+                       "       Shows a list of topics\n";
+               return NULL;
+       case CLI_GENERATE:
+               return NULL;
+       }
+
+       if (a->argc != e->args) {
+               return CLI_SHOWUSAGE;
+       }
+
+       ast_cli(a->fd, "\n" FMT_HEADERS, "Name", "Detail");
+
+       tmp_container = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK, 0,
+                               topic_proxy_sort_fn, NULL);
+
+       if (!tmp_container || ao2_container_dup(tmp_container, topic_all, OBJ_SEARCH_OBJECT)) {
+               ao2_cleanup(tmp_container);
+
+               return NULL;
+       }
+
+       /* getting all topic in order */
+       iter = ao2_iterator_init(tmp_container, AO2_ITERATOR_UNLINK);
+       while ((topic = ao2_iterator_next(&iter))) {
+               ast_cli(a->fd, FMT_FIELDS, topic->name, topic->detail);
+               ao2_ref(topic, -1);
+               ++count;
+       }
+       ao2_iterator_destroy(&iter);
+       ao2_cleanup(tmp_container);
+
+       ast_cli(a->fd, "\n%d Total topics\n\n", count);
+
+#undef FMT_HEADERS
+#undef FMT_FIELDS
+
+       return CLI_SUCCESS;
+}
+
+/*!
+ * \internal
+ * \brief CLI tab completion for topic names
+ */
+static char *topic_complete_name(const char *word)
+{
+       struct topic_proxy *topic;
+       struct ao2_iterator it;
+       int wordlen = strlen(word);
+       int ret;
+
+       it = ao2_iterator_init(topic_all, 0);
+       while ((topic = ao2_iterator_next(&it))) {
+               if (!strncasecmp(word, topic->name, wordlen)) {
+                       ret = ast_cli_completion_add(ast_strdup(topic->name));
+                       if (ret) {
+                               ao2_ref(topic, -1);
+                               break;
+                       }
+               }
+               ao2_ref(topic, -1);
+       }
+       ao2_iterator_destroy(&it);
+       return NULL;
+}
+
+/*!
+ * \internal
+ * \brief CLI command implementation for 'stasis show topic'
+ */
+static char *stasis_show_topic(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+       struct stasis_topic *topic;
+       char print_time[32];
+
+       switch (cmd) {
+       case CLI_INIT:
+               e->command = "stasis show topic";
+               e->usage =
+                   "Usage: stasis show topic <name>\n"
+                   "       Show stasis topic detail info.\n";
+               return NULL;
+       case CLI_GENERATE:
+               if (a->pos == 3) {
+                       return topic_complete_name(a->word);
+               } else {
+                       return NULL;
+               }
+       }
+
+       if (a->argc != 4) {
+               return CLI_SHOWUSAGE;
+       }
+
+       topic = stasis_topic_get(a->argv[3]);
+       if (!topic) {
+               ast_cli(a->fd, "Specified topic '%s' does not exist\n", a->argv[3]);
+               return CLI_FAILURE;
+       }
+
+       ast_cli(a->fd, "Name: %s\n", topic->name);
+       ast_cli(a->fd, "Detail: %s\n", topic->detail);
+       ast_cli(a->fd, "Subscribers count: %lu\n", AST_VECTOR_SIZE(&topic->subscribers));
+       ast_cli(a->fd, "Forwarding topic count: %lu\n", AST_VECTOR_SIZE(&topic->upstream_topics));
+       ast_format_duration_hh_mm_ss(ast_tvnow().tv_sec - topic->creationtime->tv_sec, print_time, sizeof(print_time));
+       ast_cli(a->fd, "Duration time: %s\n", print_time);
+
+       ao2_ref(topic, -1);
+
+       return CLI_SUCCESS;
+}
+
+
+static struct ast_cli_entry cli_stasis[] = {
+       AST_CLI_DEFINE(stasis_show_topics, "Show all topics"),
+       AST_CLI_DEFINE(stasis_show_topic, "Show topic"),
+};
+
+
 #ifdef AST_DEVMODE
 
 AO2_STRING_FIELD_SORT_FN(stasis_subscription_statistics, uniqueid);
@@ -2646,6 +2926,9 @@ static void stasis_cleanup(void)
        ao2_cleanup(subscription_statistics);
        ao2_cleanup(topic_statistics);
 #endif
+       ast_cli_unregister_multiple(cli_stasis, ARRAY_LEN(cli_stasis));
+       ao2_cleanup(topic_all);
+       topic_all = NULL;
        ast_threadpool_shutdown(pool);
        pool = NULL;
        STASIS_MESSAGE_TYPE_CLEANUP(stasis_subscription_change_type);
@@ -2740,6 +3023,16 @@ int stasis_init(void)
                return -1;
        }
 
+       topic_all = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, TOPIC_ALL_BUCKETS,
+                       topic_proxy_hash_fn, 0, topic_proxy_cmp_fn);
+       if (!topic_all) {
+               return -1;
+       }
+
+       if (ast_cli_register_multiple(cli_stasis, ARRAY_LEN(cli_stasis))) {
+               return -1;
+       }
+
 #ifdef AST_DEVMODE
        /* Statistics information is stored separately so that we don't alter or interrupt the lifetime of the underlying
         * topic or subscripton.
index e8842c1..be77cb9 100644 (file)
@@ -1281,8 +1281,9 @@ struct ast_json *ast_channel_snapshot_to_json(
                        snapshot->connected->name, snapshot->connected->number),
                "accountcode", snapshot->base->accountcode,
                /* Third line */
-               "dialplan", ast_json_dialplan_cep(
-                       snapshot->dialplan->context, snapshot->dialplan->exten, snapshot->dialplan->priority),
+               "dialplan", ast_json_dialplan_cep_app(
+                       snapshot->dialplan->context, snapshot->dialplan->exten, snapshot->dialplan->priority,
+                       snapshot->dialplan->appl, snapshot->dialplan->data),
                "creationtime", ast_json_timeval(snapshot->base->creationtime, NULL),
                "language", snapshot->base->language);
 
index f0d586d..fa90cb8 100644 (file)
@@ -3071,7 +3071,7 @@ static char *dundi_show_hints(struct ast_cli_entry *e, int cmd, struct ast_cli_a
        ast_cli(a->fd, FORMAT2, "Prefix", "Context", "Expiration", "From");
 
        for (db_entry = db_tree; db_entry; db_entry = db_entry->next) {
-               char *rest;
+               char *rest = NULL;
 
                if (ast_get_time_t(db_entry->data, &ts, 0, &length)) {
                        continue;
index f927077..b85e20e 100644 (file)
@@ -759,10 +759,10 @@ static int extension_matches(pval *here, const char *exten, const char *pattern)
                                *r++ = '.';
                                *r++ = '*';
                                break;
-                       case '*':
+                       case '*': /* regex metacharacter */
+                       case '+': /* regex metacharacter */
                                *r++ = '\\';
-                               *r++ = '*';
-                               break;
+                               /* fall through */
                        default:
                                *r++ = *p;
                                break;
@@ -792,14 +792,9 @@ static int extension_matches(pval *here, const char *exten, const char *pattern)
                           exten, pattern); */
                        return 1;
                }
-
-
-       } else {
-               if ( strcmp(exten,pattern) == 0 ) {
-                       return 1;
-               } else
-                       return 0;
        }
+
+       return 0;
 }
 
 
@@ -2924,7 +2919,7 @@ void ael2_semantic_check(pval *item, int *arg_errs, int *arg_warns, int *arg_not
 /* "CODE" GENERATOR -- Convert the AEL representation to asterisk extension language */
 /* =============================================================================================== */
 
-static int control_statement_count = 0;
+static int control_statement_count;
 
 struct ael_priority *new_prio(void)
 {
@@ -3540,18 +3535,14 @@ static int gen_prios(struct ael_extension *exten, char *label, pval *statement,
                                        strcpy(buf2, strp3);
                                        strp3 = strchr(buf2,'(');
                                        if (strp3) {
-                                               *strp3 = '|';
-                                       }
-                                       while ((strp3=strchr(buf2,','))) {
-                                               *strp3 = '|';
+                                               *strp3 = ',';
                                        }
                                        strp3 = strrchr(buf2, ')');
                                        if (strp3)
                                                *strp3 = 0; /* remove the closing paren */
-
                                        for_init->appargs = strdup(buf2);
                                        free(for_init->app);
-                                       for_init->app = strdup("Macro");
+                                       for_init->app = strdup("Gosub");
                                } else {  /* must be a regular app call */
                                        char *strp3;
                                        strcpy(buf2, strp2);
@@ -3598,7 +3589,7 @@ static int gen_prios(struct ael_extension *exten, char *label, pval *statement,
 
                                        for_inc->appargs = strdup(buf2);
 
-                                       for_inc->app = strdup("Macro");
+                                       for_inc->app = strdup("Gosub");
                                } else {  /* must be a regular app call */
                                        char *strp3;
                                        strcpy(buf2, strp2);
@@ -4427,6 +4418,9 @@ int ast_compile_ael2(struct ast_context **local_contexts, struct ast_hashtab *lo
        struct ael_extension *exten;
        struct ael_extension *exten_list = 0;
 
+       /* Reset the counter so that we get consistent labels between reloads */
+       control_statement_count = 0;
+
        for (p=root; p; p=p->next ) { /* do the globals first, so they'll be there
                                                                         when we try to eval them */
                switch (p->type) {
index bc7ac6b..8910bbb 100644 (file)
@@ -1287,11 +1287,33 @@ int ast_ari_validate_dialplan_cep(struct ast_json *json)
 {
        int res = 1;
        struct ast_json_iter *iter;
+       int has_app_data = 0;
+       int has_app_name = 0;
        int has_context = 0;
        int has_exten = 0;
        int has_priority = 0;
 
        for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+               if (strcmp("app_data", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       has_app_data = 1;
+                       prop_is_valid = ast_ari_validate_string(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI DialplanCEP field app_data failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("app_name", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       has_app_name = 1;
+                       prop_is_valid = ast_ari_validate_string(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI DialplanCEP field app_name failed validation\n");
+                               res = 0;
+                       }
+               } else
                if (strcmp("context", ast_json_object_iter_key(iter)) == 0) {
                        int prop_is_valid;
                        has_context = 1;
@@ -1330,6 +1352,16 @@ int ast_ari_validate_dialplan_cep(struct ast_json *json)
                }
        }
 
+       if (!has_app_data) {
+               ast_log(LOG_ERROR, "ARI DialplanCEP missing required field app_data\n");
+               res = 0;
+       }
+
+       if (!has_app_name) {
+               ast_log(LOG_ERROR, "ARI DialplanCEP missing required field app_name\n");
+               res = 0;
+       }
+
        if (!has_context) {
                ast_log(LOG_ERROR, "ARI DialplanCEP missing required field context\n");
                res = 0;
@@ -1353,6 +1385,379 @@ ari_validator ast_ari_validate_dialplan_cep_fn(void)
        return ast_ari_validate_dialplan_cep;
 }
 
+int ast_ari_validate_rtpstat(struct ast_json *json)
+{
+       int res = 1;
+       struct ast_json_iter *iter;
+       int has_channel_uniqueid = 0;
+       int has_local_ssrc = 0;
+       int has_remote_ssrc = 0;
+       int has_rxcount = 0;
+       int has_rxoctetcount = 0;
+       int has_rxploss = 0;
+       int has_txcount = 0;
+       int has_txoctetcount = 0;
+       int has_txploss = 0;
+
+       for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+               if (strcmp("channel_uniqueid", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       has_channel_uniqueid = 1;
+                       prop_is_valid = ast_ari_validate_string(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field channel_uniqueid failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("local_maxjitter", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field local_maxjitter failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("local_maxrxploss", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field local_maxrxploss failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("local_minjitter", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field local_minjitter failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("local_minrxploss", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field local_minrxploss failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("local_normdevjitter", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field local_normdevjitter failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("local_normdevrxploss", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field local_normdevrxploss failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("local_ssrc", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       has_local_ssrc = 1;
+                       prop_is_valid = ast_ari_validate_int(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field local_ssrc failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("local_stdevjitter", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field local_stdevjitter failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("local_stdevrxploss", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field local_stdevrxploss failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("maxrtt", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field maxrtt failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("minrtt", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field minrtt failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("normdevrtt", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field normdevrtt failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("remote_maxjitter", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field remote_maxjitter failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("remote_maxrxploss", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field remote_maxrxploss failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("remote_minjitter", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field remote_minjitter failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("remote_minrxploss", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field remote_minrxploss failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("remote_normdevjitter", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field remote_normdevjitter failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("remote_normdevrxploss", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field remote_normdevrxploss failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("remote_ssrc", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       has_remote_ssrc = 1;
+                       prop_is_valid = ast_ari_validate_int(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field remote_ssrc failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("remote_stdevjitter", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field remote_stdevjitter failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("remote_stdevrxploss", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field remote_stdevrxploss failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("rtt", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       prop_is_valid = ast_ari_validate_double(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI RTPstat field rtt failed validation\n");
+                               res = 0;
+                       }
+               } else
+               if (strcmp("rxcount", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       has_rxcount = 1;
+                       prop_is_valid = ast_ari_validate_int(
+