[libss7-commits] mattf: trunk r129 - in /trunk: isup.c isup.h libss7.h

SVN commits to the libss7 project libss7-commits at lists.digium.com
Fri Oct 26 19:36:39 CDT 2007


Author: mattf
Date: Fri Oct 26 19:36:39 2007
New Revision: 129

URL: http://svn.digium.com/view/libss7?view=rev&rev=129
Log:
Add circuit group query support

Modified:
    trunk/isup.c
    trunk/isup.h
    trunk/libss7.h

Modified: trunk/isup.c
URL: http://svn.digium.com/view/libss7/trunk/isup.c?view=diff&rev=129&r1=128&r2=129
==============================================================================
--- trunk/isup.c (original)
+++ trunk/isup.c Fri Oct 26 19:36:39 2007
@@ -64,6 +64,8 @@
 static int cpg_params[] = { ISUP_PARM_EVENT_INFO, -1};
 
 static int cicgroup_params[] = { ISUP_PARM_CIRCUIT_GROUP_SUPERVISION_IND, ISUP_PARM_RANGE_AND_STATUS, -1};
+
+static int cqr_params[] = { ISUP_PARM_RANGE_AND_STATUS, ISUP_PARM_CIRCUIT_STATE_IND, -1};
 
 static int empty_params[] = { -1};
 
@@ -96,6 +98,8 @@
 	{ISUP_RSC, 0, 0, 0, empty_params},
 	{ISUP_CPG, 1, 0, 1, cpg_params},
 	{ISUP_UCIC, 0, 0, 0, empty_params},
+	{ISUP_CQM, 0, 1, 0, greset_params},
+	{ISUP_CQR, 0, 2, 0, cqr_params},
 };
 
 static int isup_send_message(struct ss7 *ss7, struct isup_call *c, int messagetype, int parms[]);
@@ -710,6 +714,10 @@
 	c->range = parm[0];
 	numcics = c->range + 1;
 
+	/* No status for these messages */
+	if ((messagetype == ISUP_CQR) || (messagetype == ISUP_CQM) || (messagetype == ISUP_GRS))
+		return len;
+
 	for (i = 0; i < numcics; i++) {
 		if (parm[1 + (i/8)] & (1 << (i%8)))
 			c->status[i] = 1;
@@ -727,7 +735,8 @@
 
 	parm[0] = c->range & 0xff;
 
-	if (messagetype == ISUP_GRS)
+	/* No status for these messages */
+	if ((messagetype == ISUP_CQR) || (messagetype == ISUP_CQM) || (messagetype == ISUP_GRS))
 		return 1;
 
 	statuslen = (numcics / 8) + !!(numcics % 8);
@@ -1431,6 +1440,94 @@
 {
 	ss7_message(ss7, "\t\t\tDelay: %dms\n", (unsigned short)(((parm[0] & 0xff) << 8) | (parm[0] & 0xff)));
 	return len;
+}
+
+static FUNC_DUMP(circuit_state_ind_dump)
+{
+	unsigned char dcbits, babits, febits;
+	char *ba_str, *dc_str, *fe_str;
+	int i;
+	
+	for (i = 0; i < len; i++) {
+		babits = parm[i] & 0x3;
+		dcbits = (parm[i] >> 2) & 0x3;
+		febits = (parm[i] >> 4) & 0x3;
+
+		if (dcbits == 0) {
+			switch (babits) {
+				case 0:
+					ba_str = "transient";
+					break;
+				case 1:
+				case 2:
+					ba_str = "spare";
+					break;
+				case 3:
+					ba_str = "unequipped";
+					break;
+			}
+		} else {
+			switch (babits) {
+				case 0:
+					ba_str = "no blocking (active)";
+					break;
+				case 1:
+					ba_str = "locally blocked";
+					break;
+				case 2:
+					ba_str = "remotely blocked";
+					break;
+				case 3:
+					ba_str = "locally and remotely blocked";
+					break;
+			}
+
+			switch (dcbits) {
+				case 1:
+					dc_str = "circuit incoming busy";
+					break;
+				case 2:
+					dc_str = "circuit outgoing busy";
+					break;
+				case 3:
+					dc_str = "idle";
+					break;
+			}
+
+			switch (febits) {
+				case 0:
+					fe_str = "no blocking (active)";
+					break;
+				case 1:
+					fe_str = "locally blocked";
+					break;
+				case 2:
+					fe_str = "remotely blocked";
+					break;
+				case 3:
+					fe_str = "locally and remotely blocked";
+					break;
+			}
+
+		}
+
+		ss7_message(ss7, "\t\t\tMaintenance blocking state: %s (%d)\n", ba_str, babits);
+		if (!dcbits)
+			continue;
+		ss7_message(ss7, "\t\t\tCall processing state: %s (%d)\n", dc_str, dcbits);
+		ss7_message(ss7, "\t\t\tHardware blocking state: %s (%d)\n", fe_str, febits);
+	}
+	return len;
+}
+
+static FUNC_SEND(circuit_state_ind_transmit)
+{
+	int numcics = c->range + 1, i;
+
+	for (i = 0; i < numcics; i++)
+		parm[i] = c->status[i];
+
+	return numcics;
 }
 
 static struct parm_func parms[] = {
@@ -1472,6 +1569,7 @@
 	{ISUP_PARM_JIP, "Jurisdiction Information Parameter", jip_dump, jip_receive, NULL},
 	{ISUP_PARM_ECHO_CONTROL_INFO, "Echo Control Information", echo_control_info_dump, NULL, NULL},
 	{ISUP_PARM_PARAMETER_COMPAT_INFO, "Parameter Compatibility Information", parameter_compat_info_dump, NULL, NULL},
+	{ISUP_PARM_CIRCUIT_STATE_IND, "Circuit State Indicator", circuit_state_ind_dump, NULL, circuit_state_ind_transmit},
 };
 
 static char * param2str(int parm)
@@ -2128,6 +2226,12 @@
 			e->iam.charge_num_plan = c->charge_num_plan;
 			e->iam.oli_ani2 = c->oli_ani2;
 			e->iam.call = c;
+			return 0;
+		case ISUP_CQM:
+			e->e = ISUP_EVENT_CQM;
+			e->cqm.startcic = cic;
+			e->cqm.endcic = cic + c->range;
+			isup_free_call(ss7, c); /* Won't need this again */
 			return 0;
 		case ISUP_GRS:
 			e->e = ISUP_EVENT_GRS;
@@ -2268,6 +2372,24 @@
 	return isup_send_message(ss7, &call, messagetype, cicgroup_params);
 }
 
