<p>Joshua Colp has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/16324">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">conf2ael: Remove deprecated application.<br><br>ASTERISK-29599<br><br>Change-Id: I75dc77162926fb17e7c6caf8f04e3aabd792fb0c<br>---<br>A doc/UPGRADE-staging/conf2ael_removal.txt<br>M utils/.gitignore<br>M utils/Makefile<br>D utils/conf2ael.c<br>M utils/utils.xml<br>5 files changed, 7 insertions(+), 741 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/24/16324/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/UPGRADE-staging/conf2ael_removal.txt b/doc/UPGRADE-staging/conf2ael_removal.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..73c300c</span><br><span>--- /dev/null</span><br><span>+++ b/doc/UPGRADE-staging/conf2ael_removal.txt</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Subject: conf2ael</span><br><span style="color: hsl(120, 100%, 40%);">+Master-Only: True</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This application was deprecated in Asterisk 16</span><br><span style="color: hsl(120, 100%, 40%);">+and is now being removed in accordance with</span><br><span style="color: hsl(120, 100%, 40%);">+the Asterisk Module Deprecation policy.</span><br><span>diff --git a/utils/.gitignore b/utils/.gitignore</span><br><span>index 7840265..fb3bf54 100644</span><br><span>--- a/utils/.gitignore</span><br><span>+++ b/utils/.gitignore</span><br><span>@@ -11,7 +11,6 @@</span><br><span> check_expr</span><br><span> check_expr2</span><br><span> check_expr2.dSYM/</span><br><span style="color: hsl(0, 100%, 40%);">-conf2ael</span><br><span> db1-ast/libdb1.a</span><br><span> hashtab.c</span><br><span> lock.c</span><br><span>diff --git a/utils/Makefile b/utils/Makefile</span><br><span>index 3a1e218..0471441 100644</span><br><span>--- a/utils/Makefile</span><br><span>+++ b/utils/Makefile</span><br><span>@@ -67,7 +67,6 @@</span><br><span> </span><br><span> ifneq ($(filter pbx_ael,$(MENUSELECT_PBX)),)</span><br><span>   UTILS:=$(filter-out aelparse,$(UTILS))</span><br><span style="color: hsl(0, 100%, 40%);">-  UTILS:=$(filter-out conf2ael,$(UTILS))</span><br><span> endif</span><br><span> </span><br><span> all: $(UTILS)</span><br><span>@@ -87,7 +86,7 @@</span><br><span>   rm -f .*.d</span><br><span>   rm -f *.s *.i</span><br><span>        rm -f astmm.c md5.c strcompat.c ast_expr2.c ast_expr2.h ast_expr2f.c pbx_ael.c pval.c hashtab.c lock.c</span><br><span style="color: hsl(0, 100%, 40%);">-  rm -f aelparse.c aelbison.c conf2ael</span><br><span style="color: hsl(120, 100%, 40%);">+  rm -f aelparse.c aelbison.c</span><br><span>  rm -f threadstorage.c</span><br><span>        rm -f utils.c strings.c poll.c version.c sha1.c astobj2.c refcounter</span><br><span>         rm -f db1-ast/.*.d</span><br><span>@@ -175,9 +174,6 @@</span><br><span> extconf.o: _ASTCFLAGS+=$(call get_menuselect_cflags,DETECT_DEADLOCKS)</span><br><span> extconf.o: extconf.c</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-conf2ael: LIBS+=$(AST_CLANG_BLOCKS_LIBS)</span><br><span style="color: hsl(0, 100%, 40%);">-conf2ael: conf2ael.o ast_expr2f.o ast_expr2.o hashtab.o lock.o aelbison.o aelparse.o pbx_ael.o pval.o extconf.o strcompat.o astmm.o</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> check_expr2: $(ASTTOPDIR)/main/ast_expr2f.c $(ASTTOPDIR)/main/ast_expr2.c $(ASTTOPDIR)/main/ast_expr2.h astmm.o</span><br><span>  $(ECHO_PREFIX) echo "   [CC] ast_expr2f.c -> ast_expr2fz.o"</span><br><span>     $(CC) -g -c -I$(ASTTOPDIR)/include $(_ASTCFLAGS) -DYY_NO_INPUT $(ASTTOPDIR)/main/ast_expr2f.c -o ast_expr2fz.o</span><br><span>diff --git a/utils/conf2ael.c b/utils/conf2ael.c</span><br><span>deleted file mode 100644</span><br><span>index f668c3f..0000000</span><br><span>--- a/utils/conf2ael.c</span><br><span>+++ /dev/null</span><br><span>@@ -1,731 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">- * Asterisk -- An open source telephony toolkit.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (C) 2007, Digium, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Steve Murphy <murf@digium.com></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * See http://www.asterisk.org for more information about</span><br><span style="color: hsl(0, 100%, 40%);">- * the Asterisk project. Please do not directly contact</span><br><span style="color: hsl(0, 100%, 40%);">- * any of the maintainers of this project for assistance;</span><br><span style="color: hsl(0, 100%, 40%);">- * the project provides a web site, mailing lists and IRC</span><br><span style="color: hsl(0, 100%, 40%);">- * channels for your use.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is free software, distributed under the terms of</span><br><span style="color: hsl(0, 100%, 40%);">- * the GNU General Public License Version 2. See the LICENSE file</span><br><span style="color: hsl(0, 100%, 40%);">- * at the top of the source tree.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Reverse compile extensions.conf code into prototype AEL code</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*** MODULEINFO</span><br><span style="color: hsl(0, 100%, 40%);">-   <depend>res_ael_share</depend></span><br><span style="color: hsl(0, 100%, 40%);">-      <support_level>deprecated</support_level></span><br><span style="color: hsl(0, 100%, 40%);">-   <deprecated_in>16</deprecated_in></span><br><span style="color: hsl(0, 100%, 40%);">-   <removed_in>19</removed_in></span><br><span style="color: hsl(0, 100%, 40%);">- ***/</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define ASTMM_LIBC ASTMM_IGNORE</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/paths.h" /* CONFIG_DIR */</span><br><span style="color: hsl(0, 100%, 40%);">-#include <locale.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <ctype.h></span><br><span style="color: hsl(0, 100%, 40%);">-#if !defined(SOLARIS) && !defined(__CYGWIN__)</span><br><span style="color: hsl(0, 100%, 40%);">-#include <err.h></span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-#include <regex.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/pbx.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/ast_expr.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/channel.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/chanvars.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/module.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/app.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/config.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/options.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/callerid.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/lock.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/hashtab.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/ael_structs.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/devicestate.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/stringfields.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/pval.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/extconf.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-const char *ast_config_AST_CONFIG_DIR = "/etc/asterisk";     /* placeholder */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void get_start_stop(unsigned int *word, int bitsperword, int totalbits, int *start, int *end);</span><br><span style="color: hsl(0, 100%, 40%);">-int all_bits_set(unsigned int *word, int bitsperword, int totalbits);</span><br><span style="color: hsl(0, 100%, 40%);">-extern char *days[];</span><br><span style="color: hsl(0, 100%, 40%);">-extern char *months[];</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-char *config = "extensions.conf";</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">-static char *registrar = "conf2ael";</span><br><span style="color: hsl(0, 100%, 40%);">-static char userscontext[AST_MAX_EXTENSION] = "default";</span><br><span style="color: hsl(0, 100%, 40%);">-static int static_config = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-static int write_protect_config = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-static int autofallthrough_config = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-static int clearglobalvars_config = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-char ast_config_AST_SYSTEM_NAME[20] = ""; */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* static AST_RWLIST_HEAD_STATIC(acf_root, ast_custom_function); */</span><br><span style="color: hsl(0, 100%, 40%);">-//extern char ast_config_AST_CONFIG_DIR[PATH_MAX];</span><br><span style="color: hsl(0, 100%, 40%);">-int option_debug = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-int option_verbose = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int ast_add_profile(const char *x, uint64_t scale) { return 0;}</span><br><span style="color: hsl(0, 100%, 40%);">-/* Our own version of ast_log, since the expr parser uses it. -- stolen from utils/check_expr.c */</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...) __attribute__((format(printf,5,6)));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    va_list vars;</span><br><span style="color: hsl(0, 100%, 40%);">-   va_start(vars,fmt);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     printf("LOG: lev:%d file:%s  line:%d func: %s  ",</span><br><span style="color: hsl(0, 100%, 40%);">-                level, file, line, function);</span><br><span style="color: hsl(0, 100%, 40%);">-        vprintf(fmt, vars);</span><br><span style="color: hsl(0, 100%, 40%);">-     fflush(stdout);</span><br><span style="color: hsl(0, 100%, 40%);">- va_end(vars);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* stolen from pbx.c */</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_context;</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_app;</span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef LOW_MEMORY</span><br><span style="color: hsl(0, 100%, 40%);">-#define EXT_DATA_SIZE 256</span><br><span style="color: hsl(0, 100%, 40%);">-#else</span><br><span style="color: hsl(0, 100%, 40%);">-#define EXT_DATA_SIZE 8192</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define SWITCH_DATA_LENGTH 256</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define VAR_BUF_SIZE 4096</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define    VAR_NORMAL              1</span><br><span style="color: hsl(0, 100%, 40%);">-#define        VAR_SOFTTRAN    2</span><br><span style="color: hsl(0, 100%, 40%);">-#define        VAR_HARDTRAN    3</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define BACKGROUND_SKIP                (1 << 0)</span><br><span style="color: hsl(0, 100%, 40%);">-#define BACKGROUND_NOANSWER       (1 << 1)</span><br><span style="color: hsl(0, 100%, 40%);">-#define BACKGROUND_MATCHEXTEN     (1 << 2)</span><br><span style="color: hsl(0, 100%, 40%);">-#define BACKGROUND_PLAYBACK       (1 << 3)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">-   \brief ast_exten: An extension</span><br><span style="color: hsl(0, 100%, 40%);">-      The dialplan is saved as a linked list with each context</span><br><span style="color: hsl(0, 100%, 40%);">-        having it's own linked list of extensions - one item per</span><br><span style="color: hsl(0, 100%, 40%);">-    priority.</span><br><span style="color: hsl(0, 100%, 40%);">-*/</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_exten {</span><br><span style="color: hsl(0, 100%, 40%);">-   char *exten;                    /*!< Extension name */</span><br><span style="color: hsl(0, 100%, 40%);">-       int matchcid;                   /*!< Match caller id ? */</span><br><span style="color: hsl(0, 100%, 40%);">-    const char *cidmatch;           /*!< Caller id to match for this extension */</span><br><span style="color: hsl(0, 100%, 40%);">-        int priority;                   /*!< Priority */</span><br><span style="color: hsl(0, 100%, 40%);">-     const char *label;              /*!< Label */</span><br><span style="color: hsl(0, 100%, 40%);">-        struct ast_context *parent;     /*!< The context this extension belongs to  */</span><br><span style="color: hsl(0, 100%, 40%);">-       const char *app;                /*!< Application to execute */</span><br><span style="color: hsl(0, 100%, 40%);">-       struct ast_app *cached_app;     /*!< Cached location of application */</span><br><span style="color: hsl(0, 100%, 40%);">-       void *data;                     /*!< Data to use (arguments) */</span><br><span style="color: hsl(0, 100%, 40%);">-      void (*datad)(void *);          /*!< Data destructor */</span><br><span style="color: hsl(0, 100%, 40%);">-      struct ast_exten *peer;         /*!< Next higher priority with our extension */</span><br><span style="color: hsl(0, 100%, 40%);">-      const char *registrar;          /*!< Registrar */</span><br><span style="color: hsl(0, 100%, 40%);">-    struct ast_exten *next;         /*!< Extension with a greater ID */</span><br><span style="color: hsl(0, 100%, 40%);">-  char stuff[0];</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief ast_include: include= support in extensions.conf */</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_include {</span><br><span style="color: hsl(0, 100%, 40%);">-      const char *name;</span><br><span style="color: hsl(0, 100%, 40%);">-       const char *rname;                      /*!< Context to include */</span><br><span style="color: hsl(0, 100%, 40%);">-   const char *registrar;                  /*!< Registrar */</span><br><span style="color: hsl(0, 100%, 40%);">-    int hastime;                            /*!< If time construct exists */</span><br><span style="color: hsl(0, 100%, 40%);">-     struct ast_timing timing;               /*!< time construct */</span><br><span style="color: hsl(0, 100%, 40%);">-       struct ast_include *next;               /*!< Link them together */</span><br><span style="color: hsl(0, 100%, 40%);">-   char stuff[0];</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief ast_sw: Switch statement in extensions.conf */</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_sw {</span><br><span style="color: hsl(0, 100%, 40%);">-        char *name;</span><br><span style="color: hsl(0, 100%, 40%);">-     const char *registrar;                  /*!< Registrar */</span><br><span style="color: hsl(0, 100%, 40%);">-    char *data;                             /*!< Data load */</span><br><span style="color: hsl(0, 100%, 40%);">-    int eval;</span><br><span style="color: hsl(0, 100%, 40%);">-       AST_LIST_ENTRY(ast_sw) list;</span><br><span style="color: hsl(0, 100%, 40%);">-    char *tmpdata;</span><br><span style="color: hsl(0, 100%, 40%);">-  char stuff[0];</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief ast_ignorepat: Ignore patterns in dial plan */</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_ignorepat {</span><br><span style="color: hsl(0, 100%, 40%);">- const char *registrar;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct ast_ignorepat *next;</span><br><span style="color: hsl(0, 100%, 40%);">-     const char pattern[0];</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief ast_context: An extension context */</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_context {</span><br><span style="color: hsl(0, 100%, 40%);">-     ast_rwlock_t lock;                      /*!< A lock to prevent multiple threads from clobbering the context */</span><br><span style="color: hsl(0, 100%, 40%);">-       struct ast_exten *root;                 /*!< The root of the list of extensions */</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ast_context *next;               /*!< Link them together */</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ast_include *includes;           /*!< Include other contexts */</span><br><span style="color: hsl(0, 100%, 40%);">-       struct ast_ignorepat *ignorepats;       /*!< Patterns for which to continue playing dialtone */</span><br><span style="color: hsl(0, 100%, 40%);">-      const char *registrar;                  /*!< Registrar */</span><br><span style="color: hsl(0, 100%, 40%);">-    AST_LIST_HEAD_NOLOCK(, ast_sw) alts;    /*!< Alternative switches */</span><br><span style="color: hsl(0, 100%, 40%);">- ast_mutex_t macrolock;                  /*!< A lock to implement "exclusive" macros - held whilst a call is executing in the macro */</span><br><span style="color: hsl(0, 100%, 40%);">-      char name[0];                           /*!< Name of the context */</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief ast_app: A registered application */</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_app {</span><br><span style="color: hsl(0, 100%, 40%);">- int (*execute)(struct ast_channel *chan, void *data);</span><br><span style="color: hsl(0, 100%, 40%);">-   const char *synopsis;                   /*!< Synopsis text for 'show applications' */</span><br><span style="color: hsl(0, 100%, 40%);">-        const char *description;                /*!< Description (help text) for 'show application &lt;name&gt;' */</span><br><span style="color: hsl(0, 100%, 40%);">-  AST_RWLIST_ENTRY(ast_app) list;         /*!< Next app in list */</span><br><span style="color: hsl(0, 100%, 40%);">-     struct module *module;                  /*!< Module this app belongs to */</span><br><span style="color: hsl(0, 100%, 40%);">-   char name[0];                           /*!< Name of the application */</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief ast_state_cb: An extension state notify register item */</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_state_cb {</span><br><span style="color: hsl(0, 100%, 40%);">-    int id;</span><br><span style="color: hsl(0, 100%, 40%);">- void *data;</span><br><span style="color: hsl(0, 100%, 40%);">-     ast_state_cb_type callback;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct ast_state_cb *next;</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Structure for dial plan hints</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  \note Hints are pointers from an extension in the dialplan to one or</span><br><span style="color: hsl(0, 100%, 40%);">-  more devices (tech/name)</span><br><span style="color: hsl(0, 100%, 40%);">-    - See \ref AstExtState</span><br><span style="color: hsl(0, 100%, 40%);">-*/</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_hint {</span><br><span style="color: hsl(0, 100%, 40%);">-       struct ast_exten *exten;        /*!< Extension */</span><br><span style="color: hsl(0, 100%, 40%);">-    int laststate;                  /*!< Last known state */</span><br><span style="color: hsl(0, 100%, 40%);">-     struct ast_state_cb *callbacks; /*!< Callback list for this extension */</span><br><span style="color: hsl(0, 100%, 40%);">-     AST_RWLIST_ENTRY(ast_hint) list;/*!< Pointer to next hint in list */</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct store_hint {</span><br><span style="color: hsl(0, 100%, 40%);">-    char *context;</span><br><span style="color: hsl(0, 100%, 40%);">-  char *exten;</span><br><span style="color: hsl(0, 100%, 40%);">-    struct ast_state_cb *callbacks;</span><br><span style="color: hsl(0, 100%, 40%);">- int laststate;</span><br><span style="color: hsl(0, 100%, 40%);">-  AST_LIST_ENTRY(store_hint) list;</span><br><span style="color: hsl(0, 100%, 40%);">-        char data[1];</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-AST_LIST_HEAD(store_hints, store_hint);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define STATUS_NO_CONTEXT 1</span><br><span style="color: hsl(0, 100%, 40%);">-#define STATUS_NO_EXTENSION    2</span><br><span style="color: hsl(0, 100%, 40%);">-#define STATUS_NO_PRIORITY     3</span><br><span style="color: hsl(0, 100%, 40%);">-#define STATUS_NO_LABEL                4</span><br><span style="color: hsl(0, 100%, 40%);">-#define STATUS_SUCCESS         5</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-extern struct ast_context *local_contexts;</span><br><span style="color: hsl(0, 100%, 40%);">-extern struct ast_context *contexts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_custom_function *ast_custom_function_find(const char *name);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_custom_function *ast_custom_function_find(const char *name)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   return 0; /* in "standalone" mode, functions are just not avail */</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct profile_entry {</span><br><span style="color: hsl(0, 100%, 40%);">-     const char *name;</span><br><span style="color: hsl(0, 100%, 40%);">-       uint64_t        scale;  /* if non-zero, values are scaled by this */</span><br><span style="color: hsl(0, 100%, 40%);">-    int64_t mark;</span><br><span style="color: hsl(0, 100%, 40%);">-   int64_t value;</span><br><span style="color: hsl(0, 100%, 40%);">-  int64_t events;</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct profile_data {</span><br><span style="color: hsl(0, 100%, 40%);">-  int entries;</span><br><span style="color: hsl(0, 100%, 40%);">-    int max_size;</span><br><span style="color: hsl(0, 100%, 40%);">-   struct profile_entry e[0];</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int bit_at(unsigned int *word, int bitsperword, int bitnum)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- return word[bitnum/bitsperword] & (1 << (bitnum % bitsperword));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void get_start_stop(unsigned int *word, int bitsperword, int totalbits, int *start, int *end)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       int i;</span><br><span style="color: hsl(0, 100%, 40%);">-  int thisbit, thatbit = bit_at(word, bitsperword, totalbits-1);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  for (i=0; i<totalbits; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-                thisbit = bit_at(word, bitsperword, i);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         if (thisbit != thatbit ) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      if (thisbit) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          *start = i;</span><br><span style="color: hsl(0, 100%, 40%);">-                     } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                *end = i;</span><br><span style="color: hsl(0, 100%, 40%);">-                       }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-               thatbit = thisbit;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int all_bits_set(unsigned int *word, int bitsperword, int totalbits )</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        int i, total=totalbits/bitsperword,bitmask = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- for (i=0; i<bitsperword; i++)</span><br><span style="color: hsl(0, 100%, 40%);">-        {</span><br><span style="color: hsl(0, 100%, 40%);">-               bitmask |= (1 << i);</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       for (i=0; i<total; i++)</span><br><span style="color: hsl(0, 100%, 40%);">-      {</span><br><span style="color: hsl(0, 100%, 40%);">-               if (word[i] != bitmask)</span><br><span style="color: hsl(0, 100%, 40%);">-                 return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       return 1;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int main(int argc, char **argv)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      struct ast_context *tmp;</span><br><span style="color: hsl(0, 100%, 40%);">-        struct ast_exten *e, *eroot;</span><br><span style="color: hsl(0, 100%, 40%);">-    pval *tree, *tmptree, *sws;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct ast_include *tmpi;</span><br><span style="color: hsl(0, 100%, 40%);">-       struct ast_sw *sw = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct ast_ignorepat *ipi;</span><br><span style="color: hsl(0, 100%, 40%);">-      pval *incl=0;</span><br><span style="color: hsl(0, 100%, 40%);">-   int localdir = 0, i;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    tree = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       tmptree = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* process the command line args */</span><br><span style="color: hsl(0, 100%, 40%);">-     for (i=1; i<argc; i++)</span><br><span style="color: hsl(0, 100%, 40%);">-       {</span><br><span style="color: hsl(0, 100%, 40%);">-               if (strcmp(argv[i],"-d")==0)</span><br><span style="color: hsl(0, 100%, 40%);">-                  localdir =1;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* 3 simple steps: */</span><br><span style="color: hsl(0, 100%, 40%);">-   /*   1. read in the extensions.conf config file</span><br><span style="color: hsl(0, 100%, 40%);">-  *   2. traverse, and build an AEL tree</span><br><span style="color: hsl(0, 100%, 40%);">-  *   3. Output the AEL tree into a file</span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">-     printf("WARNING: This is an EXTREMELY preliminary version of a program\n");</span><br><span style="color: hsl(0, 100%, 40%);">-   printf("         that will someday hopefully do a thoughful and intelligent\n");</span><br><span style="color: hsl(0, 100%, 40%);">-      printf("         job of transforming your extensions.conf file into an\n");</span><br><span style="color: hsl(0, 100%, 40%);">-   printf("         extensions.ael file.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    printf("         This version has absolutely no intelligence, and pretty\n");</span><br><span style="color: hsl(0, 100%, 40%);">- printf("         much just does a direct conversion\n");</span><br><span style="color: hsl(0, 100%, 40%);">-      printf("         The result will most likely need careful attention to\n");</span><br><span style="color: hsl(0, 100%, 40%);">-   printf("         finish the job!!!!!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     if (!localdir)</span><br><span style="color: hsl(0, 100%, 40%);">-          printf(" (You could use -d the use the extensions.conf in the current directory!)\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        printf("Loading %s/%s...\n", ast_config_AST_CONFIG_DIR, config);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      if (!localdir)</span><br><span style="color: hsl(0, 100%, 40%);">-          localized_use_conf_dir();</span><br><span style="color: hsl(0, 100%, 40%);">-       localized_pbx_load_module();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    printf("... Done!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        tmp = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        while ((tmp = localized_walk_contexts(tmp)) ) {</span><br><span style="color: hsl(0, 100%, 40%);">-         printf("Context: %s\n", tmp->name);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-       printf("=========\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        tmp = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        while ((tmp = localized_walk_contexts(tmp)) ) {</span><br><span style="color: hsl(0, 100%, 40%);">-         /* printf("Context: %s\n", tmp->name); */</span><br><span style="color: hsl(0, 100%, 40%);">-          tmptree = pvalCreateNode(PV_CONTEXT);</span><br><span style="color: hsl(0, 100%, 40%);">-           if (!tree)</span><br><span style="color: hsl(0, 100%, 40%);">-                      tree = tmptree;</span><br><span style="color: hsl(0, 100%, 40%);">-         else</span><br><span style="color: hsl(0, 100%, 40%);">-                    pvalTopLevAddObject(tree, tmptree);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             pvalContextSetName(tmptree, ast_strdup(tmp->name));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-          if (tmp->includes) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 incl = pvalCreateNode(PV_INCLUDES);</span><br><span style="color: hsl(0, 100%, 40%);">-                     pvalContextAddStatement(tmptree, incl);</span><br><span style="color: hsl(0, 100%, 40%);">-                 for (tmpi = tmp->includes; tmpi; ) { /* includes */</span><br><span style="color: hsl(0, 100%, 40%);">-                          if (strchr(tmpi->name,'|')==0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                     if (tmpi->hastime)</span><br><span style="color: hsl(0, 100%, 40%);">-                                   {</span><br><span style="color: hsl(0, 100%, 40%);">-                                               char timerange[15];</span><br><span style="color: hsl(0, 100%, 40%);">-                                             char dowrange[10];</span><br><span style="color: hsl(0, 100%, 40%);">-                                              char domrange[10];</span><br><span style="color: hsl(0, 100%, 40%);">-                                              char monrange[10];</span><br><span style="color: hsl(0, 100%, 40%);">-                                              int startbit=0, endbit=0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                               if (all_bits_set(tmpi->timing.minmask, 30, 720))</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     strcpy(timerange, "*");</span><br><span style="color: hsl(0, 100%, 40%);">-                                               else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  int hr, min;</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    char tbuf[20];</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  get_start_stop(tmpi->timing.minmask, 30, 720, &startbit, &endbit);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   hr = startbit/30;</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       min = (startbit % 30) * 2;</span><br><span style="color: hsl(0, 100%, 40%);">-                                                      sprintf(tbuf,"%02d:%02d", hr, min);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   strcpy(timerange, tbuf);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        hr = endbit/30;</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 min = (endbit % 30) * 2;</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        sprintf(tbuf,"%02d:%02d", hr, min);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   strcat(timerange,"-");</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        strcat(timerange,tbuf);</span><br><span style="color: hsl(0, 100%, 40%);">-                                         }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                               if (all_bits_set(&tmpi->timing.dowmask, 7, 7))</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   strcpy(dowrange, "*");</span><br><span style="color: hsl(0, 100%, 40%);">-                                                else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  get_start_stop(&tmpi->timing.dowmask, 7, 7, &startbit, &endbit);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 strcpy(dowrange, days[startbit]);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       strcat(dowrange,"-");</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 strcat(dowrange, days[endbit]);</span><br><span style="color: hsl(0, 100%, 40%);">-                                         }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                               if (all_bits_set(&tmpi->timing.monthmask, 12, 12))</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       strcpy(monrange, "*");</span><br><span style="color: hsl(0, 100%, 40%);">-                                                else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  get_start_stop(&tmpi->timing.monthmask, 12, 12, &startbit, &endbit);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     strcpy(monrange, months[startbit]);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     strcat(monrange,"-");</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 strcat(monrange, months[endbit]);</span><br><span style="color: hsl(0, 100%, 40%);">-                                               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                               if (all_bits_set(&tmpi->timing.daymask, 31, 31))</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 strcpy(domrange, "*");</span><br><span style="color: hsl(0, 100%, 40%);">-                                                else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  char tbuf[20];</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  get_start_stop(&tmpi->timing.daymask, 31, 31, &startbit, &endbit);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       sprintf(tbuf,"%d", startbit);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 strcpy(domrange, tbuf);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 strcat(domrange,"-");</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 sprintf(tbuf,"%d", endbit);</span><br><span style="color: hsl(0, 100%, 40%);">-                                                   strcat(domrange, tbuf);</span><br><span style="color: hsl(0, 100%, 40%);">-                                         }</span><br><span style="color: hsl(0, 100%, 40%);">-                                               /* now all 4 fields are set; what do we do? */</span><br><span style="color: hsl(0, 100%, 40%);">-                                          pvalIncludesAddIncludeWithTimeConstraints(incl, strdup(tmpi->name), strdup(timerange), strdup(domrange), strdup(dowrange), strdup(monrange));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                pvalIncludesAddInclude(incl, strdup(tmpi->name));</span><br><span style="color: hsl(0, 100%, 40%);">-                                    }</span><br><span style="color: hsl(0, 100%, 40%);">-                               } else { /* it appears the timing constraint info is tacked onto the name, carve it up and divvy it out */</span><br><span style="color: hsl(0, 100%, 40%);">-                                      char *dow,*dom,*mon;</span><br><span style="color: hsl(0, 100%, 40%);">-                                    char *all = strdup(tmpi->name);</span><br><span style="color: hsl(0, 100%, 40%);">-                                      char *hr = strchr(all,'|');</span><br><span style="color: hsl(0, 100%, 40%);">-                                     if (hr) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                               *hr++ = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-                                              dow = strchr(hr,'|');</span><br><span style="color: hsl(0, 100%, 40%);">-                                           if (dow) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                      *dow++ = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     dom = strchr(dow,'|');</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  if (dom) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                              *dom++ = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-                                                             mon = strchr(dom,'|');</span><br><span style="color: hsl(0, 100%, 40%);">-                                                          if (mon) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                      *mon++ = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                     /* now all 4 fields are set; what do we do? */</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                  pvalIncludesAddIncludeWithTimeConstraints(incl, strdup(all), strdup(hr), strdup(dow), strdup(dom), strdup(mon));</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                        /* the original data is always best to keep (no 2-min rounding) */</span><br><span style="color: hsl(0, 100%, 40%);">-                                                              } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                        ast_log(LOG_ERROR,"No month spec attached to include!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                                                            }</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                ast_log(LOG_ERROR,"No day of month spec attached to include!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     }</span><br><span style="color: hsl(0, 100%, 40%);">-                                               } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        ast_log(LOG_ERROR,"No day of week spec attached to include!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                                              }</span><br><span style="color: hsl(0, 100%, 40%);">-                                       }</span><br><span style="color: hsl(0, 100%, 40%);">-                                       free(all);</span><br><span style="color: hsl(0, 100%, 40%);">-                              }</span><br><span style="color: hsl(0, 100%, 40%);">-                               tmpi = tmpi->next;</span><br><span style="color: hsl(0, 100%, 40%);">-                   }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-               for (ipi = tmp->ignorepats; ipi; ) { /* ignorepats */</span><br><span style="color: hsl(0, 100%, 40%);">-                        incl = pvalCreateNode(PV_IGNOREPAT);</span><br><span style="color: hsl(0, 100%, 40%);">-                    pvalIgnorePatSetPattern(incl,(char *)ipi->pattern);</span><br><span style="color: hsl(0, 100%, 40%);">-                  pvalContextAddStatement(tmptree, incl);</span><br><span style="color: hsl(0, 100%, 40%);">-                 ipi = ipi->next;</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-               eroot=0;</span><br><span style="color: hsl(0, 100%, 40%);">-                while ( (eroot = localized_walk_context_extensions(tmp, eroot)) ) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     pval *exten = pvalCreateNode(PV_EXTENSION);</span><br><span style="color: hsl(0, 100%, 40%);">-                     pvalContextAddStatement(tmptree, exten);</span><br><span style="color: hsl(0, 100%, 40%);">-                        pvalExtenSetName(exten, ast_strdup(eroot->exten));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                   if (eroot->peer) {</span><br><span style="color: hsl(0, 100%, 40%);">-                           pval *block = pvalCreateNode(PV_STATEMENTBLOCK);</span><br><span style="color: hsl(0, 100%, 40%);">-                                pvalExtenSetStatement(exten, block);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                            e = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-                          while ( (e = localized_walk_extension_priorities(eroot, e)) ) {</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                 pval *statemnt = pvalCreateNode(PV_APPLICATION_CALL);</span><br><span style="color: hsl(0, 100%, 40%);">-                                   pval *args = pvalCreateNode(PV_WORD);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                   /* printf("           %s(%s)\n", e->app, (char*)e->data); */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                    pvalAppCallSetAppName(statemnt, ast_strdup(e->app));</span><br><span style="color: hsl(0, 100%, 40%);">-                                 pvalWordSetString(args, ast_strdup(e->data));</span><br><span style="color: hsl(0, 100%, 40%);">-                                        pvalAppCallAddArg(statemnt, args);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                      pvalStatementBlockAddStatement(block, statemnt);</span><br><span style="color: hsl(0, 100%, 40%);">-                                }</span><br><span style="color: hsl(0, 100%, 40%);">-                       } else if (eroot->priority == -1) {</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                          pval *statemnt = pvalCreateNode(PV_APPLICATION_CALL);</span><br><span style="color: hsl(0, 100%, 40%);">-                           pval *args = pvalCreateNode(PV_WORD);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                           /* printf("Mike, we have a hint on exten %s with data %s\n", eroot->exten, eroot->app); */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                              pvalAppCallSetAppName(statemnt, "NoOp");</span><br><span style="color: hsl(0, 100%, 40%);">-                              pvalWordSetString(args, ast_strdup(eroot->app));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                             pvalExtenSetStatement(exten, statemnt);</span><br><span style="color: hsl(0, 100%, 40%);">-                         pvalExtenSetHints(exten, ast_strdup(eroot->app));</span><br><span style="color: hsl(0, 100%, 40%);">-                    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                pval *statemnt = pvalCreateNode(PV_APPLICATION_CALL);</span><br><span style="color: hsl(0, 100%, 40%);">-                           pval *args = pvalCreateNode(PV_WORD);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                           /* printf("           %s (%s)\n", eroot->app, (char *)eroot->data); */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                          pvalAppCallSetAppName(statemnt, ast_strdup(eroot->app));</span><br><span style="color: hsl(0, 100%, 40%);">-                             pvalWordSetString(args, ast_strdup(eroot->data));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                            pvalAppCallAddArg(statemnt, args);</span><br><span style="color: hsl(0, 100%, 40%);">-                              pvalExtenSetStatement(exten, statemnt);</span><br><span style="color: hsl(0, 100%, 40%);">-                 }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                       /* printf("   extension: %s\n", eroot->exten); */</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-               if (AST_LIST_FIRST(&tmp->alts)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        sws = pvalCreateNode(PV_SWITCHES);</span><br><span style="color: hsl(0, 100%, 40%);">-                      pvalContextAddStatement(tmptree,sws);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                   sw = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-                 while ((sw = localized_walk_context_switches(tmp,sw)) ) {</span><br><span style="color: hsl(0, 100%, 40%);">-                               pvalSwitchesAddSwitch(sws, ast_strdup(sw->name));</span><br><span style="color: hsl(0, 100%, 40%);">-                    }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       printf("Generating aelout.ael file...\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    ael2_print("aelout.ael", tree);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       printf("...Done!\n");</span><br><span style="color: hsl(0, 100%, 40%);">- return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* ==================================== for linking internal stuff to external stuff */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int pbx_builtin_setvar(struct ast_channel *chan, const char *data)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    return localized_pbx_builtin_setvar(chan, data);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void pbx_substitute_variables_helper(struct ast_channel *c,const char *cp1,char *cp2,int count);</span><br><span style="color: hsl(0, 100%, 40%);">-void pbx_substitute_variables_helper(struct ast_channel *c,const char *cp1,char *cp2,int count)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       if (cp1 && *cp1)</span><br><span style="color: hsl(0, 100%, 40%);">-                strncpy(cp2,cp1,AST_MAX_EXTENSION); /* Right now, this routine is ONLY being called for</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                                    a possible var substitution on extension names,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                                         so....! */</span><br><span style="color: hsl(0, 100%, 40%);">-   else</span><br><span style="color: hsl(0, 100%, 40%);">-            *cp2 = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int ast_add_extension2(struct ast_context *con,</span><br><span style="color: hsl(0, 100%, 40%);">-                                          int replace, const char *extension, int priority, const char *label, const char *callerid,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      const char *application, void *data, void (*datad)(void *),</span><br><span style="color: hsl(0, 100%, 40%);">-                                     const char *registrar, const char *registrar_file, int registrar_line)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      return localized_add_extension2(con, replace, extension, priority, label, callerid, application, data, datad, registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int ast_context_add_ignorepat2(struct ast_context *con, const char *value, const char *registrar)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    return localized_context_add_ignorepat2(con, value, registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int ast_context_add_switch2(struct ast_context *con, const char *value,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                          const char *data, int eval, const char *registrar)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    return localized_context_add_switch2(con, value, data, eval, registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int ast_context_add_include2(struct ast_context *con, const char *value,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                 const char *registrar)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       return localized_context_add_include2(con, value,registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_context *ast_context_find_or_create(struct ast_context **extcontexts, struct ast_hashtab *exttable, const char *name, const char *registrar)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   printf("find/Creating context %s, registrar=%s\n", name, registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  return localized_context_find_or_create(extcontexts, exttable, name, registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void __ast_cli_register_multiple(void);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void __ast_cli_register_multiple(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_module_register(const struct ast_module_info *x)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_module_unregister(const struct ast_module_info *x)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_cli_unregister_multiple(void);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_cli_unregister_multiple(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_context *ast_walk_contexts(struct ast_context *con);</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_context *ast_walk_contexts(struct ast_context *con)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   return localized_walk_contexts(con);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_context_destroy(struct ast_context *con, const char *registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_context_destroy(struct ast_context *con, const char *registrar)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- return localized_context_destroy(con, registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int ast_context_verify_includes(struct ast_context *con);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int ast_context_verify_includes(struct ast_context *con)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    return  localized_context_verify_includes(con);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_merge_contexts_and_delete(struct ast_context **extcontexts, struct ast_hashtab *exttable, const char *registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_merge_contexts_and_delete(struct ast_context **extcontexts, struct ast_hashtab *exttable, const char *registrar)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    localized_merge_contexts_and_delete(extcontexts, exttable, registrar);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-const char *ast_get_context_name(struct ast_context *con);</span><br><span style="color: hsl(0, 100%, 40%);">-const char *ast_get_context_name(struct ast_context *con)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     return con ? con->name : NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_exten *ast_walk_context_extensions(struct ast_context *con, struct ast_exten *exten);</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_exten *ast_walk_context_extensions(struct ast_context *con, struct ast_exten *exten)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-const struct ast_include *ast_walk_context_includes(const struct ast_context *con, const struct ast_include *inc);</span><br><span style="color: hsl(0, 100%, 40%);">-const struct ast_include *ast_walk_context_includes(const struct ast_context *con, const struct ast_include *inc)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_exten *pbx_find_extension(struct ast_channel *chan,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                      struct ast_context *bypass,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                     struct pbx_find_info *q,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                        const char *context,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                    const char *exten,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                      int priority,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                   const char *label,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                      const char *callerid,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                   enum ext_match_t action);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_exten *pbx_find_extension(struct ast_channel *chan,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                         struct ast_context *bypass,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                     struct pbx_find_info *q,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                        const char *context,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                    const char *exten,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                      int priority,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                   const char *label,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                      const char *callerid,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                   enum ext_match_t action)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      return localized_find_extension(bypass, q, context, exten, priority, label, callerid, action);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int ast_hashtab_compare_contexts(const void *ah_a, const void *ah_b);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int ast_hashtab_compare_contexts(const void *ah_a, const void *ah_b)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-unsigned int ast_hashtab_hash_contexts(const void *obj);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-unsigned int ast_hashtab_hash_contexts(const void *obj)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef DEBUG_THREADS</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_mark_lock_acquired(void *lock_addr)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_remove_lock_info(void *lock_addr, struct ast_bt *bt)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_store_lock_info(enum ast_lock_type type, const char *filename,</span><br><span style="color: hsl(0, 100%, 40%);">-      int line_num, const char *func, const char *lock_name, void *lock_addr, struct ast_bt *bt)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef HAVE_BKTR</span><br><span style="color: hsl(0, 100%, 40%);">-int __ast_bt_get_addresses(struct ast_bt *bt)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct ast_vector_string *__ast_bt_get_symbols(void **addresses, size_t num_frames)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-#endif /* HAVE_BKTR */</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_suspend_lock_info(void *lock_addr)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-void ast_restore_lock_info(void *lock_addr)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-#endif /* DEBUG_THREADS */</span><br><span>diff --git a/utils/utils.xml b/utils/utils.xml</span><br><span>index 777789a..ae72bac 100644</span><br><span>--- a/utils/utils.xml</span><br><span>+++ b/utils/utils.xml</span><br><span>@@ -28,10 +28,6 @@</span><br><span>        <defaultenabled>no</defaultenabled></span><br><span>      <support_level>extended</support_level></span><br><span>   </member></span><br><span style="color: hsl(0, 100%, 40%);">-  <member name="conf2ael"></span><br><span style="color: hsl(0, 100%, 40%);">-      <defaultenabled>no</defaultenabled></span><br><span style="color: hsl(0, 100%, 40%);">- <support_level>deprecated</support_level></span><br><span style="color: hsl(0, 100%, 40%);">-  </member></span><br><span>   <member name="muted"></span><br><span>    <defaultenabled>no</defaultenabled></span><br><span>      <support_level>deprecated</support_level></span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/16324">change 16324</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/16324"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 19 </div>
<div style="display:none"> Gerrit-Change-Id: I75dc77162926fb17e7c6caf8f04e3aabd792fb0c </div>
<div style="display:none"> Gerrit-Change-Number: 16324 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>