This is a continuation of revision 885 to LibPRI (Capture and expose the Reverse
Charging Indication IE on ISDN PRI) which added the ability to get/set Reverse
Charging Indication in LibPRI. This patch adds the ability to specify RCI on
the outbound leg of a PRI call from within Asterisk, by prefixing the dialed
number with a capital 'C' like:
...,Dial(DAHDI/g1/
C4445556666)
And to read it off an inbound channel:
exten => s,1,Set(RCI=${CHANNEL(reversecharge)})
Thanks again to rmudgett for the thorough review.
(closes issue #13760)
Reported by: mrgabu
Review: https://reviewboard.asterisk.org/r/303/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@204749
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
* Added rtsavesysname option into iax.conf to allow the systname to be saved
on realtime updates.
+DAHDI Changes
+-------------
+ * Added Reverse Charging Indication receipt & transmission (requires latest
+ LibPRI).
+
Applications
------------
* Added progress option to the app_dial D() option. When progress DTMF is
{
struct dahdi_pvt *p = chan->tech_pvt;
int res = 0;
-
+
if (!strcasecmp(data, "rxgain")) {
ast_mutex_lock(&p->lock);
snprintf(buf, len, "%f", p->rxgain);
ast_mutex_lock(&p->lock);
snprintf(buf, len, "%f", p->txgain);
ast_mutex_unlock(&p->lock);
+#ifdef HAVE_PRI
+ } else if (!strcasecmp(data, "reversecharge")) {
+ ast_mutex_lock(&p->lock);
+ if (p->sig == SIG_PRI || p->sig == SIG_BRI || p->sig == SIG_BRI_PTMP) {
+ snprintf(buf, len, "%d", ((struct sig_pri_chan *) p->sig_pvt)->reverse_charging_indication);
+ } else {
+ *buf = '\0';
+ res = -1;
+ }
+ ast_mutex_unlock(&p->lock);
+#endif
} else {
- ast_copy_string(buf, "", len);
+ *buf = '\0';
res = -1;
}
pbx_builtin_setvar_helper(c, "CALLEDTON", calledtonstr);
if (e->ring.redirectingreason >= 0)
pbx_builtin_setvar_helper(c, "PRIREDIRECTREASON", redirectingreason2str(e->ring.redirectingreason));
-
+ pri->pvts[chanpos]->reverse_charging_indication = e->ring.reversecharge;
+
sig_pri_lock_private(pri->pvts[chanpos]);
ast_mutex_lock(&pri->lock);
if (e->ring.redirectingreason >= 0)
pbx_builtin_setvar_helper(c, "PRIREDIRECTREASON", redirectingreason2str(e->ring.redirectingreason));
-
+ pri->pvts[chanpos]->reverse_charging_indication = e->ring.reversecharge;
+
snprintf(calledtonstr, sizeof(calledtonstr)-1, "%d", e->ring.calledplan);
pbx_builtin_setvar_helper(c, "CALLEDTON", calledtonstr);
case 'r':
pridialplan = PRI_NPI_RESERVED | (pridialplan & 0xf0);
break;
+#if defined(PRI_REVERSECHARGE_REQUESTED)
+ case 'C':
+ pri_sr_set_reversecharge(sr, PRI_REVERSECHARGE_REQUESTED);
+ break;
+#endif
default:
if (isalpha(c[p->stripmsd])) {
ast_log(LOG_WARNING, "Unrecognized pridialplan %s modifier: %c\n",
struct sig_pri_callback *calls;
void *chan_pvt;
ast_mutex_t service_lock; /*!< Mutex for service messages */
+ int reverse_charging_indication;
};
struct sig_pri_pri {
;service_message_support=yes
; Enable service message support for channel. Must be set after switchtype.
;
+; PRI Reverse Charging Indication: Indicate to the called party that the
+; call will be reverse charged. To enable, prefix the dialed number with one
+; of the following letters:
+; C - Reverse Charge Indication Requested
+;
; PRI Dialplan: The ISDN-level Type Of Number (TON) or numbering plan, used for
; the dialed number. For most installations, leaving this as 'unknown' (the
; default) works in the most cases. In some very unusual circumstances, you
<para>R/O Get the peer's username.</para>
</enum>
</enumlist>
+ <para><emphasis>chan_dahdi</emphasis> provides the following additional options:</para>
+ <enumlist>
+ <enum name="reversecharge">
+ <para>R/O Reverse Charging Indication, one of:</para>
+ <enumlist>
+ <enum name="-1 - None" />
+ <enum name="1 - Reverse Charging Requested" />
+ </enumlist>
+ </enum>
+ </enumlist>
</parameter>
</syntax>
<description>