aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2010-11-29 20:46:03 +0000
committerrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2010-11-29 20:46:03 +0000
commitb04d216c4c01042897c644a8be6b761d5e673963 (patch)
tree4f2ff313e2c87690cd1e5ff2d288f5140ea6be0f /channels
parentfffc98c3cad66cdf2acd8a1755a84d1eac52376b (diff)
Merged revision 296575 from
https://origsvn.digium.com/svn/asterisk/be/branches/C.3-bier .......... r296575 | rmudgett | 2010-11-29 14:27:37 -0600 (Mon, 29 Nov 2010) | 13 lines Invalid mISDN PTMP redirecting signaling as TE towards NT. The mISDN PTMP redirection signaling (NOTIFY redirecting 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. Also 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. Patches: abe_2651_v4.patch uploaded by rmudgett (license 664) JIRA ABE-2651 JIRA SWP-2537 .......... git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.8@296582 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_misdn.c9
-rw-r--r--channels/misdn/isdn_msg_parser.c20
2 files changed, 27 insertions, 2 deletions
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index fe8033383..b4bc94257 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -6432,6 +6432,15 @@ static void misdn_update_redirecting(struct ast_channel *ast, struct misdn_bchan
is_ptmp = !misdn_lib_is_ptp(bc->port);
if (is_ptmp) {
+ /*
+ * 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?
+ */
+ if (!misdn_lib_port_is_nt(bc->port)) {
+ return;
+ }
/* Send NOTIFY(call-is-diverting, redirecting.to data) */
bc->redirecting.to_changed = 1;
bc->notify_description_code = mISDN_NOTIFY_CODE_CALL_IS_DIVERTING;
diff --git a/channels/misdn/isdn_msg_parser.c b/channels/misdn/isdn_msg_parser.c
index 3c7a8f33a..ad86f981a 100644
--- a/channels/misdn/isdn_msg_parser.c
+++ b/channels/misdn/isdn_msg_parser.c
@@ -500,6 +500,8 @@ static msg_t *build_setup (struct isdn_msg msgs[], struct misdn_bchannel *bc, in
int HEADER_LEN = nt?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN;
SETUP_t *setup;
msg_t *msg =(msg_t*)create_l3msg(CC_SETUP | REQUEST, MT_SETUP, bc?bc->l3_id:-1, sizeof(SETUP_t) ,nt);
+ int is_ptp;
+ enum FacFunction fac_type;
setup=(SETUP_t*)((msg->data+HEADER_LEN));
@@ -508,7 +510,8 @@ static msg_t *build_setup (struct isdn_msg msgs[], struct misdn_bchannel *bc, in
else
enc_ie_channel_id(&setup->CHANNEL_ID, msg, 1, bc->channel, nt,bc);
- if (bc->fac_out.Function != Fac_None) {
+ fac_type = bc->fac_out.Function;
+ if (fac_type != Fac_None) {
enc_ie_facility(&setup->FACILITY, msg, &bc->fac_out, nt);
}
@@ -522,7 +525,20 @@ static msg_t *build_setup (struct isdn_msg msgs[], struct misdn_bchannel *bc, in
switch (bc->outgoing_colp) {
case 0:/* pass */
case 1:/* restricted */
- if (bc->redirecting.from.number[0]) {
+ is_ptp = misdn_lib_is_ptp(bc->port);
+ if (bc->redirecting.from.number[0]
+ && ((!is_ptp && nt)
+ || (is_ptp
+#if defined(AST_MISDN_ENHANCEMENTS)
+ /*
+ * There is no need to send out this ie when we are also sending
+ * a Fac_DivertingLegInformation2 as well. The
+ * Fac_DivertingLegInformation2 supercedes the information in
+ * this ie.
+ */
+ && fac_type != Fac_DivertingLegInformation2
+#endif /* defined(AST_MISDN_ENHANCEMENTS) */
+ ))) {
#if 1
/* ETSI and Q.952 do not define the screening field */
enc_ie_redir_nr(&setup->REDIR_NR, msg, bc->redirecting.from.number_type,