Invalid PTMP redirecting signaling as TE towards NT.

* The PTMP redirection signaling (NOTIFY redirection number and
notification code, SETUP redirecting number) is also sent in PTMP/TE mode.
It should only apply in PTMP/NT mode.  The call setup proceeds but the
network (Deutsche Telekom) reacts with ugly ISDN STATUS messages.

* Don't send the redirecting number ie when PTP is also sending the
DivertingLegInformation2 facility.  The redirecting number ie is redundant
and the network (Deutsche Telekom) complains about it.

JIRA LIBPRI-53
JIRA SWP-2543


git-svn-id: https://origsvn.digium.com/svn/libpri/branches/1.4@2175 2fbb986a-6c06-0410-b554-c9c1f0a7f128
This commit is contained in:
Richard Mudgett 2010-12-21 19:46:14 +00:00
parent 1b32a0e31b
commit 261ab22dda
2 changed files with 29 additions and 3 deletions

15
pri.c
View File

@ -1159,9 +1159,18 @@ int pri_redirecting_update(struct pri *ctrl, q931_call *call, const struct pri_p
case PRI_SWITCH_EUROISDN_E1: case PRI_SWITCH_EUROISDN_E1:
case PRI_SWITCH_EUROISDN_T1: case PRI_SWITCH_EUROISDN_T1:
if (PTMP_MODE(ctrl)) { if (PTMP_MODE(ctrl)) {
/* PTMP mode */ if (NT_MODE(ctrl)) {
q931_notify_redirection(ctrl, call, PRI_NOTIFY_CALL_DIVERTING, /*
&call->redirecting.to.number); * NT PTMP mode
*
* We should not send these messages to the network if we are
* the CPE side since phones do not redirect calls within
* themselves. Well... If you consider someone else picking up
* the handset a redirection then how is the network to know?
*/
q931_notify_redirection(ctrl, call, PRI_NOTIFY_CALL_DIVERTING,
&call->redirecting.to.number);
}
break; break;
} }
/* PTP mode - same behaviour as Q.SIG */ /* PTP mode - same behaviour as Q.SIG */

17
q931.c
View File

@ -2101,6 +2101,23 @@ static int transmit_redirecting_number(int full_ie, struct pri *ctrl, q931_call
if (!call->redirecting.from.number.valid) { if (!call->redirecting.from.number.valid) {
return 0; return 0;
} }
if (BRI_TE_PTMP(ctrl)) {
/*
* We should not send this ie to the network if we are the TE
* PTMP side since phones do not redirect calls within
* themselves. Well... If you consider someone else dialing the
* handset a redirection then how is the network to know?
*/
return 0;
}
if (call->redirecting.state != Q931_REDIRECTING_STATE_IDLE) {
/*
* There was a DivertingLegInformation2 in the message so the
* Q931_REDIRECTING_NUMBER ie is redundant. Some networks
* (Deutsche Telekom) complain about it.
*/
return 0;
}
datalen = strlen(call->redirecting.from.number.str); datalen = strlen(call->redirecting.from.number.str);
ie->data[0] = call->redirecting.from.number.plan; ie->data[0] = call->redirecting.from.number.plan;