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

📄 preprocmsg.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#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 + -