[thirdparty-commits] rmudgett: mISDNuser/trunk r181 - in /mISDNuser/trunk/i4lnet: net_l3.c net_l3.h

SVN commits to the Digium third-party software repository thirdparty-commits at lists.digium.com
Wed Sep 15 15:30:55 CDT 2010


Author: rmudgett
Date: Wed Sep 15 15:30:51 2010
New Revision: 181

URL: http://svnview.digium.com/svn/thirdparty?view=rev&rev=181
Log:
The handling of call transfer signaling for mISDN PTMP is not fully implemented.

The handling of call transfer signaling for mISDN PTMP is not fully
implemented.  The signaling of number updates with ISDN/DSS1 ECT
supplementary services (ETS 300 369-1) comes along with a notification
indicator IE and redirection number IE for PTMP.  The implementation in
the current Asterisk mISDN channel unfortunately can handle these
information elements only in a NOTIFY message.  These information elements
are also signaled in a FACILTY message with a RequestSubaddress facility,
when the subscriber is already in the active state (see 9.2.4 and 9.2.5 of
ETS 300 369-1).

**********

abe_2526_ast.patch

* Added support to handle the notification indicator IE and redirection
number IE with the RequestSubaddress facility.

* Made misdn_update_connected_line() send a NOTIFY message if Asterisk
originated the call and it is not connected yet.

* Made misdn_update_connected_line() send a FACILITY message if the call
is already connected.

This patch requires the presence of the associated mISDN patches to
compile.  I had to enhance mISDN to allow the notification indicator IE
and the redirection number IE to be used with a FACILITY message.  Earlier
versions of the Digium enhanced mISDN are no longer going to work.

**********

abe_2526_misdn.patch

* Made an incoming FACILITY message allow the presence of the notification
indicator IE and the redirection number IE.

**********

abe_2526_misdnuser_v3.patch

* Added support to send and receive a FACILITY message with the
notification indicator IE and the redirection number IE.

* Added the ability to send a NOTIFY message in PTMP/NT mode to all
responding subcalls in Q.931 states 6, 7, 8, 9, and 25.

**********

Patches:
      abe_2526_ast.patch uploaded by rmudgett (license 664)
      abe_2526_misdn.patch uploaded by rmudgett (license 664)
      abe_2526_misdnuser_v3.patch uploaded by rmudgett (license 664)
Tested by: rmudgett and reporter

JIRA SWP-2146
JIRA ABE-2526

Modified:
    mISDNuser/trunk/i4lnet/net_l3.c
    mISDNuser/trunk/i4lnet/net_l3.h

Modified: mISDNuser/trunk/i4lnet/net_l3.c
URL: http://svnview.digium.com/svn/thirdparty/mISDNuser/trunk/i4lnet/net_l3.c?view=diff&rev=181&r1=180&r2=181
==============================================================================
--- mISDNuser/trunk/i4lnet/net_l3.c (original)
+++ mISDNuser/trunk/i4lnet/net_l3.c Wed Sep 15 15:30:51 2010
@@ -655,12 +655,16 @@
 	fac = (FACILITY_t *)(umsg->data + mISDNUSER_HEAD_SIZE);
 	fac->FACILITY =
 		find_and_copy_ie(msg->data, msg->len, IE_FACILITY, 0, umsg);
+	fac->NOTIFY =
+		find_and_copy_ie(msg->data, msg->len, IE_NOTIFY, 0, umsg);
 	fac->DISPLAY =
 		find_and_copy_ie(msg->data, msg->len, IE_DISPLAY, 0, umsg);
 	fac->CALLED_PN =
 		find_and_copy_ie(msg->data, msg->len, IE_CALLED_PN, 0, umsg);
 	fac->CALLED_SUB =
 		find_and_copy_ie(msg->data, msg->len, IE_CALLED_SUB, 0, umsg);
+	fac->REDIR_DN =
+		find_and_copy_ie(msg->data, msg->len, IE_REDIR_DN, 0, umsg);
 	if (mISDN_l3up(pc, umsg))
 		free_msg(umsg);
 }
@@ -1958,12 +1962,16 @@
 			AddvarIE(pc, IE_FACILITY, fac->FACILITY);
 		else
 			return;
