?? q931.c
字號(hào):
{CAUSE_IncomingBarred, "Incoming Barred"}, {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"}};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);}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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -