Support setting and receiving Reverse Charging Indication over ISDN PRI.
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: http://svn.digium.com/svn/asterisk/trunk@204749 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
63c792a413
commit
0071975778
5
CHANGES
5
CHANGES
|
@ -47,6 +47,11 @@ IAX2 Changes
|
|||
* 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
|
||||
|
|
|
@ -5403,7 +5403,7 @@ static int dahdi_func_read(struct ast_channel *chan, const char *function, char
|
|||
{
|
||||
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);
|
||||
|
@ -5412,8 +5412,19 @@ static int dahdi_func_read(struct ast_channel *chan, const char *function, char
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1163,7 +1163,8 @@ static void *pri_dchannel(void *vpri)
|
|||
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);
|
||||
|
||||
|
@ -1208,7 +1209,8 @@ static void *pri_dchannel(void *vpri)
|
|||
|
||||
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);
|
||||
|
||||
|
@ -1888,6 +1890,11 @@ int sig_pri_call(struct sig_pri_chan *p, struct ast_channel *ast, char *rdest, i
|
|||
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",
|
||||
|
|
|
@ -162,6 +162,7 @@ struct sig_pri_chan {
|
|||
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 {
|
||||
|
|
|
@ -77,6 +77,11 @@
|
|||
;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
|
||||
|
|
|
@ -205,6 +205,16 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||
<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>
|
||||
|
|
Reference in New Issue