+		if (fac->NOTIFY)
+			AddvarIE(pc, IE_NOTIFY, fac->NOTIFY);
 		if (fac->DISPLAY)
 			AddvarIE(pc, IE_DISPLAY, fac->DISPLAY);
 		if (fac->CALLED_PN)
 			AddvarIE(pc, IE_CALLED_PN, fac->CALLED_PN);
 		if (fac->CALLED_SUB)
 			AddvarIE(pc, IE_CALLED_SUB, fac->CALLED_SUB);
+		if (fac->REDIR_DN)
+			AddvarIE(pc, IE_REDIR_DN, fac->REDIR_DN);
 		SendMsg(pc, -1);
 	}
 }
@@ -2093,6 +2101,27 @@
 		if (noti->REDIR_DN)
 			AddvarIE(pc, IE_REDIR_DN, noti->REDIR_DN);
 		SendMsg(pc, -1);
+	}
+}
+
+static void l3dss1_notify_req_out(layer3_proc_t *pc, int pr, void *arg)
+{
+	layer3_proc_t *child;
+	layer3_proc_t *next_child;
+	unsigned long valid_states;
+
+	/* Use the master record */
+	while (pc->master) {
+		pc = pc->master;
+	}
+
+	/* Send to all child processes that are in an acceptable state. */
+	valid_states = SBIT(6) | SBIT(7) | SBIT(8) | SBIT(9) | SBIT(25);
+	for (child = pc->child; child; child = next_child) {
+		next_child = child->next;
+		if ((1UL << child->state) & valid_states) {
+			l3dss1_notify_req(child, pr, arg);
+		}
 	}
 }
 
@@ -2598,7 +2627,7 @@
 	 CC_CONNECT | RESPONSE, l3dss1_connect_res},
 	{SBIT(1) | SBIT(2) | SBIT(3) | SBIT(4) | SBIT(10),
 	 CC_DISCONNECT | REQUEST, l3dss1_disconnect_req},
-	{ SBIT(2) | SBIT(6) | SBIT(7) | SBIT(8) | SBIT(9) | SBIT(25),
+	{ SBIT(6) | SBIT(7) | SBIT(8) | SBIT(9) | SBIT(25),
 	 CC_DISCONNECT | REQUEST, l3dss1_disconnect_req_out},
 	{ SBIT(2) | SBIT(11)
 #warning bitte beachte folgendes:
@@ -2640,8 +2669,10 @@
 	 CC_INFORMATION | REQUEST, l3dss1_information_req},
 	{SBIT(2) | SBIT(3) | SBIT(4),
 	 CC_PROGRESS | REQUEST, l3dss1_progress_req},
-	{SBIT(3) | SBIT(4) | SBIT(8) | SBIT(9) | SBIT(10) | SBIT(15) | SBIT(17),
+	{SBIT(1) | SBIT(2) | SBIT(3) | SBIT(4) | SBIT(10) | SBIT(15) | SBIT(17),
 	 CC_NOTIFY | REQUEST, l3dss1_notify_req},
+	{SBIT(6) | SBIT(7) | SBIT(8) | SBIT(9) | SBIT(25),
+	 CC_NOTIFY | REQUEST, l3dss1_notify_req_out},
 	{SBIT(2),
 	 CC_T302, l3dss1_t302},
 	{SBIT(12),

Modified: mISDNuser/trunk/i4lnet/net_l3.h
URL: http://svnview.digium.com/svn/thirdparty/mISDNuser/trunk/i4lnet/net_l3.h?view=diff&rev=181&r1=180&r2=181
==============================================================================
--- mISDNuser/trunk/i4lnet/net_l3.h (original)
+++ mISDNuser/trunk/i4lnet/net_l3.h Wed Sep 15 15:30:51 2010
@@ -389,6 +389,8 @@
 	u_char *DISPLAY;
 	u_char *CALLED_PN;
 	u_char *CALLED_SUB;
+	u_char *NOTIFY;
+	u_char *REDIR_DN;
 } FACILITY_t;
 
 typedef struct _REGISTER {




More information about the thirdparty-commits mailing list