📄 preprocmsg.cpp
字号:
#include "stdafx.h"
#include "show.h"
#include "ylfFilteMsg.h"
//***********************主函数****************************
CShowMsg& CShowMsg::operator=(CShowMsg* pMsgList)
{
memcpy(&mshowmsg,&pMsgList->mshowmsg,sizeof(showmsg));
mshowmsg.LoadBuf(pMsgList->mshowmsg.pBuf,pMsgList->mshowmsg.pBuf[0]+pMsgList->mshowmsg.pBuf[1]*256+2);
return *this;
}
BOOL CShowMsg::PreProcMsg(unsigned char * buffer)//初步解码
{
unsigned short msglen,ss7len;
unsigned char FSN,BSN,pclen,ss7sio;
unsigned char msgchannel;
if((*(buffer+1)&0xf0) != 0x00) return FALSE; //不是 SS7 信令消息
msglen =(*buffer + *(buffer+1)*256)&0xfff; //提取 single message length(low 12bits)
if(msglen<=10) //msg len 2,channel 2 time 4 fsn bsn sio??
return FALSE;
mshowmsg.LoadBuf(buffer,msglen+2);
buffer+=2;
msgchannel =256*((*(buffer+1))&0x7f)+(*buffer);
bool b2M=(((*(buffer+1))&0x80)>0);
mshowmsg.linkid=msgchannel; //get linkid
buffer+=2;
mshowmsg.timeofm =*buffer+*(buffer+1)*256; //get timeofm
buffer+=2;
mshowmsg.timeofs =*buffer+*(buffer+1)*256; //get timeofs
buffer+=2;
if(b2M)
{
BSN=*buffer+((*(buffer+1))&0x0f)*256;
mshowmsg.bsn=0; //提取 bsn
mshowmsg.bib=0; //提取 bib
buffer+=2;
FSN=*buffer+((*(buffer+1))&0x0f)*256;
mshowmsg.fsn=0; //提取 fsn
mshowmsg.fib=0; //提取 fib
buffer+=2;
ss7len=*buffer&0x3f;
ss7len=255*((*(buffer+1))&0x01)+*buffer;
if(ss7len<3) return TRUE; //fisu 或 lssu 消息
buffer+=2;
}
else
{
BSN=*buffer;
mshowmsg.bsn=BSN%128; //提取 bsn
mshowmsg.bib=BSN/128; //提取 bib
buffer++;
FSN=*buffer;
mshowmsg.fsn=FSN%128; //提取 fsn
mshowmsg.fib=FSN/128; //提取 fib
buffer++;
ss7len=*buffer&0x3f;
if(ss7len<3) return TRUE; //fisu 或 lssu 消息
buffer++;
}
ss7sio=*buffer++;
if((ss7sio&0xc0)==0xc0)
pclen=0; // 14比特编码
else
pclen=1; // 24比特编码
if(pclen) // 是24比特编码
{
mshowmsg.dpc[0] =*buffer++;
mshowmsg.dpc[1] =*buffer++;
mshowmsg.dpc[2] =*buffer++;
mshowmsg.opc[0] =*buffer++;
mshowmsg.opc[1] =*buffer++;
mshowmsg.opc[2] =*buffer++;
buffer++;
}
else // 是14比特编码
{
mshowmsg.dpc[0]=*buffer++;
mshowmsg.dpc[1]=*buffer&0x3f;
mshowmsg.dpc[2]=0;
mshowmsg.opc[0]=((*buffer)>>6) | ((*(buffer+1))<<2);
buffer++;
mshowmsg.opc [1]=(((*buffer)>>6) | ((*(buffer+1))<<2))&0x3f;
buffer++;
mshowmsg.opc [2]=0;
buffer++;
}
switch(ss7sio&0x0f) //根据业务表示语调用相应的函数
{
case 0:ProcSNMmsg(buffer); //调用ProcSNMmsg(buffer)函数,提取SNM消息类型
break;
case 1:ProcSNTmsg(buffer); //调用ProcSNTmsg(buffer)函数,提取SNT消息类型
break;
case 3:ProcSCCPmsg(buffer,pclen); //调用ProcSCCPmsg(buffer)函数,提取SCCP消息类型
break;
case 4:ProcTUPmsg(buffer); //调用ProcTUPmsg(buffer)函数,提取TUP消息类型
break;
case 5:ProcISUPmsg(buffer); //调用ProcISUPmsg(buffer)函数,提取ISUP消息类型
break;
default : break;
}
return TRUE;
}
//*************************被调用的函数***************************
//****************************************************************
void CShowMsg::ProcSNMmsg(unsigned char *buffer)
{
unsigned char H1H0; //业务信息字段
H1H0=*buffer;
switch(H1H0)
{
case 0x11: sprintf(mshowmsg.msgtype,"MSU SNM COO ");
break;
case 0x12: sprintf(mshowmsg.msgtype,"MSU SNM ECO ");
break;
case 0x13: sprintf(mshowmsg.msgtype,"MSU SNM RCT ");
break;
case 0x14: sprintf(mshowmsg.msgtype,"MSU SNM TFP ");
break;
case 0x15: sprintf(mshowmsg.msgtype,"MSU SNM RST ");
break;
case 0x16: sprintf(mshowmsg.msgtype,"MSU SNM LIN ");
break;
case 0x17: sprintf(mshowmsg.msgtype,"MSU SNM TRA ");
break;
case 0x18: sprintf(mshowmsg.msgtype,"MSU SNM DLC ");
break;
case 0x1A: sprintf(mshowmsg.msgtype,"MSU SNM UPU ");
break;
case 0x21: sprintf(mshowmsg.msgtype,"MSU SNM COA ");
break;
case 0x22: sprintf(mshowmsg.msgtype,"MSU SNM ECA ");
break;
case 0x23: sprintf(mshowmsg.msgtype,"MSU SNM TFC ");
break;
case 0x25: sprintf(mshowmsg.msgtype,"MSU SNM RSR ");
break;
case 0x26: sprintf(mshowmsg.msgtype,"MSU SNM LUN ");
break;
case 0x28: sprintf(mshowmsg.msgtype,"MSU SNM CSS ");
break;
case 0x34: sprintf(mshowmsg.msgtype,"MSU SNM TFR ");
break;
case 0x36: sprintf(mshowmsg.msgtype,"MSU SNM LIA ");
break;
case 0x38: sprintf(mshowmsg.msgtype,"MSU SNM CNS ");
break;
case 0x46: sprintf(mshowmsg.msgtype,"MSU SNM LUA ");
break;
case 0x48: sprintf(mshowmsg.msgtype,"MSU SNM CNP ");
break;
case 0x51: sprintf(mshowmsg.msgtype,"MSU SNM CBD ");
break;
case 0x54: sprintf(mshowmsg.msgtype,"MSU SNM TFA ");
break;
case 0x56: sprintf(mshowmsg.msgtype,"MSU SNM LID ");
break;
case 0x61: sprintf(mshowmsg.msgtype,"MSU SNM CBA ");
break;
case 0x66: sprintf(mshowmsg.msgtype,"MSU SNM LFU ");
break;
case 0x76: sprintf(mshowmsg.msgtype,"MSU SNM LLT ");
break;
case 0x86: sprintf(mshowmsg.msgtype,"MSU SNM LRT ");
break;
default:
break;
}
}
//****************************************************************
void CShowMsg::ProcSNTmsg(unsigned char *buffer)
{
//提取SNT消息类型,并存入buffer
unsigned char H1H0; //业务信息字段
H1H0=*buffer;
switch(H1H0)
{
case 0x11: sprintf(mshowmsg.msgtype,"MSU SNT SLTM ");
break;
case 0x21: sprintf(mshowmsg.msgtype,"MSU SNT SLTA ");
break;
default:
break;
}
}
void CShowMsg::ProcTUPmsg(unsigned char *buffer)
{
//提取TUP消息类型,并存入buffer
unsigned char H1H0; //业务信息字段
unsigned char operatecode;
mshowmsg.cic=*(buffer-1)+(*buffer&0x0F)*256; //get CIC
buffer++;
H1H0=*buffer;
switch(H1H0)
{
case 0x06: sprintf(mshowmsg.msgtype,"MSU TUP ANU ");
break;
case 0x11: sprintf(mshowmsg.msgtype,"MSU TUP IAM ");
operatecode=0X11;
break;
case 0x12: sprintf(mshowmsg.msgtype,"MSU TUP GSM ");
operatecode=0X12;
break;
case 0x13: sprintf(mshowmsg.msgtype,"MSU TUP GRQ ");
break;
case 0x14: sprintf(mshowmsg.msgtype,"MSU TUP ACM ");
break;
case 0x15: sprintf(mshowmsg.msgtype,"MSU TUP SEC ");
break;
case 0x16: sprintf(mshowmsg.msgtype,"MSU TUP ANC ");
break;
case 0x17: sprintf(mshowmsg.msgtype,"MSU TUP RLG ");
break;
case 0x18: sprintf(mshowmsg.msgtype,"MSU TUP MGB ");
break;
case 0x1A: sprintf(mshowmsg.msgtype,"MSU TUP ACC ");
break;
case 0x1D: sprintf(mshowmsg.msgtype,"MSU TUP OPR ");
break;
case 0x1E: sprintf(mshowmsg.msgtype,"MSU TUP SLB ");
break;
case 0x1F: sprintf(mshowmsg.msgtype,"MSU TUP MAL ");
break;
case 0x21: sprintf(mshowmsg.msgtype,"MSU TUP IAI ");
operatecode=0X21;
break;
case 0x24: sprintf(mshowmsg.msgtype,"MSU TUP CHG ");
break;
case 0x25: sprintf(mshowmsg.msgtype,"MSU TUP CGC ");
break;
case 0x26: sprintf(mshowmsg.msgtype,"MSU TUP ANN ");
break;
case 0x27: sprintf(mshowmsg.msgtype,"MSU TUP BLO ");
break;
case 0x28: sprintf(mshowmsg.msgtype,"MSU TUP MBA ");
break;
case 0x2C: sprintf(mshowmsg.msgtype,"MSU TUP MPM ");
break;
case 0x2E: sprintf(mshowmsg.msgtype,"MSU TUP STB ");
break;
case 0x31: sprintf(mshowmsg.msgtype,"MSU TUP SAM ");
operatecode=0X31;
break;
case 0x32: sprintf(mshowmsg.msgtype,"MSU TUP COT ");
break;
case 0x35: sprintf(mshowmsg.msgtype,"MSU TUP NNC ");
break;
case 0x36: sprintf(mshowmsg.msgtype,"MSU TUP CBK ");
break;
case 0x37: sprintf(mshowmsg.msgtype,"MSU TUP BLA ");
break;
case 0x38: sprintf(mshowmsg.msgtype,"MSU TUP MCU ");
break;
case 0x41: sprintf(mshowmsg.msgtype,"MSU TUP SAO ");
operatecode=0X41;
break;
case 0x42: sprintf(mshowmsg.msgtype,"MSU TUP CCF ");
break;
case 0x45: sprintf(mshowmsg.msgtype,"MSU TUP ADI ");
break;
case 0x46: sprintf(mshowmsg.msgtype,"MSU TUP CLF ");
break;
case 0x47: sprintf(mshowmsg.msgtype,"MSU TUP UBL ");
break;
case 0x48: sprintf(mshowmsg.msgtype,"MSU TUP MUA ");
break;
case 0x55: sprintf(mshowmsg.msgtype,"MSU TUP CFL ");
break;
case 0x56: sprintf(mshowmsg.msgtype,"MSU TUP RAN ");
break;
case 0x57: sprintf(mshowmsg.msgtype,"MSU TUP UBA ");
break;
case 0x58: sprintf(mshowmsg.msgtype,"MSU TUP HGB ");
break;
case 0x65: sprintf(mshowmsg.msgtype,"MSU TUP SSB ");
break;
case 0x66: sprintf(mshowmsg.msgtype,"MSU TUP FOT ");
break;
case 0x67: sprintf(mshowmsg.msgtype,"MSU TUP CCR ");
break;
case 0x68: sprintf(mshowmsg.msgtype,"MSU TUP HBA ");
break;
case 0x75: sprintf(mshowmsg.msgtype,"MSU TUP UNN ");
break;
case 0x76: sprintf(mshowmsg.msgtype,"MSU TUP CCL ");
break;
case 0x77: sprintf(mshowmsg.msgtype,"MSU TUP RSC ");
break;
case 0x78: sprintf(mshowmsg.msgtype,"MSU TUP HGU ");
break;
case 0x85: sprintf(mshowmsg.msgtype,"MSU TUP LOS ");
break;
case 0x88: sprintf(mshowmsg.msgtype,"MSU TUP HUA ");
break;
case 0x95: sprintf(mshowmsg.msgtype,"MSU TUP SST ");
break;
case 0x98: sprintf(mshowmsg.msgtype,"MSU TUP GRS ");
break;
case 0xA5: sprintf(mshowmsg.msgtype,"MSU TUP ACB ");
break;
case 0xA8: sprintf(mshowmsg.msgtype,"MSU TUP GRA ");
break;
case 0xB5: sprintf(mshowmsg.msgtype,"MSU TUP DPN ");
break;
case 0xB8: sprintf(mshowmsg.msgtype,"MSU TUP SGB ");
break;
case 0xC8: sprintf(mshowmsg.msgtype,"MSU TUP SBA ");
break;
case 0xD8: sprintf(mshowmsg.msgtype,"MSU TUP SGU ");
break;
case 0xE8: sprintf(mshowmsg.msgtype,"MSU TUP SUA ");
break;
case 0xE5: sprintf(mshowmsg.msgtype,"MSU TUP EUM ");
break;
default:
break;
}
switch(operatecode)
{
case 0x11:
{
int acalladdlen=0; //字符串acalladd的长度
int addrlen=0;
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CalledAddr: ");
buffer+=3;
addrlen=(*buffer&0xF0)>>4;
buffer++;
GetTUPAddrNum(buffer,addrlen);
buffer=buffer+(addrlen/2+addrlen%2);
}
break;
case 0x21:
{
int acalladdlen=0; //字符串acalladd的长度
int addrlen=0,bitE=0,bitF=0;
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CalledAddr: ");
buffer+=3;
addrlen=(*buffer&0xF0)>>4;
buffer++;
GetTUPAddrNum(buffer,addrlen);
buffer=buffer+(addrlen/2+addrlen%2);
if(*buffer==0x00)
return;
else
{
bitE=(*buffer&0x10);
bitF=(*buffer&0x20);
if(bitE==0x10)
{
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CallingAddr: ");
addrlen=(*(buffer+1)&0xF0)>>4;
buffer+=2;
GetTUPAddrNum(buffer,addrlen);
buffer=buffer+(addrlen/2+addrlen%2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -