Merge "CLI: Remove calls to ast_cli_generator."
authorGeorge Joseph <gjoseph@digium.com>
Mon, 27 Nov 2017 18:11:18 +0000 (12:11 -0600)
committerGerrit Code Review <gerrit2@gerrit.digium.api>
Mon, 27 Nov 2017 18:11:18 +0000 (12:11 -0600)
24 files changed:
.gitreview
README.md [moved from README with 56% similarity]
addons/ooh323c/src/ooCalls.c
apps/app_skel.c
channels/chan_sip.c
configure
configure.ac
include/asterisk/autoconfig.h.in
main/abstract_jb.c
main/aoc.c
main/app.c
main/ccss.c
res/res_format_attr_h263.c
res/res_format_attr_h264.c
res/res_hep_pjsip.c
res/res_hep_rtcp.c
res/res_http_media_cache.c
res/res_mwi_external_ami.c
res/res_parking.c
res/res_pjsip_endpoint_identifier_anonymous.c
res/res_rtp_asterisk.c
tests/test_http_media_cache.c
third-party/pjproject/configure.m4
third-party/pjproject/patches/0040-183_without_to_tag.patch [new file with mode: 0644]

index f9ef050..d38061d 100644 (file)
@@ -2,3 +2,4 @@
 host=gerrit.asterisk.org
 port=29418
 project=asterisk.git
+defaultbranch=master
similarity index 56%
rename from README
rename to README.md
index a1ccf2c..4ed9b3e 100644 (file)
--- a/README
+++ b/README.md
@@ -1,15 +1,9 @@
-===============================================================================
-===                     The Asterisk(R) Open Source PBX
-===
-===                   by Mark Spencer <markster@digium.com>
-===                  and the Asterisk.org developer community
-===
-===                    Copyright (C) 2001-2016 Digium, Inc.
-===                       and other copyright holders.
-===============================================================================
-
--------------------------------------------------------------------------------
---- SECURITY ------------------------------------------------------------------
+# The Asterisk(R) Open Source PBX
+```text
+        By Mark Spencer <markster@digium.com> and the Asterisk.org developer community.
+        Copyright (C) 2001-2016 Digium, Inc. and other copyright holders.
+```
+## SECURITY
 
   It is imperative that you read and fully understand the contents of
 the security information document before you attempt to configure and run
@@ -19,80 +13,62 @@ an Asterisk server.
 version of the documentation in doc/tex/asterisk.pdf.  Alternatively, pull up
 the HTML version of the documentation in doc/tex/asterisk/index.html.  The
 source for the security document is available in doc/tex/security.tex.
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
---- WHAT IS ASTERISK ? --------------------------------------------------------
+## WHAT IS ASTERISK ?
 
   Asterisk is an Open Source PBX and telephony toolkit.  It is, in a
 sense, middleware between Internet and telephony channels on the bottom,
 and Internet and telephony applications at the top.  However, Asterisk supports
 more telephony interfaces than just Internet telephony.  Asterisk also has a
-vast amount of support for traditional PSTN telephony, as well.  For more
-information on the project itself, please visit the Asterisk home page at:
+vast amount of support for traditional PSTN telephony, as well.
 
-           https://www.asterisk.org
-
-  The official Asterisk wiki can be found at:
-
-           https://wiki.asterisk.org
-
-  In addition you'll find lots of information compiled by the Asterisk
-community on this Wiki:
-
-           https://www.voip-info.org/wiki-Asterisk
+  For more information on the project itself, please visit the Asterisk
+[home page] and the official [wiki].  In addition you'll find lots
+of information compiled by the Asterisk community at [voip-info.org].
 
   There is a book on Asterisk published by O'Reilly under the Creative Commons
 License. It is available in book stores as well as in a downloadable version on
-the http://www.asteriskdocs.org web site.
--------------------------------------------------------------------------------
+the [asteriskdocs.org] web site.
+
+## SUPPORTED OPERATING SYSTEMS
 
--------------------------------------------------------------------------------
---- SUPPORTED OPERATING SYSTEMS -----------------------------------------------
+### Linux
 
---- Linux
   The Asterisk Open Source PBX is developed and tested primarily on the
 GNU/Linux operating system, and is supported on every major GNU/Linux
 distribution.
 
---- Others
+### Others
+
   Asterisk has also been 'ported' and reportedly runs properly on other
 operating systems as well, including Sun Solaris, Apple's Mac OS X, Cygwin,
 and the BSD variants.
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
---- GETTING STARTED -----------------------------------------------------------
+## GETTING STARTED
 
   First, be sure you've got supported hardware (but note that you don't need
 ANY special hardware, not even a sound card) to install and run Asterisk.
 
-  Supported telephony hardware includes:
-
-       * All Analog and Digital Interface cards from Digium (www.digium.com)
-       * QuickNet Internet PhoneJack and LineJack (http://www.quicknet.net)
-       * any full duplex sound card supported by ALSA, OSS, or PortAudio
-       * any ISDN card supported by mISDN on Linux
-       * The Xorcom Astribank channel bank
-       * VoiceTronix OpenLine products
-
--------------------------------------------------------------------------------
+Supported telephony hardware includes:
+* All Analog and Digital Interface cards from [Digium]
+* QuickNet Internet PhoneJack and LineJack (http://www.quicknet.net)
+* any full duplex sound card supported by ALSA, OSS, or PortAudio
+* any ISDN card supported by mISDN on Linux
+* The Xorcom Astribank channel bank
+* VoiceTronix OpenLine products
 
--------------------------------------------------------------------------------
---- UPGRADING FROM AN EARLIER VERSION -----------------------------------------
+### UPGRADING FROM AN EARLIER VERSION
 
   If you are updating from a previous version of Asterisk, make sure you
-read the UPGRADE.txt file in the source directory. There are some files
+read the [UPGRADE.txt] file in the source directory. There are some files
 and configuration options that you will have to change, even though we
 made every effort possible to maintain backwards compatibility.
 
   In order to discover new features to use, please check the configuration
-examples in the /configs directory of the source code distribution.  For a
-list of new features in this version of Asterisk, see the CHANGES file.
--------------------------------------------------------------------------------
+examples in the [configs] directory of the source code distribution.  For a
+list of new features in this version of Asterisk, see the [CHANGES] file.
 
--------------------------------------------------------------------------------
---- NEW INSTALLATIONS ---------------------------------------------------------
+### NEW INSTALLATIONS
 
   Ensure that your system contains a compatible compiler and development
 libraries.  Asterisk requires either the GNU Compiler Collection (GCC) version
@@ -101,55 +77,54 @@ the gcc language extensions.  In addition, your system needs to have the C
 library headers available, and the headers and libraries for ncurses.
 
   There are many modules that have additional dependencies.  To see what
-libraries are being looked for, see ./configure --help, or run
-"make menuselect" to view the dependencies for specific modules.
+libraries are being looked for, see `./configure --help`, or run
+`make menuselect` to view the dependencies for specific modules.
 
   On many distributions, these dependencies are installed by packages with names
 like 'glibc-devel', 'ncurses-devel', 'openssl-devel' and 'zlib-devel'
 or similar.
 
-  So, let's proceed:
+So, let's proceed:
+1. Read this file.
 
-1) Read this README file.
-
-  There are more documents than this one in the doc/ directory.  You may also
+  There are more documents than this one in the [doc] directory.  You may also
 want to check the configuration files that contain examples and reference
-guides. They are all in the configs/ directory.
+guides in the [configs] directory.
 
-2) Run "./configure"
+2. Run `./configure`
 
   Execute the configure script to guess values for system-dependent
 variables used during compilation.
 
-3) Run "make menuselect" [optional]
+3. Run `make menuselect` _\[optional]_
 
   This is needed if you want to select the modules that will be compiled and to
 check dependencies for various optional modules.
 
-4) Run "make"
+4. Run `make`
 
-  Assuming the build completes successfully:
+Assuming the build completes successfully:
 
-5) Run "make install"
+5. Run `make install`
 
   If this is your first time working with Asterisk, you may wish to install
 the sample PBX, with demonstration extensions, etc.  If so, run:
 
-6) "make samples"
+6. Run `make samples`
 
   Doing so will overwrite any existing configuration files you have installed.
 
-  Finally, you can launch Asterisk in the foreground mode (not a daemon) with:
-
-# asterisk -vvvc
-
+7. Finally, you can launch Asterisk in the foreground mode (not a daemon) with:
+```
+        # asterisk -vvvc
+```
   You'll see a bunch of verbose messages fly by your screen as Asterisk
 initializes (that's the "very very verbose" mode).  When it's ready, if
 you specified the "c" then you'll get a command line console, that looks
 like this:
-
-*CLI>
-
+```
+        *CLI>
+```
   You can type "core show help" at any time to get help with the system.  For help
 with a specific command, type "core show help <command>".  To start the PBX using
 your sound card, you can type "console dial" to dial the PBX.  Then you can use
@@ -162,12 +137,10 @@ then it won't work right (not yet).
 information on how to start and stop Asterisk, as well as all the command
 line options for starting Asterisk.
 
-  Feel free to look over the configuration files in /etc/asterisk, where you
+  Feel free to look over the configuration files in `/etc/asterisk`, where you
 will find a lot of information about what you can do with Asterisk.
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
---- ABOUT CONFIGURATION FILES -------------------------------------------------
+### ABOUT CONFIGURATION FILES
 
   All Asterisk configuration files share a common format.  Comments are
 delimited by ';' (since '#' of course, being a DTMF digit, may occur in
@@ -179,20 +152,21 @@ they're used only to help make the configuration file easier to
 understand, and do not affect how it is actually parsed.
 
   Entries of the form 'variable=value' set the value of some parameter in
-asterisk.  For example, in dahdi.conf, one might specify:
-
+asterisk.  For example, in [chan_dahdi.conf], one might specify:
+```
        switchtype=national
-
+```
   In order to indicate to Asterisk that the switch they are connecting to is
 of the type "national".  In general, the parameter will apply to
 instantiations which occur below its specification.  For example, if the
 configuration file read:
-
+```
        switchtype = national
        channel => 1-4
        channel => 10-12
        switchtype = dms100
        channel => 25-47
+```
 
   The "national" switchtype would be applied to channels one through
 four and channels 10 through 12, whereas the "dms100" switchtype would
@@ -202,16 +176,14 @@ apply to channels 25 through 47.
 parameters.  For example, the line "channel => 25-47" creates objects for
 the channels 25 through 47 of the card, obtaining the settings
 from the variables specified above.
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
---- SPECIAL NOTE ON TIME ------------------------------------------------------
+### SPECIAL NOTE ON TIME
 
   Those using SIP phones should be aware that Asterisk is sensitive to
 large jumps in time.  Manually changing the system time using date(1)
 (or other similar commands) may cause SIP registrations and other
 internal processes to fail.  If your system cannot keep accurate time
-by itself use NTP (http://www.ntp.org/) to keep the system clock
+by itself use [NTP] to keep the system clock
 synchronized to "real time".  NTP is designed to keep the system clock
 synchronized by speeding up or slowing down the system clock until it
 is synchronized to "real time" rather than by jumping the time and
@@ -228,10 +200,8 @@ on UTC.  UTC does not use daylight savings time.
 
   Also note that this issue is separate from the clocking of TDM
 channels, and is known to at least affect SIP registrations.
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
---- FILE DESCRIPTORS ----------------------------------------------------------
+### FILE DESCRIPTORS
 
   Depending on the size of your system and your configuration,
 Asterisk can consume a large number of file descriptors.  In UNIX,
@@ -247,50 +217,56 @@ calls that your system can handle.  For example, if the limit is set
 at 1024 (a common default value) Asterisk can handle approximately 150
 SIP calls simultaneously.  To change the number of file descriptors
 follow the instructions for your system below:
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
---- PAM-based Linux System ----------------------------------------------------
+#### PAM-BASED LINUX SYSTEM
 
   If your system uses PAM (Pluggable Authentication Modules) edit
-/etc/security/limits.conf.  Add these lines to the bottom of the file:
-
+`/etc/security/limits.conf`.  Add these lines to the bottom of the file:
+```text
 root            soft    nofile          4096
 root            hard    nofile          8196
 asterisk        soft    nofile          4096
 asterisk        hard    nofile          8196
+```
 
 (adjust the numbers to taste).  You may need to reboot the system for
 these changes to take effect.
 
-== Generic UNIX System ==
+#### GENERIC UNIX SYSTEM
 
   If there are no instructions specifically adapted to your system
-above you can try adding the command "ulimit -n 8192" to the script
+above you can try adding the command `ulimit -n 8192` to the script
 that starts Asterisk.
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
---- MORE INFORMATION ----------------------------------------------------------
+## MORE INFORMATION
 
-  See the doc directory for more documentation on various features. Again,
-please read all the configuration samples that include documentation on
-the configuration options.
+  See the [doc] directory for more documentation on various features.
+Again, please read all the configuration samples that include documentation
+on the configuration options.
 
-  If this release of Asterisk was downloaded from a tarball, then some
-additional documentation should have been included.
-     * doc/tex/asterisk.pdf --- PDF version of the documentation
-     * doc/tex/asterisk/index.html --- HTML version of the documentation
+  Finally, you may wish to visit the [support] site and join the [mailing
+list] if you're interested in getting more information.
 
-  Finally, you may wish to visit the web site and join the mailing list if
-you're interested in getting more information.
+Welcome to the growing worldwide community of Asterisk users!
+```
+        Mark Spencer, and the Asterisk.org development community
+```
 
-   https://www.asterisk.org/support
+---
 
-  Welcome to the growing worldwide community of Asterisk users!
--------------------------------------------------------------------------------
+Asterisk is a trademark of Digium, Inc.
 
---- Mark Spencer, and the Asterisk.org development community
+[home page]: https://www.asterisk.org
+[support]: https://www.asterisk.org/support
+[wiki]: https://wiki.asterisk.org/
+[mailing list]: http://lists.digium.com/mailman/listinfo/asterisk-users
+[chan_dahdi.conf]: configs/samples/chan_dahdi.conf.sample
+[voip-info.org]: http://www.voip-info.org/wiki-Asterisk
+[asteriskdocs.org]: http://www.asteriskdocs.org
+[NTP]: http://www.ntp.org/
+[Digium]: https://www.digium.com/
+[UPGRADE.txt]: UPGRADE.txt
+[CHANGES]: CHANGES
+[configs]: configs
+[doc]: doc
 
--------------------------------------------------------------------------------
-Asterisk is a trademark of Digium, Inc.
index 26dc63e..c920e6a 100644 (file)
@@ -29,6 +29,7 @@
 #include "ooGkClient.h"
 #include "ooh323ep.h"
 #include "ooCalls.h"
+#include "ooCmdChannel.h"
 
 /** Global endpoint structure */
 extern OOH323EndPoint gH323ep;
@@ -173,6 +174,7 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
    call->msdRetries = 0;
    call->pFastStartRes = NULL;
    call->usrData = NULL;
+   ooCreateCallCmdConnection(call);
    OOTRACEINFO3("Created a new call (%s, %s)\n", call->callType, 
                  call->callToken);
    /* Add new call to calllist */
index 0dbd4c5..b3c8876 100644 (file)
@@ -755,10 +755,9 @@ error:
        return AST_MODULE_LOAD_DECLINE;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Skeleton (sample) Application",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Skeleton (sample) Application",
        .support_level = AST_MODULE_SUPPORT_CORE,
        .load = load_module,
        .unload = unload_module,
        .reload = reload_module,
-       .load_pri = AST_MODPRI_DEFAULT,
 );
index bd68ec0..a829e20 100644 (file)
@@ -13055,7 +13055,7 @@ static void add_ice_to_sdp(struct ast_rtp_instance *instance, struct ast_str **a
 
        while ((candidate = ao2_iterator_next(&i))) {
                ast_str_append(a_buf, 0, "a=candidate:%s %u %s %d ", candidate->foundation, candidate->id, candidate->transport, candidate->priority);
-               ast_str_append(a_buf, 0, "%s ", ast_sockaddr_stringify_host(&candidate->address));
+               ast_str_append(a_buf, 0, "%s ", ast_sockaddr_stringify_addr_remote(&candidate->address));
 
                ast_str_append(a_buf, 0, "%s typ ", ast_sockaddr_stringify_port(&candidate->address));
 
@@ -13068,7 +13068,7 @@ static void add_ice_to_sdp(struct ast_rtp_instance *instance, struct ast_str **a
                }
 
                if (!ast_sockaddr_isnull(&candidate->relay_address)) {
-                       ast_str_append(a_buf, 0, " raddr %s ", ast_sockaddr_stringify_host(&candidate->relay_address));
+                       ast_str_append(a_buf, 0, " raddr %s ", ast_sockaddr_stringify_addr_remote(&candidate->relay_address));
                        ast_str_append(a_buf, 0, "rport %s", ast_sockaddr_stringify_port(&candidate->relay_address));
                }
 
index 69e7217..7411f71 100755 (executable)
--- a/configure
+++ b/configure
@@ -952,10 +952,6 @@ PBX_PJSIP_TSX_LAYER_FIND_TSX2
 PJSIP_TSX_LAYER_FIND_TSX2_DIR
 PJSIP_TSX_LAYER_FIND_TSX2_INCLUDE
 PJSIP_TSX_LAYER_FIND_TSX2_LIB
-PBX_PJSIP_EVSUB_SET_UAS_TIMEOUT
-PJSIP_EVSUB_SET_UAS_TIMEOUT_DIR
-PJSIP_EVSUB_SET_UAS_TIMEOUT_INCLUDE
-PJSIP_EVSUB_SET_UAS_TIMEOUT_LIB
 PBX_PJSIP_AUTH_CLT_DEINIT
 PJSIP_AUTH_CLT_DEINIT_DIR
 PJSIP_AUTH_CLT_DEINIT_INCLUDE
@@ -9466,9 +9462,6 @@ $as_echo "#define HAVE_PJSIP_INV_SESSION_REF 1" >>confdefs.h
 $as_echo "#define HAVE_PJSIP_AUTH_CLT_DEINIT 1" >>confdefs.h
 
 
-$as_echo "#define HAVE_PJSIP_EVSUB_SET_UAS_TIMEOUT 1" >>confdefs.h
-
-
 $as_echo "#define HAVE_PJSIP_TSX_LAYER_FIND_TSX2 1" >>confdefs.h
 
 
@@ -11731,18 +11724,6 @@ PBX_PJSIP_AUTH_CLT_DEINIT=0
 
 
 
-PJSIP_EVSUB_SET_UAS_TIMEOUT_DESCRIP="PJSIP EVSUB Set UAS Timeout support"
-PJSIP_EVSUB_SET_UAS_TIMEOUT_OPTION=pjsip
-PJSIP_EVSUB_SET_UAS_TIMEOUT_DIR=${PJPROJECT_DIR}
-
-PBX_PJSIP_EVSUB_SET_UAS_TIMEOUT=0
-
-
-
-
-
-
-
 PJSIP_TSX_LAYER_FIND_TSX2_DESCRIP="pjsip_tsx_layer_find_tsx2 support"
 PJSIP_TSX_LAYER_FIND_TSX2_OPTION=pjsip
 PJSIP_TSX_LAYER_FIND_TSX2_DIR=${PJPROJECT_DIR}
index af6dc8b..170694d 100644 (file)
@@ -522,7 +522,6 @@ AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_TLS_TRANSPORT_PROTO], [PJSIP TLS Transport pro
 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_EVSUB_GRP_LOCK], [PJSIP EVSUB Group Lock support], [PJPROJECT], [pjsip])
 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_INV_SESSION_REF], [PJSIP INVITE Session Reference Count support], [PJPROJECT], [pjsip])
 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_AUTH_CLT_DEINIT], [pjsip_auth_clt_deinit support], [PJPROJECT], [pjsip])
-AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_EVSUB_SET_UAS_TIMEOUT], [PJSIP EVSUB Set UAS Timeout support], [PJPROJECT], [pjsip])
 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_TSX_LAYER_FIND_TSX2], [pjsip_tsx_layer_find_tsx2 support], [PJPROJECT], [pjsip])
 fi
 
index 4700d40..f8bd0e3 100644 (file)
 /* Define to 1 if PJPROJECT has the PJSIP EVSUB Group Lock support feature. */
 #undef HAVE_PJSIP_EVSUB_GRP_LOCK
 
-/* Define to 1 if PJPROJECT has the PJSIP EVSUB Set UAS Timeout support
-   feature. */
-#undef HAVE_PJSIP_EVSUB_SET_UAS_TIMEOUT
-
 /* Define to 1 if PJPROJECT has the PJSIP External Resolver Support feature.
    */
 #undef HAVE_PJSIP_EXTERNAL_RESOLVER
index 0f0e661..b375739 100644 (file)
@@ -443,7 +443,7 @@ static int create_jb(struct ast_channel *chan, struct ast_frame *frr)
 
        /* Create a frame log file */
        if (ast_test_flag(jbconf, AST_JB_LOG)) {
-               RAII_VAR(struct ast_channel *, bridged, ast_channel_bridge_peer(chan), ast_channel_cleanup);
+               struct ast_channel *bridged = ast_channel_bridge_peer(chan);
                char safe_logfile[30] = "/tmp/logfile-XXXXXX";
                int safe_fd;
 
@@ -479,6 +479,8 @@ static int create_jb(struct ast_channel *chan, struct ast_frame *frr)
                        jb_framelog("JB_PUT_FIRST {now=%ld}: Dropped frame with ts=%ld and len=%ld\n",
                                now, frr->ts, frr->len);
                }
