⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 q931.c

📁 底层驱动开发
💻 C
📖 第 1 页 / 共 3 页
字号:
	{CAUSE_CallRejected, "Call Rejected"},	{CAUSE_NetworkCongestion, "Network Congestion"},	{CAUSE_RemoteUser, "Remote User initiated"},	{CAUSE_LocalProcErr, "Local Procedure Error"},	{CAUSE_RemoteProcErr, "Remote Procedure Error"},	{CAUSE_RemoteUserSuspend, "Remote User Suspend"},	{CAUSE_RemoteUserResumed, "Remote User Resumed"},	{CAUSE_UserInfoDiscarded, "User Info Discarded"}};static int cause_1tr6_len = (sizeof(cause_1tr6) / sizeof(struct MessageType));static intprcause_1tr6(char *dest, u_char * p){	char *dp = dest;	int i, cause;	p++;	if (0 == *p) {		dp += sprintf(dp, "   OK (cause length=0)\n");		return (dp - dest);	} else if (*p > 1) {		dp += sprintf(dp, "    coding ");		dp += prbits(dp, p[2], 7, 2);		dp += sprintf(dp, " location ");		dp += prbits(dp, p[2], 4, 4);		*dp++ = '\n';	}	p++;	cause = 0x7f & *p;	/* locate cause value */	for (i = 0; i < cause_1tr6_len; i++)		if (cause_1tr6[i].nr == cause)			break;	/* display cause value if it exists */	if (i == cause_1tr6_len)		dp += sprintf(dp, "Unknown cause type %x!\n", cause);	else		dp += sprintf(dp, "  cause value %x : %s \n", cause, cause_1tr6[i].descr);	return (dp - dest);}static intprchident(char *dest, u_char * p){	char *dp = dest;	p += 2;	dp += sprintf(dp, "    octet 3 ");	dp += prbits(dp, *p, 8, 8);	*dp++ = '\n';	return (dp - dest);}static intprcalled(char *dest, u_char * p){	int l;	char *dp = dest;	p++;	l = *p++ - 1;	dp += sprintf(dp, "    octet 3 ");	dp += prbits(dp, *p++, 8, 8);	*dp++ = '\n';	dp += sprintf(dp, "    number digits ");	while (l--)		*dp++ = *p++;	*dp++ = '\n';	return (dp - dest);}static intprcalling(char *dest, u_char * p){	int l;	char *dp = dest;	p++;	l = *p++ - 1;	dp += sprintf(dp, "    octet 3 ");	dp += prbits(dp, *p, 8, 8);	*dp++ = '\n';	if (!(*p & 0x80)) {		dp += sprintf(dp, "    octet 3a ");		dp += prbits(dp, *++p, 8, 8);		*dp++ = '\n';		l--;	};	p++;	dp += sprintf(dp, "    number digits ");	while (l--)		*dp++ = *p++;	*dp++ = '\n';	return (dp - dest);}staticintprbearer(char *dest, u_char * p){	char *dp = dest, ch;	p += 2;	dp += sprintf(dp, "    octet 3  ");	dp += prbits(dp, *p++, 8, 8);	*dp++ = '\n';	dp += sprintf(dp, "    octet 4  ");	dp += prbits(dp, *p, 8, 8);	*dp++ = '\n';	if ((*p++ & 0x1f) == 0x18) {		dp += sprintf(dp, "    octet 4.1 ");		dp += prbits(dp, *p++, 8, 8);		*dp++ = '\n';	}	/* check for user information layer 1 */	if ((*p & 0x60) == 0x20) {		ch = ' ';		do {			dp += sprintf(dp, "    octet 5%c ", ch);			dp += prbits(dp, *p, 8, 8);			*dp++ = '\n';			if (ch == ' ')				ch = 'a';			else				ch++;		}		while (!(*p++ & 0x80));	}	/* check for user information layer 2 */	if ((*p & 0x60) == 0x40) {		dp += sprintf(dp, "    octet 6  ");		dp += prbits(dp, *p++, 8, 8);		*dp++ = '\n';	}	/* check for user information layer 3 */	if ((*p & 0x60) == 0x60) {		dp += sprintf(dp, "    octet 7  ");		dp += prbits(dp, *p++, 8, 8);		*dp++ = '\n';	}	return (dp - dest);}staticintprbearer_ni1(char *dest, u_char * p){	char *dp = dest;	u_char len;	p++;	len = *p++;	dp += sprintf(dp, "    octet 3  ");	dp += prbits(dp, *p, 8, 8);	switch (*p++) {		case 0x80:			dp += sprintf(dp, " Speech");			break;		case 0x88:			dp += sprintf(dp, " Unrestricted digital information");			break;		case 0x90:			dp += sprintf(dp, " 3.1 kHz audio");			break;		default:			dp += sprintf(dp, " Unknown information-transfer capability");	}	*dp++ = '\n';	dp += sprintf(dp, "    octet 4  ");	dp += prbits(dp, *p, 8, 8);	switch (*p++) {		case 0x90:			dp += sprintf(dp, " 64 kbps, circuit mode");			break;		case 0xc0:			dp += sprintf(dp, " Packet mode");			break;		default:			dp += sprintf(dp, " Unknown transfer mode");	}	*dp++ = '\n';	if (len > 2) {		dp += sprintf(dp, "    octet 5  ");		dp += prbits(dp, *p, 8, 8);		switch (*p++) {			case 0x21:				dp += sprintf(dp, " Rate adaption\n");				dp += sprintf(dp, "    octet 5a ");				dp += prbits(dp, *p, 8, 8);				break;			case 0xa2:				dp += sprintf(dp, " u-law");				break;			default:				dp += sprintf(dp, " Unknown UI layer 1 protocol");		}		*dp++ = '\n';	}	return (dp - dest);}static intgeneral(char *dest, u_char * p){	char *dp = dest;	char ch = ' ';	int l, octet = 3;	p++;	l = *p++;	/* Iterate over all octets in the information element */	while (l--) {		dp += sprintf(dp, "    octet %d%c ", octet, ch);		dp += prbits(dp, *p++, 8, 8);		*dp++ = '\n';		/* last octet in group? */		if (*p & 0x80) {			octet++;			ch = ' ';		} else if (ch == ' ')			ch = 'a';		else			ch++;	}	return (dp - dest);}static intgeneral_ni1(char *dest, u_char * p){	char *dp = dest;	char ch = ' ';	int l, octet = 3;	p++;	l = *p++;	/* Iterate over all octets in the information element */	while (l--) {		dp += sprintf(dp, "    octet %d%c ", octet, ch);		dp += prbits(dp, *p, 8, 8);		*dp++ = '\n';		/* last octet in group? */		if (*p++ & 0x80) {			octet++;			ch = ' ';		} else if (ch == ' ')			ch = 'a';		else			ch++;	}	return (dp - dest);}static intprcharge(char *dest, u_char * p){	char *dp = dest;	int l;	p++;	l = *p++ - 1;	dp += sprintf(dp, "    GEA ");	dp += prbits(dp, *p++, 8, 8);	dp += sprintf(dp, "  Anzahl: ");	/* Iterate over all octets in the * information element */	while (l--)		*dp++ = *p++;	*dp++ = '\n';	return (dp - dest);}static intprtext(char *dest, u_char * p){	char *dp = dest;	int l;	p++;	l = *p++;	dp += sprintf(dp, "    ");	/* Iterate over all octets in the * information element */	while (l--)		*dp++ = *p++;	*dp++ = '\n';	return (dp - dest);}static intprfeatureind(char *dest, u_char * p){	char *dp = dest;	p += 2; /* skip id, len */	dp += sprintf(dp, "    octet 3  ");	dp += prbits(dp, *p, 8, 8);	*dp++ = '\n';	if (!(*p++ & 80)) {		dp += sprintf(dp, "    octet 4  ");		dp += prbits(dp, *p++, 8, 8);		*dp++ = '\n';	}	dp += sprintf(dp, "    Status:  ");	switch (*p) {		case 0:			dp += sprintf(dp, "Idle");			break;		case 1:			dp += sprintf(dp, "Active");			break;		case 2:			dp += sprintf(dp, "Prompt");			break;		case 3:			dp += sprintf(dp, "Pending");			break;		default:			dp += sprintf(dp, "(Reserved)");			break;	}	*dp++ = '\n';	return (dp - dest);}staticstruct DTag { /* Display tags */	u_char nr;	char *descr;} dtaglist[] = {	{ 0x82, "Continuation" },	{ 0x83, "Called address" },	{ 0x84, "Cause" },	{ 0x85, "Progress indicator" },	{ 0x86, "Notification indicator" },	{ 0x87, "Prompt" },	{ 0x88, "Accumlated digits" },	{ 0x89, "Status" },	{ 0x8a, "Inband" },	{ 0x8b, "Calling address" },	{ 0x8c, "Reason" },	{ 0x8d, "Calling party name" },	{ 0x8e, "Called party name" },	{ 0x8f, "Orignal called name" },	{ 0x90, "Redirecting name" },	{ 0x91, "Connected name" },	{ 0x92, "Originating restrictions" },	{ 0x93, "Date & time of day" },	{ 0x94, "Call Appearance ID" },	{ 0x95, "Feature address" },	{ 0x96, "Redirection name" },	{ 0x9e, "Text" },};#define DTAGSIZE sizeof(dtaglist)/sizeof(struct DTag)static intdisptext_ni1(char *dest, u_char * p){	char *dp = dest;	int l, tag, len, i;	p++;	l = *p++ - 1;	if (*p++ != 0x80) {		dp += sprintf(dp, "    Unknown display type\n");		return (dp - dest);	}	/* Iterate over all tag,length,text fields */	while (l > 0) {		tag = *p++;		len = *p++;		l -= len + 2;		/* Don't space or skip */		if ((tag == 0x80) || (tag == 0x81)) p++;		else {			for (i = 0; i < DTAGSIZE; i++)				if (tag == dtaglist[i].nr)					break;			/* When not found, give appropriate msg */			if (i != DTAGSIZE) {				dp += sprintf(dp, "    %s: ", dtaglist[i].descr);				while (len--)					*dp++ = *p++;			} else {				dp += sprintf(dp, "    (unknown display tag %2x): ", tag);				while (len--)					*dp++ = *p++;			}			dp += sprintf(dp, "\n");                }	}	return (dp - dest);}static intdisplay(char *dest, u_char * p){	char *dp = dest;	char ch = ' ';	int l, octet = 3;	p++;	l = *p++;	/* Iterate over all octets in the * display-information element */	dp += sprintf(dp, "   \"");	while (l--) {		dp += sprintf(dp, "%c", *p++);		/* last octet in group? */		if (*p & 0x80) {			octet++;			ch = ' ';		} else if (ch == ' ')			ch = 'a';		else			ch++;	}	*dp++ = '\"';	*dp++ = '\n';	return (dp - dest);}static intprfacility(char *dest, u_char * p){	char *dp = dest;	int l, l2;	p++;	l = *p++;	dp += sprintf(dp, "    octet 3 ");	dp += prbits(dp, *p++, 8, 8);	dp += sprintf(dp, "\n");	l -= 1;	while (l > 0) {		dp += sprintf(dp, "   octet 4 ");		dp += prbits(dp, *p++, 8, 8);		dp += sprintf(dp, "\n");		dp += sprintf(dp, "   octet 5 %d\n", l2 = *p++ & 0x7f);		l -= 2;		dp += sprintf(dp, "   contents ");		while (l2--) {			dp += sprintf(dp, "%2x ", *p++);			l--;		}		dp += sprintf(dp, "\n");	}	return (dp - dest);}staticstruct InformationElement {	u_char nr;	char *descr;	int (*f) (char *, u_char *);} ielist[] = {	{		0x00, "Segmented message", general	},	{		0x04, "Bearer capability", prbearer	},	{		0x08, "Cause", prcause	},	{		0x10, "Call identity", general	},	{		0x14, "Call state", general	},	{		0x18, "Channel identification", prchident	},	{		0x1c, "Facility", prfacility	},	{		0x1e, "Progress indicator", general	},	{		0x20, "Network-specific facilities", general	},	{		0x27, "Notification indicator", general	},	{		0x28, "Display", display	},	{		0x29, "Date/Time", general	},	{		0x2c, "Keypad facility", general	},	{		0x34, "Signal", general	},

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -