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

📄 isup.c

📁 example of SS7 file analyzer & decoder
💻 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 + -