+
+               ast_channel_cleanup(bridged);
        }
 
        ast_verb(3, "%s jitterbuffer created on channel %s\n", jbimpl->name, ast_channel_name(chan));
index 3487948..253c745 100644 (file)
@@ -1663,7 +1663,7 @@ static struct ast_json *currency_to_json(const char *name, int cost,
 
 static struct ast_json *charge_to_json(const struct ast_aoc_decoded *decoded)
 {
-       RAII_VAR(struct ast_json *, obj, NULL, ast_json_unref);
+       struct ast_json *obj;
        const char *obj_type;
 
        if (decoded->charge_type != AST_AOC_CHARGE_CURRENCY &&
@@ -1685,7 +1685,7 @@ static struct ast_json *charge_to_json(const struct ast_aoc_decoded *decoded)
                "Type", aoc_charge_type_str(decoded->charge_type),
                "BillingID", aoc_billingid_str(decoded->billing_id),
                "TotalType", aoc_type_of_totaling_str(decoded->total_type),
-               obj_type, ast_json_ref(obj));
+               obj_type, obj);
 }
 
 static struct ast_json *association_to_json(const struct ast_aoc_decoded *decoded)
@@ -1714,8 +1714,8 @@ static struct ast_json *s_to_json(const struct ast_aoc_decoded *decoded)
 
        for (i = 0; i < decoded->aoc_s_count; ++i) {
                struct ast_json *rate;
-               RAII_VAR(struct ast_json *, type, NULL, ast_json_unref);
-               RAII_VAR(struct ast_json *, currency, NULL, ast_json_unref);
+               struct ast_json *type = NULL;
+               struct ast_json *currency;
                const char *charge_item = aoc_charged_item_str(
                        decoded->aoc_s_entries[i].charged_item);
 
@@ -1730,8 +1730,8 @@ static struct ast_json *s_to_json(const struct ast_aoc_decoded *decoded)
                switch (decoded->aoc_s_entries[i].rate_type) {
                case AST_AOC_RATE_TYPE_DURATION:
                {
-                       RAII_VAR(struct ast_json *, time, NULL, ast_json_unref);
-                       RAII_VAR(struct ast_json *, granularity, NULL, ast_json_unref);
+                       struct ast_json *time;
+                       struct ast_json *granularity = NULL;
 
                        currency = currency_to_json(
                                decoded->aoc_s_entries[i].rate.duration.currency_name,
@@ -1749,11 +1749,11 @@ static struct ast_json *s_to_json(const struct ast_aoc_decoded *decoded)
                        }
 
                        type = ast_json_pack("{s:o, s:s, s:o, s:o}",
-                               "Currency", ast_json_ref(currency),
+                               "Currency", currency,
                                "ChargingType", decoded->aoc_s_entries[i].rate.duration.charging_type
                                        ? "StepFunction" : "ContinuousCharging",
-                               "Time", ast_json_ref(time),
-                               "Granularity", granularity ? ast_json_ref(granularity) : ast_json_null());
+                               "Time", time,
+                               "Granularity", granularity ?: ast_json_null());
 
                        break;
                }
@@ -1763,7 +1763,7 @@ static struct ast_json *s_to_json(const struct ast_aoc_decoded *decoded)
                                decoded->aoc_s_entries[i].rate.flat.amount,
                                decoded->aoc_s_entries[i].rate.flat.multiplier);
 
-                       type = ast_json_pack("{s:o}", "Currency", ast_json_ref(currency));
+                       type = ast_json_pack("{s:o}", "Currency", currency);
                        break;
                case AST_AOC_RATE_TYPE_VOLUME:
                        currency = currency_to_json(
@@ -1774,7 +1774,7 @@ static struct ast_json *s_to_json(const struct ast_aoc_decoded *decoded)
                        type = ast_json_pack("{s:s, s:o}",
                                "Unit", aoc_volume_unit_str(
                                        decoded->aoc_s_entries[i].rate.volume.volume_unit),
-                               "Currency", ast_json_ref(currency));
+                               "Currency", currency);
                        break;
                case AST_AOC_RATE_TYPE_SPECIAL_CODE:
                        type = ast_json_pack("{s:i}",
@@ -1786,7 +1786,7 @@ static struct ast_json *s_to_json(const struct ast_aoc_decoded *decoded)
 
                rate = ast_json_pack("{s:s, s:o}",
                        "Chargeable", charge_item,
-                       aoc_rate_type_str(decoded->aoc_s_entries[i].rate_type), ast_json_ref(type));
+                       aoc_rate_type_str(decoded->aoc_s_entries[i].rate_type), type);
                if (ast_json_array_append(rates, rate)) {
                        break;
                }
index 69c96c0..f35c4b7 100644 (file)
@@ -3138,7 +3138,7 @@ struct stasis_topic *ast_mwi_topic(const char *uniqueid)
 
 struct ast_mwi_state *ast_mwi_create(const char *mailbox, const char *context)
 {
-       RAII_VAR(struct ast_mwi_state *, mwi_state, NULL, ao2_cleanup);
+       struct ast_mwi_state *mwi_state;
 
        ast_assert(!ast_strlen_zero(mailbox));
 
@@ -3148,6 +3148,7 @@ struct ast_mwi_state *ast_mwi_create(const char *mailbox, const char *context)
        }
 
        if (ast_string_field_init(mwi_state, 256)) {
+               ao2_ref(mwi_state, -1);
                return NULL;
        }
        if (!ast_strlen_zero(context)) {
@@ -3156,7 +3157,6 @@ struct ast_mwi_state *ast_mwi_create(const char *mailbox, const char *context)
                ast_string_field_set(mwi_state, uniqueid, mailbox);
        }
 
-       ao2_ref(mwi_state, +1);
        return mwi_state;
 }
 
@@ -3329,8 +3329,8 @@ struct stasis_message *ast_mwi_blob_create(struct ast_mwi_state *mwi_state,
                                               struct stasis_message_type *message_type,
                                               struct ast_json *blob)
 {
-       RAII_VAR(struct ast_mwi_blob *, obj, NULL, ao2_cleanup);
-       RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
+       struct ast_mwi_blob *obj;
+       struct stasis_message *msg;
 
        ast_assert(blob != NULL);
 
@@ -3349,11 +3349,8 @@ struct stasis_message *ast_mwi_blob_create(struct ast_mwi_state *mwi_state,
 
        /* This is not a normal MWI event.  Only used by the MinivmNotify app. */
        msg = stasis_message_create(message_type, obj);
-       if (!msg) {
-               return NULL;
-       }
+       ao2_ref(obj, -1);
 
-       ao2_ref(msg, +1);
        return msg;
 }
 
index a9d15b0..445de93 100644 (file)
@@ -1022,9 +1022,9 @@ void ast_set_cc_callback_sub(struct ast_cc_config_params *config, const char * c
 
 static int cc_publish(struct stasis_message_type *message_type, int core_id, struct ast_json *extras)
 {
-       RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
-       RAII_VAR(struct ast_json_payload *, payload, NULL, ao2_cleanup);
-       RAII_VAR(struct stasis_message *, message, NULL, ao2_cleanup);
+       struct ast_json *blob;
+       struct ast_json_payload *payload;
+       struct stasis_message *message;
 
        if (!message_type) {
                return -1;
@@ -1040,121 +1040,138 @@ static int cc_publish(struct stasis_message_type *message_type, int core_id, str
                ast_json_object_update(blob, extras);
        }
 
-       if (!(payload = ast_json_payload_create(blob))) {
+       payload = ast_json_payload_create(blob);
+       ast_json_unref(blob);
+
+       if (!payload) {
                return -1;
        }
 
-       if (!(message = stasis_message_create(message_type, payload))) {
+       message = stasis_message_create(message_type, payload);
+       ao2_ref(payload, -1);
+
+       if (!message) {
                return -1;
        }
 
        stasis_publish(ast_system_topic(), message);
+       ao2_ref(message, -1);
 
        return 0;
 }
 
 static void cc_publish_available(int core_id, const char *callee, const char *service)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s, s: s}",
                "callee", callee,
                "service", service);
 
        cc_publish(ast_cc_available_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 static void cc_publish_offertimerstart(int core_id, const char *caller, unsigned int expires)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s, s: i}",
                "caller", caller,
                "expires", expires);
 
        cc_publish(ast_cc_offertimerstart_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 static void cc_publish_requested(int core_id, const char *caller, const char *callee)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s, s: s}",
                "caller", caller,
                "callee", callee);
 
        cc_publish(ast_cc_requested_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 static void cc_publish_requestacknowledged(int core_id, const char *caller)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s}",
                "caller", caller);
 
        cc_publish(ast_cc_requestacknowledged_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 static void cc_publish_callerstopmonitoring(int core_id, const char *caller)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s}",
                "caller", caller);
 
        cc_publish(ast_cc_callerstopmonitoring_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 static void cc_publish_callerstartmonitoring(int core_id, const char *caller)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s}",
                "caller", caller);
 
        cc_publish(ast_cc_callerstartmonitoring_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 static void cc_publish_callerrecalling(int core_id, const char *caller)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s}",
                "caller", caller);
 
        cc_publish(ast_cc_callerrecalling_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 static void cc_publish_recallcomplete(int core_id, const char *caller)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s}",
                "caller", caller);
 
        cc_publish(ast_cc_recallcomplete_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 static void cc_publish_failure(int core_id, const char *caller, const char *reason)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s, s: s}",
                "caller", caller,
                "reason", reason);
 
        cc_publish(ast_cc_failure_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 static void cc_publish_monitorfailed(int core_id, const char *callee)
 {
-       RAII_VAR(struct ast_json *, extras, NULL, ast_json_unref);
+       struct ast_json *extras;
 
        extras = ast_json_pack("{s: s}",
                "callee", callee);
 
        cc_publish(ast_cc_monitorfailed_type(), core_id, extras);
+       ast_json_unref(extras);
 }
 
 struct cc_monitor_backend {
index a32f40f..b49f1d6 100644 (file)
@@ -269,9 +269,8 @@ static int load_module(void)
        return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "H.263 Format Attribute Module",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "H.263 Format Attribute Module",
        .support_level = AST_MODULE_SUPPORT_CORE,
        .load = load_module,
        .unload = unload_module,
-       .load_pri = AST_MODPRI_DEFAULT,
 );
index fa33395..682b871 100644 (file)
@@ -330,9 +330,8 @@ static int load_module(void)
        return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "H.264 Format Attribute Module",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "H.264 Format Attribute Module",
        .support_level = AST_MODULE_SUPPORT_CORE,
        .load = load_module,
        .unload = unload_module,
-       .load_pri = AST_MODPRI_DEFAULT,
 );
index b5be4a1..6283efc 100644 (file)
@@ -249,9 +249,8 @@ static int unload_module(void)
        return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "PJSIP HEPv3 Logger",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "PJSIP HEPv3 Logger",
        .support_level = AST_MODULE_SUPPORT_EXTENDED,
        .load = load_module,
        .unload = unload_module,
-       .load_pri = AST_MODPRI_DEFAULT,
 );
index 31b9c48..afad0c8 100644 (file)
@@ -180,9 +180,8 @@ static int unload_module(void)
        return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "RTCP HEPv3 Logger",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "RTCP HEPv3 Logger",
        .support_level = AST_MODULE_SUPPORT_EXTENDED,
        .load = load_module,
        .unload = unload_module,
-       .load_pri = AST_MODPRI_DEFAULT,
 );
index 175f24c..918686e 100644 (file)
@@ -437,9 +437,8 @@ static int load_module(void)
        return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "HTTP Media Cache Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "HTTP Media Cache Backend",
                .support_level = AST_MODULE_SUPPORT_CORE,
                .load = load_module,
                .unload = unload_module,
-               .load_pri = AST_MODPRI_DEFAULT,
        );
index 516969b..80d47d7 100644 (file)
@@ -366,7 +366,7 @@ static int load_module(void)
        return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "AMI support for external MWI",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "AMI support for external MWI",
        .support_level = AST_MODULE_SUPPORT_CORE,
        .load = load_module,
        .unload = unload_module,
index 94cdb0e..2dbe6f7 100644 (file)
@@ -1293,4 +1293,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Call Parking Resource
        .load = load_module,
        .unload = unload_module,
        .reload = reload_module,
+       .load_pri = AST_MODPRI_DEVSTATE_PROVIDER,
 );
index a1144a8..b47aefa 100644 (file)
@@ -128,9 +128,8 @@ static int unload_module(void)
        return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "PJSIP Anonymous endpoint identifier",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "PJSIP Anonymous endpoint identifier",
        .support_level = AST_MODULE_SUPPORT_CORE,
        .load = load_module,
        .unload = unload_module,
-       .load_pri = AST_MODPRI_DEFAULT,
 );
index 15ca150..839753e 100644 (file)
@@ -3193,8 +3193,8 @@ static void rtp_add_candidates_to_ice(struct ast_rtp_instance *instance, struct
        }
 
        /* If configured to use a STUN server to get our external mapped address do so */
-       if (stunaddr.sin_addr.s_addr && count && ast_sockaddr_is_ipv4(addr)
-               && !stun_address_is_blacklisted(addr)) {
+       if (count && stunaddr.sin_addr.s_addr && !stun_address_is_blacklisted(addr) &&
+               (ast_sockaddr_is_ipv4(addr) || ast_sockaddr_is_any(addr))) {
                struct sockaddr_in answer;
                int rsp;
 
@@ -3208,27 +3208,40 @@ static void rtp_add_candidates_to_ice(struct ast_rtp_instance *instance, struct
                ao2_lock(instance);
                if (!rsp) {
                        pj_sockaddr base;
-                       pj_sockaddr ext;
-                       pj_str_t mapped = pj_str(ast_strdupa(ast_inet_ntoa(answer.sin_addr)));
-                       int srflx = 1;
 
-                       /* Use the first local host candidate as the base */
-                       pj_sockaddr_cp(&base, &address[basepos]);
-
-                       pj_sockaddr_init(pj_AF_INET(), &ext, &mapped, ntohs(answer.sin_port));
-
-                       /* If the returned address is the same as one of our host candidates, don't send the srflx */
-                       for (pos = 0; pos < count; pos++) {
-                               if ((pj_sockaddr_cmp(&address[pos], &ext) == 0) && !rtp_address_is_ice_blacklisted(&address[pos])) {
-                                       srflx = 0;
+                       /* Use the first local IPv4 host candidate as the base */
+                       for (pos = basepos; pos < count; pos++) {
+                               if (address[pos].addr.sa_family == PJ_AF_INET &&
+                                       !rtp_address_is_ice_blacklisted(&address[pos])) {
+                                       pj_sockaddr_cp(&base, &address[pos]);
                                        break;
                                }
                        }
 
-                       if (srflx) {
-                               ast_rtp_ice_add_cand(instance, rtp, component, transport,
-                                       PJ_ICE_CAND_TYPE_SRFLX, 65535, &ext, &base, &base,
-                                       pj_sockaddr_get_len(&ext));
+                       if (pos < count) {
+                               pj_sockaddr ext;
+                               pj_str_t mapped = pj_str(ast_strdupa(ast_inet_ntoa(answer.sin_addr)));
+                               int srflx = 1;
+
+                               pj_sockaddr_init(pj_AF_INET(), &ext, &mapped, ntohs(answer.sin_port));
+
+                               /*
+                                * If the returned address is the same as one of our host
+                                * candidates, don't send the srflx
+                                */
+                               for (pos = 0; pos < count; pos++) {
+                                       if (pj_sockaddr_cmp(&address[pos], &ext) == 0 &&
+                                               !rtp_address_is_ice_blacklisted(&address[pos])) {
+                                               srflx = 0;
+                                               break;
+                                       }
+                               }
+
+                               if (srflx) {
+                                       ast_rtp_ice_add_cand(instance, rtp, component, transport,
+                                               PJ_ICE_CAND_TYPE_SRFLX, 65535, &ext, &base, &base,
+                                               pj_sockaddr_get_len(&ext));
+                               }
                        }
                }
        }
index 23ebbdf..2a3398f 100644 (file)
@@ -692,10 +692,9 @@ static int unload_module(void)
        return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "HTTP Media Cache Backend Tests",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "HTTP Media Cache Backend Tests",
                .support_level = AST_MODULE_SUPPORT_CORE,
                .load = load_module,
                .reload = reload_module,
                .unload = unload_module,
-               .load_pri = AST_MODPRI_DEFAULT,
        );
index 7388704..c1edaf9 100644 (file)
@@ -86,7 +86,6 @@ AC_DEFUN([_PJPROJECT_CONFIGURE],
        AC_DEFINE([HAVE_PJSIP_EVSUB_GRP_LOCK], 1, [Define if your system has PJSIP_EVSUB_GRP_LOCK])
        AC_DEFINE([HAVE_PJSIP_INV_SESSION_REF], 1, [Define if your system has PJSIP_INV_SESSION_REF])
        AC_DEFINE([HAVE_PJSIP_AUTH_CLT_DEINIT], 1, [Define if your system has pjsip_auth_clt_deinit declared.])
-       AC_DEFINE([HAVE_PJSIP_EVSUB_SET_UAS_TIMEOUT], 1, [Define if your system has pjsip_evsub_set_uas_timeout declared.])
        AC_DEFINE([HAVE_PJSIP_TSX_LAYER_FIND_TSX2], 1, [Define if your system has pjsip_tsx_layer_find_tsx2 declared.])
 
        AC_SUBST([PJPROJECT_BUNDLED])
diff --git a/third-party/pjproject/patches/0040-183_without_to_tag.patch b/third-party/pjproject/patches/0040-183_without_to_tag.patch
new file mode 100644 (file)
index 0000000..e8692fe
--- /dev/null
@@ -0,0 +1,17 @@
+diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
+index c9686a0..fc52a63 100644
+--- a/pjsip/src/pjsip-ua/sip_inv.c
++++ b/pjsip/src/pjsip-ua/sip_inv.c
+@@ -4156,9 +4156,10 @@ static void inv_on_state_calling( pjsip_inv_session *inv, pjsip_event *e)
+                   status = pjsip_inv_send_msg(inv, cancel);
+           }
+-          if (dlg->remote.info->tag.slen) {
++          if (tsx->status_code != 100) {
+-              inv_set_state(inv, PJSIP_INV_STATE_EARLY, e);
++              if (dlg->remote.info->tag.slen)
++                  inv_set_state(inv, PJSIP_INV_STATE_EARLY, e);
+               inv_check_sdp_in_incoming_msg(inv, tsx, 
+                                             e->body.tsx_state.src.rdata);