+int isup_cqr(struct ss7 *ss7, int begincic, int endcic, unsigned int dpc, unsigned char status[])
+{
+	struct isup_call call;
+	int i;
+
+	for (i = 0; (i + begincic) <= endcic; i++)
+		call.status[i] = status[i];
+
+	call.cic = begincic;
+	call.range = endcic - begincic;
+	call.dpc = dpc;
+
+	if (call.range > 31)
+		return -1;
+
+	return isup_send_message(ss7, &call, ISUP_CQR, cqr_params);
+}
+
 int isup_grs(struct ss7 *ss7, int begincic, int endcic, unsigned int dpc)
 {
 	struct isup_call call;
@@ -2467,4 +2589,5 @@
 
 	return isup_send_message_ciconly(ss7, ISUP_UBA, cic, dpc);
 }
+
 /* Janelle is the bomb (Again) */

Modified: trunk/isup.h
URL: http://svn.digium.com/view/libss7/trunk/isup.h?view=diff&rev=129&r1=128&r2=129
==============================================================================
--- trunk/isup.h (original)
+++ trunk/isup.h Fri Oct 26 19:36:39 2007
@@ -108,6 +108,7 @@
 #define ISUP_PARM_JIP 0xc4
 #define ISUP_PARM_ECHO_CONTROL_INFO 0x37
 #define ISUP_PARM_PARAMETER_COMPAT_INFO 0x39
+#define ISUP_PARM_CIRCUIT_STATE_IND 0x26
 
 
 

Modified: trunk/libss7.h
URL: http://svn.digium.com/view/libss7/trunk/libss7.h?view=diff&rev=129&r1=128&r2=129
==============================================================================
--- trunk/libss7.h (original)
+++ trunk/libss7.h Fri Oct 26 19:36:39 2007
@@ -42,6 +42,7 @@
 #define ISUP_EVENT_CPG		22
 #define ISUP_EVENT_UCIC		23
 #define ISUP_EVENT_LPA 		24
+#define ISUP_EVENT_CQM 		25
 
 /* Different SS7 types */
 #define SS7_ITU		(1 << 0)
@@ -179,6 +180,7 @@
 	ss7_event_generic gen;
 	ss7_event_iam iam;
 	ss7_event_cicrange grs;
+	ss7_event_cicrange cqm;
 	ss7_event_cicrange gra;
 	ss7_event_cicrange cgb;
 	ss7_event_cicrange cgu;
@@ -286,6 +288,9 @@
 
 int isup_rsc(struct ss7 *ss7, int cic, unsigned int dpc);
 
+int isup_cqr(struct ss7 *ss7, int begincic, int endcic, unsigned int dpc, unsigned char status[]);
+
+/* Various call related sets */
 void isup_init_call(struct ss7 *ss7, struct isup_call *c, int cic, unsigned int dpc);
 
 void isup_set_call_dpc(struct isup_call *c, unsigned int dpc);
@@ -297,5 +302,6 @@
 void isup_set_charge(struct isup_call *c, const char *charge, unsigned char charge_nai, unsigned char charge_num_plan);
 
 void isup_set_oli(struct isup_call *c, int oli_ani2);
+/* End of call related sets */
 
 #endif /* _LIBSS7_H */




More information about the libss7-commits mailing list