<p>N A has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/19601">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sig_analog: Add fuller Caller ID support.<br><br>A previous change, ASTERISK_29991, made it possible<br>to send additional Caller ID parameters that were<br>not previously supported.<br><br>This change adds support for analog DAHDI channels<br>to now be able to receive these parameters for<br>on-hook Caller ID, in order to enhance the usability<br>of CPE that support these parameters.<br><br>ASTERISK-30331 #close<br><br>Change-Id: I24a5a4df8d030729e9608f168b0b239dbda67039<br>---<br>M channels/chan_dahdi.c<br>M channels/sig_analog.c<br>M channels/sig_analog.h<br>A doc/CHANGES-staging/sig_analog_callerid.txt<br>4 files changed, 57 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/01/19601/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c</span><br><span>index 5607eb0..f0cbe73 100644</span><br><span>--- a/channels/chan_dahdi.c</span><br><span>+++ b/channels/chan_dahdi.c</span><br><span>@@ -1633,6 +1633,7 @@</span><br><span> static int my_send_callerid(void *pvt, int cwcid, struct ast_party_caller *caller)</span><br><span> {</span><br><span>    struct dahdi_pvt *p = pvt;</span><br><span style="color: hsl(120, 100%, 40%);">+    struct analog_pvt *analog_p = p->sig_pvt;</span><br><span> </span><br><span>     ast_debug(2, "Starting cid spill\n");</span><br><span> </span><br><span>@@ -1644,13 +1645,20 @@</span><br><span>        if ((p->cidspill = ast_malloc(MAX_CALLERID_SIZE))) {</span><br><span>              int pres = ast_party_id_presentation(&caller->id);</span><br><span>            if (cwcid == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* Some CPE support additional parameters for on-hook Caller*ID,</span><br><span style="color: hsl(120, 100%, 40%);">+                       * such as redirecting reason and call qualifier, so send those</span><br><span style="color: hsl(120, 100%, 40%);">+                        * if available.</span><br><span style="color: hsl(120, 100%, 40%);">+                       * I don't know of any CPE that supports this for Call Waiting (unfortunately),</span><br><span style="color: hsl(120, 100%, 40%);">+                    * so don't send those for call waiting as that will just lengthen the CID spill</span><br><span style="color: hsl(120, 100%, 40%);">+                   * for no good reason.</span><br><span style="color: hsl(120, 100%, 40%);">+                         */</span><br><span>                  p->cidlen = ast_callerid_full_generate(p->cidspill,</span><br><span>                            caller->id.name.str,</span><br><span>                              caller->id.number.str,</span><br><span>                            NULL,</span><br><span style="color: hsl(0, 100%, 40%);">-                           -1,</span><br><span style="color: hsl(120, 100%, 40%);">+                           analog_p->redirecting_reason,</span><br><span>                             pres,</span><br><span style="color: hsl(0, 100%, 40%);">-                           0,</span><br><span style="color: hsl(120, 100%, 40%);">+                            analog_p->call_qualifier,</span><br><span>                                 CID_TYPE_MDMF,</span><br><span>                               AST_LAW(p));</span><br><span>                 } else {</span><br><span>diff --git a/channels/sig_analog.c b/channels/sig_analog.c</span><br><span>index 76ee645..7cffb42 100644</span><br><span>--- a/channels/sig_analog.c</span><br><span>+++ b/channels/sig_analog.c</span><br><span>@@ -1073,6 +1073,8 @@</span><br><span>                    }</span><br><span> </span><br><span>                }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Name and Number */</span><br><span>                n = ast_channel_connected(ast)->id.name.valid ? ast_channel_connected(ast)->id.name.str : NULL;</span><br><span>                l = ast_channel_connected(ast)->id.number.valid ? ast_channel_connected(ast)->id.number.str : NULL;</span><br><span>            if (l) {</span><br><span>@@ -1087,12 +1089,29 @@</span><br><span>           }</span><br><span> </span><br><span>                if (p->use_callerid) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     const char *qual_var;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* Caller ID Name and Number */</span><br><span>                      p->caller.id.name.str = p->lastcid_name;</span><br><span>                       p->caller.id.number.str = p->lastcid_num;</span><br><span>                      p->caller.id.name.valid = ast_channel_connected(ast)->id.name.valid;</span><br><span>                   p->caller.id.number.valid = ast_channel_connected(ast)->id.number.valid;</span><br><span>                       p->caller.id.name.presentation = ast_channel_connected(ast)->id.name.presentation;</span><br><span>                     p->caller.id.number.presentation = ast_channel_connected(ast)->id.number.presentation;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* Redirecting Reason */</span><br><span style="color: hsl(120, 100%, 40%);">+                      p->redirecting_reason = ast_channel_redirecting(ast)->from.number.valid ? ast_channel_redirecting(ast)->reason.code : -1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                  /* Call Qualifier */</span><br><span style="color: hsl(120, 100%, 40%);">+                  ast_channel_lock(ast);</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* XXX In the future, we may want to make this a CALLERID or CHANNEL property and fetch it from there. */</span><br><span style="color: hsl(120, 100%, 40%);">+                     qual_var = pbx_builtin_getvar_helper(ast, "CALL_QUALIFIER");</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (!ast_strlen_zero(qual_var) && !strcmp(qual_var, "1")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         p->call_qualifier = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              p->call_qualifier = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     ast_channel_unlock(ast);</span><br><span>             }</span><br><span> </span><br><span>                ast_setstate(ast, AST_STATE_RINGING);</span><br><span>diff --git a/channels/sig_analog.h b/channels/sig_analog.h</span><br><span>index 7e9acda..e36c043 100644</span><br><span>--- a/channels/sig_analog.h</span><br><span>+++ b/channels/sig_analog.h</span><br><span>@@ -334,12 +334,15 @@</span><br><span>        * gives a positive reply.</span><br><span>    */</span><br><span>  unsigned int callwaitcas:1;</span><br><span style="color: hsl(120, 100%, 40%);">+   unsigned int call_qualifier:1;  /*!< Call qualifier delivery */</span><br><span> </span><br><span>       char callwait_num[AST_MAX_EXTENSION];</span><br><span>        char callwait_name[AST_MAX_EXTENSION];</span><br><span>       char lastcid_num[AST_MAX_EXTENSION];</span><br><span>         char lastcid_name[AST_MAX_EXTENSION];</span><br><span>        struct ast_party_caller caller;</span><br><span style="color: hsl(120, 100%, 40%);">+       int redirecting_reason;                 /*!< Redirecting reason */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      int cidrings;                                   /*!< Which ring to deliver CID on */</span><br><span>      char echorest[20];</span><br><span>   int polarity;</span><br><span>diff --git a/doc/CHANGES-staging/sig_analog_callerid.txt b/doc/CHANGES-staging/sig_analog_callerid.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..45c1b68</span><br><span>--- /dev/null</span><br><span>+++ b/doc/CHANGES-staging/sig_analog_callerid.txt</span><br><span>@@ -0,0 +1,5 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Subject: chan_dahdi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Additional Caller ID properties are now supported</span><br><span style="color: hsl(120, 100%, 40%);">+on incoming calls to FXS stations, namely the</span><br><span style="color: hsl(120, 100%, 40%);">+redirecting reason and call qualifier.</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/19601">change 19601</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/+/19601"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I24a5a4df8d030729e9608f168b0b239dbda67039 </div>
<div style="display:none"> Gerrit-Change-Number: 19601 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: N A <asterisk@phreaknet.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>