[libpri-commits] mattf: branch 1.2 r522 - in /branches/1.2: libpri.h q931.c

SVN commits to the libpri project libpri-commits at lists.digium.com
Mon Feb 18 14:28:07 CST 2008


Author: mattf
Date: Mon Feb 18 14:28:07 2008
New Revision: 522

URL: http://svn.digium.com/view/libpri?view=rev&rev=522
Log:
Revert previous commit 521

Modified:
    branches/1.2/libpri.h
    branches/1.2/q931.c

Modified: branches/1.2/libpri.h
URL: http://svn.digium.com/view/libpri/branches/1.2/libpri.h?view=diff&rev=522&r1=521&r2=522
==============================================================================
--- branches/1.2/libpri.h (original)
+++ branches/1.2/libpri.h Mon Feb 18 14:28:07 2008
@@ -205,52 +205,6 @@
 #define PRI_LAYER_1_V120_RATE_ADAPT	0x28
 #define PRI_LAYER_1_X31_RATE_ADAPT	0x29
 
-
-/* Intermediate rates for V.110 */
-#define PRI_INT_RATE_8K			1
-#define PRI_INT_RATE_16K		2
-#define PRI_INT_RATE_32K		3
-
-
-/* Rate adaption for bottom 5 bits of rateadaption */
-#define PRI_RATE_USER_RATE_MASK		0x1F
-#define PRI_RATE_ADAPT_UNSPEC		0x00
-#define PRI_RATE_ADAPT_0K6		0x01
-#define PRI_RATE_ADAPT_1K2		0x02
-#define PRI_RATE_ADAPT_2K4		0x03
-#define PRI_RATE_ADAPT_3K6		0x04
-#define PRI_RATE_ADAPT_4K8		0x05
-#define PRI_RATE_ADAPT_7K2		0x06
-#define PRI_RATE_ADAPT_8K		0x07
-#define PRI_RATE_ADAPT_9K6		0x08
-#define PRI_RATE_ADAPT_14K4		0x09
-#define PRI_RATE_ADAPT_16K		0x0A
-#define PRI_RATE_ADAPT_19K2		0x0B
-#define PRI_RATE_ADAPT_32K		0x0C
-#define PRI_RATE_ADAPT_38K4		0x0D
-#define PRI_RATE_ADAPT_48K		0x0E
-#define PRI_RATE_ADAPT_56K		0x0F
-#define PRI_RATE_ADAPT_57K6		0x12
-#define PRI_RATE_ADAPT_28K8		0x13
-#define PRI_RATE_ADAPT_24K		0x14
-#define PRI_RATE_ADAPT_0K1345		0x15
-#define PRI_RATE_ADAPT_0K1		0x16
-#define PRI_RATE_ADAPT_0K075_1K2	0x17
-#define PRI_RATE_ADAPT_1K2_0K075	0x18
-#define PRI_RATE_ADAPT_0K05		0x19
-#define PRI_RATE_ADAPT_0K075		0x1A
-#define PRI_RATE_ADAPT_0K110		0x1B
-#define PRI_RATE_ADAPT_0K150		0x1C
-#define PRI_RATE_ADAPT_0K200		0x1D
-#define PRI_RATE_ADAPT_0K300		0x1E
-#define PRI_RATE_ADAPT_12K		0x1F
-
-/* in-band negotiation flag for rateadaption bit 5 */
-#define PRI_RATE_ADAPT_NEGOTIATION_POSS	0x20
-
-/* async flag for rateadaption bit 6 */
-#define PRI_RATE_ADAPT_ASYNC		0x40
-
 /* Notifications */
 #define PRI_NOTIFY_USER_SUSPENDED		0x00	/* User suspended */
 #define PRI_NOTIFY_USER_RESUMED			0x01	/* User resumed */
@@ -556,7 +510,6 @@
 
 /* Run any pending schedule events */
 extern pri_event *pri_schedule_run(struct pri *pri);
-extern pri_event *pri_schedule_run_tv(struct pri *pri, const struct timeval *now);
 
 extern int pri_call(struct pri *pri, q931_call *c, int transmode, int channel,
    int exclusive, int nonisdn, char *caller, int callerplan, char *callername, int callerpres,

Modified: branches/1.2/q931.c
URL: http://svn.digium.com/view/libpri/branches/1.2/q931.c?view=diff&rev=522&r1=521&r2=522
==============================================================================
--- branches/1.2/q931.c (original)
+++ branches/1.2/q931.c Mon Feb 18 14:28:07 2008
@@ -528,12 +528,12 @@
 static char *l12str(int proto)
 {
 	static struct msgtype protos[] = {
-		{ PRI_LAYER_1_ITU_RATE_ADAPT, "V.110 Rate Adaption" },
+		{ PRI_LAYER_1_ITU_RATE_ADAPT, "ITU Rate Adaption" },
 		{ PRI_LAYER_1_ULAW, "u-Law" },
 		{ PRI_LAYER_1_ALAW, "A-Law" },
 		{ PRI_LAYER_1_G721, "G.721 ADPCM" },
 		{ PRI_LAYER_1_G722_G725, "G.722/G.725 7kHz Audio" },
-		{ PRI_LAYER_1_G7XX_384K, "H.223/H.245 Multimedia" },
+		{ PRI_LAYER_1_G7XX_384K, "G.7xx 384k Video" },
 		{ PRI_LAYER_1_NON_ITU_ADAPT, "Non-ITU Rate Adaption" },
 		{ PRI_LAYER_1_V120_RATE_ADAPT, "V.120 Rate Adaption" },
 		{ PRI_LAYER_1_X31_RATE_ADAPT, "X.31 Rate Adaption" },
@@ -544,7 +544,7 @@
 static char *ra2str(int proto)
 {
 	static struct msgtype protos[] = {
-		{ PRI_RATE_ADAPT_9K6, "9.6 kbit/s" },
+		{ RATE_ADAPT_56K, "from 56kbps" },
 	};
 	return code2str(proto, protos, sizeof(protos) / sizeof(protos[0]));
 }
@@ -565,143 +565,32 @@
 	return code2str(proto, protos, sizeof(protos) / sizeof(protos[0]));
 }
 
-static char *int_rate2str(int proto)
-{
-    static struct msgtype protos[] = {
-		{ PRI_INT_RATE_8K, "8 kbit/s" },
-		{ PRI_INT_RATE_16K, "16 kbit/s" },
-		{ PRI_INT_RATE_32K, "32 kbit/s" },
-    };
-    return code2str(proto, protos, sizeof(protos) / sizeof(protos[0]));
-}
-
 static FUNC_DUMP(dump_bearer_capability)
 {
 	int pos=2;
 	pri_message(pri, "%c Bearer Capability (len=%2d) [ Ext: %d  Q.931 Std: %d  Info transfer capability: %s (%d)\n",
 		prefix, len, (ie->data[0] & 0x80 ) >> 7, (ie->data[0] & 0x60) >> 5, cap2str(ie->data[0] & 0x1f), (ie->data[0] & 0x1f));
 	pri_message(pri, "%c                              Ext: %d  Trans mode/rate: %s (%d)\n", prefix, (ie->data[1] & 0x80) >> 7, mode2str(ie->data[1] & 0x7f), ie->data[1] & 0x7f);
-
-	/* octet 4.1 exists iff mode/rate is multirate */
 	if ((ie->data[1] & 0x7f) == 0x18) {
 	    pri_message(pri, "%c                              Ext: %d  Transfer rate multiplier: %d x 64\n", prefix, (ie->data[2] & 0x80) >> 7, ie->data[2] & 0x7f);
 		pos++;
 	}
-
-	/* don't count the IE num and length as part of the data */
-	len -= 2;
-	
-	/* Look for octet 5; this is identified by bits 5,6 == 01 */
-     	if (pos < len &&
-		(ie->data[pos] & 0x60) == 0x20) {
-
-		/* although the layer1 is only the bottom 5 bits of the byte,
-		   previous versions of this library passed bits 5&6 through
-		   too, so we have to do the same for binary compatability */
-		u_int8_t layer1 = ie->data[pos] & 0x7f;
-
-		pri_message(pri, "%c                                User information layer 1: %s (%d)\n",
-		            prefix, l12str(layer1), layer1);
+	/* Stop here if no more */
+	if (pos >= len - 2)
+		return;
+
+	if ((ie->data[1] & 0x7f) != TRANS_MODE_PACKET) {
+		/* Look for octets 5 and 5.a if present */
+		pri_message(pri, "%c                              Ext: %d  User information layer 1: %s (%d)\n", prefix, (ie->data[pos] >> 7), l12str(ie->data[pos] & 0x7f), ie->data[pos] & 0x7f);
+		if ((ie->data[pos] & 0x7f) == PRI_LAYER_1_ITU_RATE_ADAPT)
+			pri_message(pri, "%c                                Ext: %d  Rate adaptatation: %s (%d)\n", prefix, ie->data[pos] >> 7, ra2str(ie->data[pos] & 0x7f), ie->data[pos] & 0x7f);
 		pos++;
-		
-		/* octet 5a? */
-		if (pos < len && !(ie->data[pos-1] & 0x80)) {
-			int ra = ie->data[pos] & 0x7f;
-
-			pri_message(pri, "%c                                Async: %d, Negotiation: %d, "
-				"User rate: %s (%#x)\n", 
-				prefix,
-				ra & PRI_RATE_ADAPT_ASYNC ? 1 : 0,
-				ra & PRI_RATE_ADAPT_NEGOTIATION_POSS ? 1 : 0,
-				ra2str(ra & PRI_RATE_USER_RATE_MASK),
-				ra & PRI_RATE_USER_RATE_MASK);
-			pos++;
-		}
-		
-		/* octet 5b? */
-		if (pos < len && !(ie->data[pos-1] & 0x80)) {
-			u_int8_t data = ie->data[pos];
-			if (layer1 == PRI_LAYER_1_ITU_RATE_ADAPT) {
-				pri_message(pri, "%c                                Intermediate rate: %s (%d), "
-					"NIC on Tx: %d, NIC on Rx: %d, "
-					"Flow control on Tx: %d, "
-					"Flow control on Rx: %d\n",
-					prefix, int_rate2str((data & 0x60)>>5),
-					(data & 0x60)>>5,
-					(data & 0x10)?1:0,
-					(data & 0x08)?1:0,
-					(data & 0x04)?1:0,
-					(data & 0x02)?1:0);
-			} else if (layer1 == PRI_LAYER_1_V120_RATE_ADAPT) {
-				pri_message(pri, "%c                                Hdr: %d, Multiframe: %d, Mode: %d, "
-					"LLI negot: %d, Assignor: %d, "
-					"In-band neg: %d\n", prefix,
-					(data & 0x40)?1:0,
-					(data & 0x20)?1:0,
-					(data & 0x10)?1:0,
-					(data & 0x08)?1:0,
-					(data & 0x04)?1:0,
-					(data & 0x02)?1:0);
-			} else {
-				pri_message(pri, "%c                                Unknown octet 5b: 0x%x\n", data );
-			}
-			pos++;
-		}
-
-		/* octet 5c? */
-		if (pos < len && !(ie->data[pos-1] & 0x80)) {
-			u_int8_t data = ie->data[pos];
-			const char *stop_bits[] = {"?","1","1.5","2"};
-			const char *data_bits[] = {"?","5","7","8"};
-			const char *parity[] = {"Odd","?","Even","None",
-				       "zero","one","?","?"};
-	
-			pri_message(pri, "%c                                Stop bits: %s, data bits: %s, "
-			    "parity: %s\n", prefix,
-			    stop_bits[(data & 0x60) >> 5],
-			    data_bits[(data & 0x18) >> 3],
-			    parity[(data & 0x7)]);
-	
-			pos++;
-		}
-	
-			/* octet 5d? */
-		if (pos < len && !(ie->data[pos-1] & 0x80)) {
-			u_int8_t data = ie->data[pos];
-			pri_message(pri, "%c                                Duplex mode: %d, modem type: %d\n",
-				prefix, (data & 0x40) ? 1 : 0,data & 0x3F);
- 			pos++;
-		}
- 	}
-
-
-	/* Look for octet 6; this is identified by bits 5,6 == 10 */
-	if (pos < len && 
-		(ie->data[pos] & 0x60) == 0x40) {
-		pri_message(pri, "%c                                User information layer 2: %s (%d)\n",
-			prefix, l22str(ie->data[pos] & 0x1f),
-			ie->data[pos] & 0x1f);
+	} else {
+		/* Look for octets 6 and 7 but not 5 and 5.a */
+		pri_message(pri, "%c                              Ext: %d  User information layer 2: %s (%d)\n", prefix, ie->data[pos] >> 7, l22str(ie->data[pos] & 0x7f), ie->data[pos] & 0x7f);
 		pos++;
-	}
-
-	/* Look for octet 7; this is identified by bits 5,6 == 11 */
-	if (pos < len && (ie->data[pos] & 0x60) == 0x60) {
-		pri_message(pri, "%c                                User information layer 3: %s (%d)\n",
-			prefix, l32str(ie->data[pos] & 0x1f),
-			ie->data[pos] & 0x1f);
+		pri_message(pri, "%c                              Ext: %d  User information layer 3: %s (%d)\n", prefix, ie->data[pos] >> 7, l32str(ie->data[pos] & 0x7f), ie->data[pos] & 0x7f);
 		pos++;
-
-		/* octets 7a and 7b? */
-		if (pos + 1 < len && !(ie->data[pos-1] & 0x80) &&
-			!(ie->data[pos] & 0x80)) {
-			unsigned int proto;
-			proto = ((ie->data[pos] & 0xF) << 4 ) | 
-			         (ie->data[pos+1] & 0xF);
-
-			pri_message(pri, "%c                                Network layer: 0x%x\n", prefix,
-			            proto );
-			pos += 2;
-		}
 	}
 }
 
@@ -714,44 +603,22 @@
 	}
 	call->transcapability = ie->data[0] & 0x1f;
 	call->transmoderate = ie->data[1] & 0x7f;
-   
-	/* octet 4.1 exists iff mode/rate is multirate */
-	if (call->transmoderate == TRANS_MODE_MULTIRATE) {
-		call->transmultiple = ie->data[pos++] & 0x7f;
-	}
-
-	/* Look for octet 5; this is identified by bits 5,6 == 01 */
-	if (pos < len && 
-	     (ie->data[pos] & 0x60) == 0x20 ) {
-		/* although the layer1 is only the bottom 5 bits of the byte,
-		   previous versions of this library passed bits 5&6 through
-		   too, so we have to do the same for binary compatability */
+	if (call->transmoderate == PRI_TRANS_CAP_AUDIO_4ESS)
+		call->transmoderate = PRI_TRANS_CAP_3_1K_AUDIO;
+
+	if (pos >= len - 2)
+		return 0;
+
+	if (call->transmoderate != TRANS_MODE_PACKET) {
 		call->userl1 = ie->data[pos] & 0x7f;
+		if (call->userl1 == PRI_LAYER_1_ITU_RATE_ADAPT) {
+			call->rateadaption = ie->data[++pos] & 0x7f;
+		}
 		pos++;
-		
-		/* octet 5a? */
-		if (pos < len && !(ie->data[pos-1] & 0x80)) {
-			call->rateadaption = ie->data[pos] & 0x7f;
-			pos++;
- 		}
-		
-		/* octets 5b through 5d? */
-		while (pos < len && !(ie->data[pos-1] & 0x80)) {
-			pos++;
-		}
-		
-	}
-
-	/* Look for octet 6; this is identified by bits 5,6 == 10 */
-     	if (pos < len && 
-             (ie->data[pos] & 0x60) == 0x40) {
-		call->userl2 = ie->data[pos++] & 0x1f;
-	}
-
-	/* Look for octet 7; this is identified by bits 5,6 == 11 */
-     	if (pos < len && 
-             (ie->data[pos] & 0x60) == 0x60) {
-		call->userl3 = ie->data[pos++] & 0x1f;
+	} else {
+		/* Get 6 and 7 */
+		call->userl2 = ie->data[pos++] & 0x7f;
+		call->userl3 = ie->data[pos] & 0x7f;
 	}
 	return 0;
 }
@@ -759,7 +626,6 @@
 static FUNC_SEND(transmit_bearer_capability)
 {
 	int tc;
-	int pos;
 
 	/* We are ready to transmit single IE only */	
 	if(order > 1)
@@ -790,39 +656,22 @@
 		/* Apparently EuroISDN switches don't seem to like user layer 2/3 */
 		return 4;
 	}
-
-	pos = 2;
-	/* octet 4.1 exists iff mode/rate is multirate */
-	if (call->transmoderate == TRANS_MODE_MULTIRATE ) {
-		ie->data[pos++] = call->transmultiple | 0x80;
-	}
-
 	if (call->transmoderate != TRANS_MODE_PACKET) {
 		/* If you have an AT&T 4ESS, you don't send any more info */
 		if ((pri->switchtype != PRI_SWITCH_ATT4ESS) && (call->userl1 > -1)) {
-			ie->data[pos++] = call->userl1 | 0x80; /* XXX Ext bit? XXX */
+			ie->data[2] = call->userl1 | 0x80; /* XXX Ext bit? XXX */
 			if (call->userl1 == PRI_LAYER_1_ITU_RATE_ADAPT) {
-				ie->data[pos++] = call->rateadaption | 0x80;
+				ie->data[3] = call->rateadaption | 0x80;
+				return 6;
 			}
-			return pos + 2;
-		}
-
-		ie->data[pos++] = 0xa0 | (call->userl1 & 0x1f);
-
-		if (call->userl1 == PRI_LAYER_1_ITU_RATE_ADAPT) {
-		    ie->data[pos-1] &= ~0x80; /* clear EXT bit in octet 5 */
-		    ie->data[pos++] = call->rateadaption | 0x80;
-		}
-	}
-	
-	
-	if (call->userl2 != -1)
-		ie->data[pos++] = 0xc0 | (call->userl2 & 0x1f);
-
-	if (call->userl3 != -1)
-		ie->data[pos++] = 0xe0 | (call->userl3 & 0x1f);
-
-	return pos + 2;
+			return 5;
+		} else
+			return 4;
+	} else {
+		ie->data[2] = 0x80 | call->userl2;
+		ie->data[3] = 0x80 | call->userl3;
+		return 6;
+	}
 }
 
 char *pri_plan2str(int plan)
@@ -2899,8 +2748,6 @@
 	if (!req->userl1)
 		req->userl1 = PRI_LAYER_1_ULAW;
 	c->userl1 = req->userl1;
-	c->userl2 = -1;
-	c->userl3 = -1;
 	c->ds1no = (req->channel & 0xff00) >> 8;
 	c->ds1explicit = (req->channel & 0x10000) >> 16;
 	req->channel &= 0xff;




More information about the libpri-commits mailing list