<p>N A has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/16329">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">app_morsecode: Add American Morse code<br><br>Previously, the Morsecode application only supported international<br>Morse code. This adds support for American Morse code and adds an<br>option to configure the frequency used in off intervals.<br><br>Additionally, the application checks for hangup between tones<br>to prevent application execution from continuing after hangup.<br><br>ASTERISK-29541<br><br>Change-Id: I172431a2e18e6527d577e74adfb05b154cba7bd4<br>---<br>M apps/app_morsecode.c<br>A doc/CHANGES-staging/app_morsecode.txt<br>2 files changed, 146 insertions(+), 30 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/29/16329/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/apps/app_morsecode.c b/apps/app_morsecode.c</span><br><span>index 0a9c208..995eb70 100644</span><br><span>--- a/apps/app_morsecode.c</span><br><span>+++ b/apps/app_morsecode.c</span><br><span>@@ -3,6 +3,8 @@</span><br><span>  *</span><br><span>  * Copyright (c) 2006, Tilghman Lesher.  All rights reserved.</span><br><span>  *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Updated by Naveen Albert <asterisk@phreaknet.org></span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span>  * Tilghman Lesher <app_morsecode__v001@the-tilghman.com></span><br><span>  *</span><br><span>  * This code is released by the author with no restrictions on usage.</span><br><span>@@ -20,6 +22,7 @@</span><br><span>  * \brief Morsecode application</span><br><span>  *</span><br><span>  * \author Tilghman Lesher <app_morsecode__v001@the-tilghman.com></span><br><span style="color: hsl(120, 100%, 40%);">+ * \author Naveen Albert <asterisk@phreaknet.org></span><br><span>  *</span><br><span>  * \ingroup applications</span><br><span>  */</span><br><span>@@ -58,6 +61,14 @@</span><br><span>                                <variable name="MORSETONE"></span><br><span>                                  <para>The pitch of the tone in (Hz), default is 800</para></span><br><span>                               </variable></span><br><span style="color: hsl(120, 100%, 40%);">+                             <variable name="MORSESPACETONE"></span><br><span style="color: hsl(120, 100%, 40%);">+                                      <para>The pitch of the spaces in (Hz), default is 0</para></span><br><span style="color: hsl(120, 100%, 40%);">+                                </variable></span><br><span style="color: hsl(120, 100%, 40%);">+                             <variable name="MORSETYPE"></span><br><span style="color: hsl(120, 100%, 40%);">+                                   <para>The code type to use (AMERICAN for standard American Morse</span><br><span style="color: hsl(120, 100%, 40%);">+                                        or INTERNATIONAL for international code.</span><br><span style="color: hsl(120, 100%, 40%);">+                                      Default is INTERNATIONAL).</para></span><br><span style="color: hsl(120, 100%, 40%);">+                               </variable></span><br><span>                    </variablelist></span><br><span>                </description></span><br><span>                 <see-also></span><br><span>@@ -68,7 +79,7 @@</span><br><span>  ***/</span><br><span> static const char app_morsecode[] = "Morsecode";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static const char * const morsecode[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+static const char * const internationalcode[] = {</span><br><span>  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", /*  0-15 */</span><br><span>  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", /* 16-31 */</span><br><span>  " ",      /* 32 - <space> */</span><br><span>@@ -95,16 +106,16 @@</span><br><span>  "",       /* 62 - > */</span><br><span>  "..--..", /* 63 - ? */</span><br><span>     ".--.-.", /* 64 - @ */</span><br><span style="color: hsl(0, 100%, 40%);">-        ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",</span><br><span style="color: hsl(0, 100%, 40%);">-   "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..",</span><br><span style="color: hsl(120, 100%, 40%);">+       ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", /* A-M */</span><br><span style="color: hsl(120, 100%, 40%);">+       "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", /* N-Z */</span><br><span>    "-.--.-", /* 91 - [ (really '(') */</span><br><span>        "-..-.",  /* 92 - \ (really '/') */</span><br><span>        "-.--.-", /* 93 - ] (really ')') */</span><br><span>        "",       /* 94 - ^ */</span><br><span>     "..--.-", /* 95 - _ */</span><br><span>     ".----.", /* 96 - ` */</span><br><span style="color: hsl(0, 100%, 40%);">-        ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",</span><br><span style="color: hsl(0, 100%, 40%);">-   "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..",</span><br><span style="color: hsl(120, 100%, 40%);">+       ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", /* a-m */</span><br><span style="color: hsl(120, 100%, 40%);">+       "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", /* n-z */</span><br><span>    "-.--.-", /* 123 - { (really '(') */</span><br><span>       "",       /* 124 - | */</span><br><span>    "-.--.-", /* 125 - } (really ')') */</span><br><span>@@ -112,33 +123,78 @@</span><br><span>       ". . .",  /* 127 - <del> (error) */</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void playtone(struct ast_channel *chan, int tone, int len)</span><br><span style="color: hsl(120, 100%, 40%);">+static const char * const americanmorsecode[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+     "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", /*  0-15 */</span><br><span style="color: hsl(120, 100%, 40%);">+   "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", /* 16-31 */</span><br><span style="color: hsl(120, 100%, 40%);">+   "  ",    /* 32 - <space> */</span><br><span style="color: hsl(120, 100%, 40%);">+   "---.",   /* 33 - ! */</span><br><span style="color: hsl(120, 100%, 40%);">+      "..-. -.",/* 34 - " (QN)*/</span><br><span style="color: hsl(120, 100%, 40%);">+     "",       /* 35 - # */</span><br><span style="color: hsl(120, 100%, 40%);">+      "... .-..",/* 36 - $ (SX) */</span><br><span style="color: hsl(120, 100%, 40%);">+        "",       /* 37 - % */</span><br><span style="color: hsl(120, 100%, 40%);">+      ". ...",  /* 38 - & (ES) */</span><br><span style="color: hsl(120, 100%, 40%);">+     "..-. .-..",/* 39 - ' (QX) */</span><br><span style="color: hsl(120, 100%, 40%);">+   "..... -.", /* 40 - ( (PN) */</span><br><span style="color: hsl(120, 100%, 40%);">+       "..... .. ..", /* 41 - ) (PY) */</span><br><span style="color: hsl(120, 100%, 40%);">+    "",       /* 42 - * */</span><br><span style="color: hsl(120, 100%, 40%);">+      "",       /* 43 - + */</span><br><span style="color: hsl(120, 100%, 40%);">+      ".-.-",   /* 44 - , */</span><br><span style="color: hsl(120, 100%, 40%);">+      ".... .-..",/* 45 - (HX) */</span><br><span style="color: hsl(120, 100%, 40%);">+ "..--..", /* 46 - . */</span><br><span style="color: hsl(120, 100%, 40%);">+      "..- -",  /* 47 - / (UT) */</span><br><span style="color: hsl(120, 100%, 40%);">+ ".--.", "..-..", "...-.", "....-", "---", "......", "--..", "-....", "-..-", "0", /* 48-57 - 0-9 */</span><br><span style="color: hsl(120, 100%, 40%);">+       "-.- . .",/* 58 - : (KO) */</span><br><span style="color: hsl(120, 100%, 40%);">+ "... ..", /* 59 - ; */</span><br><span style="color: hsl(120, 100%, 40%);">+      "",       /* 60 - < */</span><br><span style="color: hsl(120, 100%, 40%);">+   "-...-",  /* 61 - = (paragraph mark) */</span><br><span style="color: hsl(120, 100%, 40%);">+     "",       /* 62 - > */</span><br><span style="color: hsl(120, 100%, 40%);">+   "-..-.",  /* 63 - ? */</span><br><span style="color: hsl(120, 100%, 40%);">+      ".--.-.", /* 64 - @ */</span><br><span style="color: hsl(120, 100%, 40%);">+      ".-", "-...", ".. .", "-..", ".", ".-.", "--.", "....", "..", ".-.-", "-.-", "L", "--", /* A-M */</span><br><span style="color: hsl(120, 100%, 40%);">+   "-.", ". .", ".....", "..-.", ". ..", "...", "-", "..-", "...-", ".--", ".-..", ".. ..", "... .", /* N-Z */</span><br><span style="color: hsl(120, 100%, 40%);">+ "..... -.", /* 91 - [ (really '(') */</span><br><span style="color: hsl(120, 100%, 40%);">+       "..- -",  /* 92 - \ (really '/') */</span><br><span style="color: hsl(120, 100%, 40%);">+ "..... .. ..", /* 93 - ] (really ')') */</span><br><span style="color: hsl(120, 100%, 40%);">+    "",       /* 94 - ^ */</span><br><span style="color: hsl(120, 100%, 40%);">+      "..--.-", /* 95 - _ */</span><br><span style="color: hsl(120, 100%, 40%);">+      ".----.", /* 96 - ` */</span><br><span style="color: hsl(120, 100%, 40%);">+      ".-", "-...", ".. .", "-..", ".", ".-.", "--.", "....", "..", ".-.-", "-.-", "L", "--", /* a-m */</span><br><span style="color: hsl(120, 100%, 40%);">+   "-.", ". .", ".....", "..-.", ". ..", "...", "-", "..-", "...-", ".--", ".-..", ".. ..", "... .", /* n-z */</span><br><span style="color: hsl(120, 100%, 40%);">+ "..... -.", /* 123 - { (really '(') */</span><br><span style="color: hsl(120, 100%, 40%);">+      "",       /* 124 - | */</span><br><span style="color: hsl(120, 100%, 40%);">+     "..... .. ..", /* 125 - } (really ')') */</span><br><span style="color: hsl(120, 100%, 40%);">+   "..- -",  /* 126 - ~ (really bar) */</span><br><span style="color: hsl(120, 100%, 40%);">+        ". . .",  /* 127 - <del> (error) */</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int playtone(struct ast_channel *chan, int tone, int len)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+      int res;</span><br><span>     char dtmf[20];</span><br><span>       snprintf(dtmf, sizeof(dtmf), "%d/%d", tone, len);</span><br><span>  ast_playtones_start(chan, 0, dtmf, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_safe_sleep(chan, len);</span><br><span style="color: hsl(120, 100%, 40%);">+    res = ast_safe_sleep(chan, len);</span><br><span>     ast_playtones_stop(chan);</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> static int morsecode_exec(struct ast_channel *chan, const char *data)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      int res=0, ditlen, tone;</span><br><span style="color: hsl(120, 100%, 40%);">+      int res = 0, ditlen, tone, toneoff, digit2;</span><br><span>  const char *digit;</span><br><span style="color: hsl(0, 100%, 40%);">-      const char *ditlenc, *tonec;</span><br><span style="color: hsl(120, 100%, 40%);">+  const char *ditlenc, *tonec, *toneb, *codetype;</span><br><span> </span><br><span>  if (ast_strlen_zero(data)) {</span><br><span>                 ast_log(LOG_WARNING, "Syntax: Morsecode(<string>) - no argument found\n");</span><br><span>           return 0;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* Use variable MORESEDITLEN, if set (else 80) */</span><br><span>    ast_channel_lock(chan);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Use variable MORESEDITLEN, if set (else 80) */</span><br><span>    ditlenc = pbx_builtin_getvar_helper(chan, "MORSEDITLEN");</span><br><span>  if (ast_strlen_zero(ditlenc) || (sscanf(ditlenc, "%30d", &ditlen) != 1)) {</span><br><span>             ditlen = 80;</span><br><span>         }</span><br><span style="color: hsl(0, 100%, 40%);">-       ast_channel_unlock(chan);</span><br><span> </span><br><span>        /* Use variable MORSETONE, if set (else 800) */</span><br><span>      ast_channel_lock(chan);</span><br><span>@@ -146,29 +202,83 @@</span><br><span>      if (ast_strlen_zero(tonec) || (sscanf(tonec, "%30d", &tone) != 1)) {</span><br><span>           tone = 800;</span><br><span>  }</span><br><span style="color: hsl(0, 100%, 40%);">-       ast_channel_unlock(chan);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   for (digit = data; *digit; digit++) {</span><br><span style="color: hsl(0, 100%, 40%);">-           int digit2 = *digit;</span><br><span style="color: hsl(0, 100%, 40%);">-            const char *dahdit;</span><br><span style="color: hsl(0, 100%, 40%);">-             if (digit2 < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-               for (dahdit = morsecode[digit2]; *dahdit; dahdit++) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   if (*dahdit == '-') {</span><br><span style="color: hsl(0, 100%, 40%);">-                           playtone(chan, tone, 3 * ditlen);</span><br><span style="color: hsl(0, 100%, 40%);">-                       } else if (*dahdit == '.') {</span><br><span style="color: hsl(0, 100%, 40%);">-                            playtone(chan, tone, 1 * ditlen);</span><br><span style="color: hsl(0, 100%, 40%);">-                       } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                /* Account for ditlen of silence immediately following */</span><br><span style="color: hsl(0, 100%, 40%);">-                               playtone(chan, 0, 2 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Use variable MORSESPACETONE, if set (else 0) */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  toneb = pbx_builtin_getvar_helper(chan, "MORSESPACETONE");</span><br><span style="color: hsl(120, 100%, 40%);">+  if (ast_strlen_zero(toneb) || (sscanf(toneb, "%30d", &toneoff) != 1)) {</span><br><span style="color: hsl(120, 100%, 40%);">+         toneoff = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Use variable MORSETYPE, if set (else INTERNATIONAL) */</span><br><span style="color: hsl(120, 100%, 40%);">+     codetype = pbx_builtin_getvar_helper(chan, "MORSETYPE");</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!codetype || strcmp(codetype, "AMERICAN")) {</span><br><span style="color: hsl(120, 100%, 40%);">+            codetype = "INTERNATIONAL";</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!strcmp(codetype, "AMERICAN")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                ast_channel_unlock(chan);</span><br><span style="color: hsl(120, 100%, 40%);">+             for (digit = data; *digit; digit++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 const char *dahdit;</span><br><span style="color: hsl(120, 100%, 40%);">+                   digit2 = *digit;</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (digit2 < 0 || digit2 > 127) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               continue;</span><br><span>                    }</span><br><span style="color: hsl(120, 100%, 40%);">+                     for (dahdit = americanmorsecode[digit2]; *dahdit; dahdit++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         if (*dahdit == '-') {</span><br><span style="color: hsl(120, 100%, 40%);">+                                 res = playtone(chan, tone, 3 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                               } else if (*dahdit == '.') {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  res = playtone(chan, tone, 1 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                               } else if (*dahdit == 'L' || *dahdit == 'l') {</span><br><span style="color: hsl(120, 100%, 40%);">+                                        res = playtone(chan, tone, 6 * ditlen); /* long dash */</span><br><span style="color: hsl(120, 100%, 40%);">+                               } else if (*dahdit == '0') {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  res = playtone(chan, tone, 9 * ditlen); /* extra long dash */</span><br><span style="color: hsl(120, 100%, 40%);">+                         } else if (*dahdit == ' ') { /* space char (x20) = 6 dot lengths */</span><br><span style="color: hsl(120, 100%, 40%);">+                                   /* Intra-char pauses, specific to American Morse */</span><br><span style="color: hsl(120, 100%, 40%);">+                                   res = playtone(chan, toneoff, 3 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                            } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      /* Account for ditlen of silence immediately following */</span><br><span style="color: hsl(120, 100%, 40%);">+                                     res = playtone(chan, toneoff, 2 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                            }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   /* Pause slightly between each dit and dah */</span><br><span style="color: hsl(0, 100%, 40%);">-                   playtone(chan, 0, 1 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                                /* Pause slightly between each dit and dah */</span><br><span style="color: hsl(120, 100%, 40%);">+                         res = playtone(chan, toneoff, 1 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (res)</span><br><span style="color: hsl(120, 100%, 40%);">+                                      break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* Pause between characters */</span><br><span style="color: hsl(120, 100%, 40%);">+                        res = playtone(chan, toneoff, 3 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (res)</span><br><span style="color: hsl(120, 100%, 40%);">+                              break;</span><br><span>               }</span><br><span style="color: hsl(0, 100%, 40%);">-               /* Pause between characters */</span><br><span style="color: hsl(0, 100%, 40%);">-          playtone(chan, 0, 2 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+        } else { /* International */</span><br><span style="color: hsl(120, 100%, 40%);">+          ast_channel_unlock(chan);</span><br><span style="color: hsl(120, 100%, 40%);">+             for (digit = data; *digit; digit++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 const char *dahdit;</span><br><span style="color: hsl(120, 100%, 40%);">+                   digit2 = *digit;</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (digit2 < 0 || digit2 > 127) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               continue;</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     for (dahdit = internationalcode[digit2]; *dahdit; dahdit++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         if (*dahdit == '-') {</span><br><span style="color: hsl(120, 100%, 40%);">+                                 res = playtone(chan, tone, 3 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                               } else if (*dahdit == '.') {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  res = playtone(chan, tone, 1 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      /* Account for ditlen of silence immediately following */</span><br><span style="color: hsl(120, 100%, 40%);">+                                     res = playtone(chan, toneoff, 2 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                            }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                           /* Pause slightly between each dit and dah */</span><br><span style="color: hsl(120, 100%, 40%);">+                         res = playtone(chan, toneoff, 1 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (res)</span><br><span style="color: hsl(120, 100%, 40%);">+                                      break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* Pause between characters */</span><br><span style="color: hsl(120, 100%, 40%);">+                        res = playtone(chan, toneoff, 2 * ditlen);</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (res)</span><br><span style="color: hsl(120, 100%, 40%);">+                              break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span>    }</span><br><span> </span><br><span>        return res;</span><br><span>diff --git a/doc/CHANGES-staging/app_morsecode.txt b/doc/CHANGES-staging/app_morsecode.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..b9e49b6</span><br><span>--- /dev/null</span><br><span>+++ b/doc/CHANGES-staging/app_morsecode.txt</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Subject: app_morsecode</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Extends the Morsecode application by adding support for</span><br><span style="color: hsl(120, 100%, 40%);">+American Morse code and adds a configurable option</span><br><span style="color: hsl(120, 100%, 40%);">+for the frequency used in off intervals.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/16329">change 16329</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/+/16329"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 18 </div>
<div style="display:none"> Gerrit-Change-Id: I172431a2e18e6527d577e74adfb05b154cba7bd4 </div>
<div style="display:none"> Gerrit-Change-Number: 16329 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: N A <mail@interlinked.x10host.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>