[Asterisk-cvs] libpri pri_internal.h,1.21,1.22 q931.c,1.124,1.125

mattf at lists.digium.com mattf at lists.digium.com
Thu May 19 10:01:43 CDT 2005


Update of /usr/cvsroot/libpri
In directory mongoose.digium.com:/tmp/cvs-serv13060

Modified Files:
	pri_internal.h q931.c 
Log Message:
Explicit versus implicit DS1 selection options


Index: pri_internal.h
===================================================================
RCS file: /usr/cvsroot/libpri/pri_internal.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- pri_internal.h	12 May 2005 14:48:00 -0000	1.21
+++ pri_internal.h	19 May 2005 14:06:43 -0000	1.22
@@ -158,6 +158,9 @@
 	int channelno;
 	/* An explicit DS1 (-1 means not specified) */
 	int ds1no;
+	/* Whether or not the ds1 is explicitly identified or implicit.  If implicit
+	   the bchan is on the same span as the current active dchan (NFAS) */
+	int ds1explicit;
 	/* Channel flags (0 means none retrieved) */
 	int chanflags;
 	

Index: q931.c
===================================================================
RCS file: /usr/cvsroot/libpri/q931.c,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -d -r1.124 -r1.125
--- q931.c	6 Apr 2005 19:42:41 -0000	1.124
+++ q931.c	19 May 2005 14:06:43 -0000	1.125
@@ -297,8 +297,11 @@
 	if (ie->data[0] & 0x40) {
 		/* DS1 specified -- stop here */
 		call->ds1no = ie->data[1] & 0x7f;
+		call->ds1explicit = 1;
 		pos++;
-	} 
+	} else
+		call->ds1explicit = 0;
+
 	if (pos+2 < len) {
 		/* More coming */
 		if ((ie->data[pos] & 0x0f) != 3) {
@@ -3331,7 +3334,7 @@
 		restart_ack(pri, c);
 		/* Notify user of restart event */
 		pri->ev.e = PRI_EVENT_RESTART;
-		pri->ev.restart.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.restart.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		return Q931_RES_HAVEEVENT;
 	case Q931_SETUP:
 		if (missingmand) {
@@ -3354,7 +3357,7 @@
 			break;
 		}
 		pri->ev.e = PRI_EVENT_RING;
-		pri->ev.ring.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.ring.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		pri->ev.ring.callingpres = c->callerpres;
 		pri->ev.ring.callingplan = c->callerplan;
 		pri->ev.ring.ani2 = c->ani2;
@@ -3388,7 +3391,7 @@
 		c->ourcallstate = Q931_CALL_STATE_CALL_DELIVERED;
 		c->peercallstate = Q931_CALL_STATE_CALL_RECEIVED;
 		pri->ev.e = PRI_EVENT_RINGING;
-		pri->ev.ringing.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.ringing.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		pri->ev.ringing.cref = c->cr;
 		pri->ev.ringing.call = c;
 		pri->ev.ringing.progress = c->progress;
@@ -3406,7 +3409,7 @@
 		c->ourcallstate = Q931_CALL_STATE_ACTIVE;
 		c->peercallstate = Q931_CALL_STATE_CONNECT_REQUEST;
 		pri->ev.e = PRI_EVENT_ANSWER;
-		pri->ev.answer.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.answer.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		pri->ev.answer.cref = c->cr;
 		pri->ev.answer.call = c;
 		pri->ev.answer.progress = c->progress;
@@ -3425,7 +3428,7 @@
 		pri->ev.e = PRI_EVENT_FACNAME;
 		strncpy(pri->ev.facname.callingname, c->callername, sizeof(pri->ev.facname.callingname) - 1);
 		strncpy(pri->ev.facname.callingnum, c->callernum, sizeof(pri->ev.facname.callingname) - 1);
-		pri->ev.facname.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.facname.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		pri->ev.facname.cref = c->cr;
 		pri->ev.facname.call = c;
 #if 0
@@ -3452,7 +3455,7 @@
 			q931_status(pri,c,PRI_CAUSE_WRONG_MESSAGE);
 			break;
 		}
-		pri->ev.proceeding.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.proceeding.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		if (mh->msg == Q931_CALL_PROCEEDING) {
 			pri->ev.e = PRI_EVENT_PROCEEDING;
 			c->ourcallstate = Q931_CALL_STATE_OUTGOING_CALL_PROCEEDING;
@@ -3493,7 +3496,7 @@
 			pri_error("Received unsolicited status: %s\n", pri_cause2str(c->cause));
 		/* Workaround for S-12 ver 7.3 - it responds for invalid/non-implemented IEs at SETUP with null call state */
 		if (!c->sugcallstate && (c->ourcallstate != Q931_CALL_STATE_CALL_INITIATED)) {
-			pri->ev.hangup.channel = c->channelno | (c->ds1no << 8);
+			pri->ev.hangup.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 			pri->ev.hangup.cref = c->cr;          		
 			pri->ev.hangup.cause = c->cause;      		
 			pri->ev.hangup.call = c;              		
@@ -3519,7 +3522,7 @@
 	case Q931_RELEASE_COMPLETE:
 		c->ourcallstate = Q931_CALL_STATE_NULL;
 		c->peercallstate = Q931_CALL_STATE_NULL;
-		pri->ev.hangup.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.hangup.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		pri->ev.hangup.cref = c->cr;          		
 		pri->ev.hangup.cause = c->cause;      		
 		pri->ev.hangup.call = c;              		
@@ -3551,7 +3554,7 @@
 		}
 		c->ourcallstate = Q931_CALL_STATE_NULL;
 		pri->ev.e = PRI_EVENT_HANGUP;
-		pri->ev.hangup.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.hangup.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		pri->ev.hangup.cref = c->cr;
 		pri->ev.hangup.cause = c->cause;
 		pri->ev.hangup.call = c;
@@ -3577,7 +3580,7 @@
 		c->sendhangupack = 1;
 		/* Return such an event */
 		pri->ev.e = PRI_EVENT_HANGUP_REQ;
-		pri->ev.hangup.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.hangup.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		pri->ev.hangup.cref = c->cr;
 		pri->ev.hangup.cause = c->cause;
 		pri->ev.hangup.call = c;
@@ -3591,7 +3594,7 @@
 		c->ourcallstate = Q931_CALL_STATE_NULL;
 		c->peercallstate = Q931_CALL_STATE_NULL;
 		pri->ev.e = PRI_EVENT_RESTART_ACK;
-		pri->ev.restartack.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.restartack.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		return Q931_RES_HAVEEVENT;
 	case Q931_INFORMATION:
 		/* XXX We're handling only INFORMATION messages that contain
@@ -3611,7 +3614,7 @@
 		}
 		pri->ev.e = PRI_EVENT_INFO_RECEIVED;
 		pri->ev.ring.call = c;
-		pri->ev.ring.channel = c->channelno | (c->ds1no << 8);
+		pri->ev.ring.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 		strncpy(pri->ev.ring.callednum, c->callednum, sizeof(pri->ev.ring.callednum) - 1);
 		strncpy(pri->ev.ring.callingsubaddr, c->callingsubaddr, sizeof(pri->ev.ring.callingsubaddr) - 1);
 		pri->ev.ring.complete = c->complete; 	/* this covers IE 33 (Sending Complete) */
@@ -3630,7 +3633,7 @@
 		c->ourcallstate = Q931_CALL_STATE_OVERLAP_SENDING;
 		c->peercallstate = Q931_CALL_STATE_OVERLAP_RECEIVING;
 		pri->ev.e = PRI_EVENT_SETUP_ACK;
-		pri->ev.setup_ack.channel = c->channelno;
+		pri->ev.setup_ack.channel = c->channelno | (c->ds1no << 8) | (c->ds1explicit << 16);
 
 		cur = c->apdus;
 		while (cur) {




More information about the svn-commits mailing list