<p>Friendly Automation <strong>submitted</strong> this change.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/16329">View Change</a></p><div style="white-space:pre-wrap">Approvals:
George Joseph: Looks good to me, approved
Friendly Automation: Approved for Submit
</div><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;"><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><div style="white-space:pre-wrap"></div><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: 2 </div>
<div style="display:none"> Gerrit-Owner: N A <mail@interlinked.x10host.com> </div>
<div style="display:none"> Gerrit-Reviewer: Friendly Automation </div>
<div style="display:none"> Gerrit-Reviewer: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>