?? isup.c
字號:
/* ISUP functions */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <conio.h>
#include "isup.h"
void ISUP_Process_IAM( BYTE* pFrame, unsigned long nbByte, FILE* pfout);
typedef void SS7_ISUP_MESSAGE_FUNCTION( BYTE* pFrame, unsigned long nbByte, FILE* pfout);
typedef struct
{
char Type[5];
char Comment[256];
void *pfunc;
} SS7_ISUP_MESSAGE_TYPE_INFO;
SS7_ISUP_MESSAGE_TYPE_INFO SS7_ISUP_TAB_MESSAGE_TYPE[50] =
{
{"?", "Unknown", NULL},
{"IAM", "Initial Address Message", ISUP_Process_IAM},
{"SAM", "Subsequent Address Message", NULL},
{"INR", "Information Request", NULL},
{"INF", "Information", NULL},
{"COT", "Continuity", NULL},
{"ACM", "Address Complete", NULL},
{"CON", "Connect"},
{"FOT", "Forward Transfer", NULL},
{"ANM", "Answer", NULL},
{"?", "Reserved", NULL},
{"?", "Reserved", NULL},
{"REL", "Release", NULL},
{"SUS", "Suspend", NULL},
{"RES", "Resume", NULL},
{"?", "Reserved", NULL},
{"RLC", "Release Complete", NULL},
{"CCR", "Continuity Check Request", NULL},
{"RSC", "Reset Circuit", NULL},
{"BLO", "Blocking", NULL},
{"UBL", "Unblocking", NULL},
{"BLA", "Blocking Acknowledgement", NULL},
{"UBA", "Unblocking Acknowledgement", NULL},
{"GRA", "Circuit Group Reset Acknowledgement", NULL},
{"CGB", "Circuit Group Blocking", NULL},
{"CGU", "Circuit Group Unblocking", NULL},
{"CGBA", "Circuit Group Blocking Acknowledgement", NULL},
{"CGUA", "Circuit Group Unblocking Acknowledgement", NULL},
{"CMR", "Call Modification Request", NULL},
{"CMC", "Call Modification Completed", NULL},
{"CMRJ", "Call Modification Reject", NULL},
{"FRJ", "Facility Reject", NULL},
{"FAA", "Facility Accepted", NULL},
{"FAR", "Facility Request", NULL},
{"?", "Reserved", NULL},
{"?", "Reserved", NULL},
{"LPA", "Loop Back Acknowledgement", NULL},
{"?", "Reserved", NULL},
{"?", "Reserved", NULL},
{"DRS", "Delayed Release", NULL},
{"PAM", "Pass Along", NULL},
{"GRS", "Circuit Group Reset", NULL},
{"CQM", "Circuit Group Query", NULL},
{"CQR", "Circuit Group Query Response", NULL},
{"CPG", "Call Progress", NULL},
{"USR", "User to User Information", NULL},
{"UCIC", "Unequipped Circuit Identification Code", NULL},
{"CFN", "Confusion", NULL},
{"OLM", "Overload", NULL},
{"CRG", "Charge information", NULL},
};
#define SS7_ISUP_MESSAGE_TYPE_MAX 49
void ISUP_Analysis( BYTE *pFrame, unsigned long nbByte, FILE *pfout)
{
int i, j;
fprintf( pfout, "\t\t CIC : %.3d-%.2d (%Xh)\r\n", (int)SS7_ISUP_CIC_TRUNK(pFrame), (int)SS7_ISUP_CIC_TS(pFrame), (int)SS7_ISUP_CIC(pFrame));
if( SS7_ISUP_MESSAGE_TYPE(pFrame) < SS7_ISUP_MESSAGE_TYPE_MAX)
{
fprintf( pfout, "\t\t Message type : %.2Xh - %s (%s)\r\n", SS7_ISUP_MESSAGE_TYPE(pFrame), SS7_ISUP_TAB_MESSAGE_TYPE[ SS7_ISUP_MESSAGE_TYPE( pFrame)].Type, SS7_ISUP_TAB_MESSAGE_TYPE[ SS7_ISUP_MESSAGE_TYPE( pFrame)].Comment);
if( SS7_ISUP_TAB_MESSAGE_TYPE[ SS7_ISUP_MESSAGE_TYPE( pFrame)].pfunc != NULL)
((SS7_ISUP_MESSAGE_FUNCTION*)(SS7_ISUP_TAB_MESSAGE_TYPE[ SS7_ISUP_MESSAGE_TYPE( pFrame)].pfunc))(pFrame, nbByte, pfout);
}
else
{
fputs( "\t\t Message type Error\r\n", pfout);
}
fputs( "\r\nISUP FRAME :\r\n", pfout);
for( i = 0; i < (int)nbByte/8; i++)
{
for( j = 0; j < 8; j++)
{
fprintf( pfout, "%.2X ", pFrame[i*8+j]);
}
fputs( "\r\n", pfout);
}
for( j = 0; j < (int)nbByte%8; j++)
{
fprintf( pfout, "%.2X ", pFrame[i*8+j]);
}
fputs( "\r\n", pfout);
}
void ISUP_Process_IAM( BYTE* pFrame, unsigned long nbByte, FILE* pfout)
{
int i;
fprintf( pfout, "\t\t\t offset fixed parameters : %d\r\n", SS7_ISUP_OFFSET_MANDATORY_FIXED_PARAM(pFrame));
fprintf( pfout, "\t\t\t offset optional parameters : %d\r\n", SS7_ISUP_OFFSET_MANDATORY_OPTIONAL_PARAM(pFrame));
fprintf( pfout, "\t\t\t length indicator of called party number : %d\r\n", SS7_ISUP_LENGTH_CALLED_PARTY(pFrame));
fprintf( pfout, "\t\t\t called party number : ");
for( i = 0; i < SS7_ISUP_LENGTH_CALLED_PARTY(pFrame); i++)
{
fprintf( pfout, "%.2X ", SS7_ISUP_CALLED_NUMBER_INDEX(pFrame, i));
}
fputs( "\r\n", pfout);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -