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

📄 preprocmsg.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			  if(bitF==0x20)
			  {
				acalladdlen=strlen(mshowmsg.acalladd);
				acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, "   OCalledAddr: ");
				addrlen=(*buffer&0xF0)>>4;
				buffer++;
				GetTUPAddrNum(buffer,addrlen);
			  }
		  }
	  }
	  break;
  case 0x31:
	  {
		  int acalladdlen=0;              //字符串acalladd的长度	  
		  int addrlen=0;
	      acalladdlen=strlen(mshowmsg.acalladd);
	      acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CalledAddr: "); 
		  buffer++;
		  addrlen=(*buffer&0xF0)>>4;
		  buffer++;
		  GetTUPAddrNum(buffer,addrlen);
		  buffer=buffer+(addrlen/2+addrlen%2);
	  }
	  break;
  case 0x41:
	  {
		  int acalladdlen=0;              //字符串acalladd的长度	  
		  int addrlen=0;
		  char tempFirstNum;
	      acalladdlen=strlen(mshowmsg.acalladd);
	      acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CalledAddr: "); 
		  buffer++;
		  tempFirstNum=((*buffer)&0x0F)+48; 
	      mshowmsg.acalladd[acalladdlen++]=tempFirstNum;
		  buffer++;
	  }

	  break;
  case 0x12:
	  {
		  int acalladdlen=0;              //字符串acalladd的长度	  
		  int addrlen=0;
	      acalladdlen=strlen(mshowmsg.acalladd);
	      acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CallingAddr: "); 
		  buffer+=2;
		  addrlen=(*buffer&0xF0)>>4;
		  buffer++;
		  GetTUPAddrNum(buffer,addrlen);
		  buffer=buffer+(addrlen/2+addrlen%2);
		  buffer=buffer+(((*buffer&0xF0)>>4)/2+((*buffer&0xF0)>>4)%2);
	  }
	  break;
  }

	    return;
}

//*****************************************************************

void CShowMsg::GetTUPAddrNum(unsigned char *buffer,int len)
{
	//提取TUP主/被叫号码
	int i;
	int acalladdlen=0;
	acalladdlen=strlen(mshowmsg.acalladd);
	if((len%2)==0)
	{		
		for(i=len/2;i>0;i--)
		{			
			char tempvarL,tempvarU;
			tempvarL=((*buffer)&0x0F)+48;               
			mshowmsg.acalladd[acalladdlen++]=tempvarL; 
			tempvarU=(((*buffer)&0xF0)>>4)+48;
			if(tempvarU==0x0F+48) 
				break;
			mshowmsg.acalladd[acalladdlen++]=tempvarU;
			buffer++;
		}
	}
	else
	{
		char tempFirstNum;
		for(i=len/2;i>0;i--)
		{
			char tempvarL,tempvarU;
			tempvarL=((*buffer)&0x0F)+48;               
			mshowmsg.acalladd[acalladdlen++]=tempvarL; 
			tempvarU=(((*buffer)&0xF0)>>4)+48;
			mshowmsg.acalladd[acalladdlen++]=tempvarU;
			buffer++;
		}
		tempFirstNum=((*buffer)&0x0F)+48;  
		if(tempFirstNum==0x0F+48) 
			return;
	    mshowmsg.acalladd[acalladdlen++]=tempFirstNum;
	}
}

//*****************************************************************

void CShowMsg::ProcISUPmsg(unsigned char *buffer)
{
	//提取ISUP消息类型,并存入buffer 
    unsigned char mtype;     //ISUP消息类型:ACM、ANM、BLO、BLA、CPG……
	unsigned char operatecode;
	mshowmsg.cic=*buffer+(*(buffer+1)&0x0F)*256;   //get CIC
	buffer+=2;
	mtype=*buffer;
	mshowmsg.submsgtype=mtype;
	switch(mtype)
	{
	   case 0x06:   sprintf(mshowmsg.msgtype,"MSU ISUP ACM "); 
		   operatecode=0x06;
		   break;
	   case 0x09:   sprintf(mshowmsg.msgtype,"MSU ISUP ANM ");     
		   break;
	   case 0x13:   sprintf(mshowmsg.msgtype,"MSU ISUP BLO ");    
		   break;
	   case 0x15:   sprintf(mshowmsg.msgtype,"MSU ISUP BLA ");    
		   break;
	   case 0x2C:   sprintf(mshowmsg.msgtype,"MSU ISUP CPG ");
		   operatecode=0x2C;
		   break;
	   case 0x18:   sprintf(mshowmsg.msgtype,"MSU ISUP CGB ");     
		   break;
	   case 0x1A:   sprintf(mshowmsg.msgtype,"MSU ISUP CGA ");     
		   break;
	   case 0x2A:   sprintf(mshowmsg.msgtype,"MSU ISUP CQM ");     
		   break;
	   case 0x2B:   sprintf(mshowmsg.msgtype,"MSU ISUP CQR ");     
		   break;
	   case 0x17:   sprintf(mshowmsg.msgtype,"MSU ISUP GRS ");     
		   break;
	   case 0x29:   sprintf(mshowmsg.msgtype,"MSU ISUP GRA ");     
		   break;
	   case 0x19:   sprintf(mshowmsg.msgtype,"MSU ISUP CGU ");     
		   break;
	   case 0x1B:   sprintf(mshowmsg.msgtype,"MSU ISUP CGUA ");    
		   break;
	   case 0x31:   sprintf(mshowmsg.msgtype,"MSU ISUP CGR ");     
		   break;
	   case 0x2F:   sprintf(mshowmsg.msgtype,"MSU ISUP CONF ");     
		   break;
 	   case 0x07:   sprintf(mshowmsg.msgtype,"MSU ISUP CON ");     
		   break;
	   case 0x05:   sprintf(mshowmsg.msgtype,"MSU ISUP COT ");     
		   break;
	   case 0x11:   sprintf(mshowmsg.msgtype,"MSU ISUP CCR ");     
		   break;
	   case 0x33:   sprintf(mshowmsg.msgtype,"MSU ISUP FAC ");     
		   break;
	   case 0x20:   sprintf(mshowmsg.msgtype,"MSU ISUP FAA ");     
		   break;
	   case 0x21:   sprintf(mshowmsg.msgtype,"MSU ISUP FRJ ");
		   operatecode=0x21;
		   break;
	   case 0x1F:   sprintf(mshowmsg.msgtype,"MSU ISUP FAR ");     
		   break;
	   case 0x08:   sprintf(mshowmsg.msgtype,"MSU ISUP FOT ");     
		   break;
	   case 0x36:   sprintf(mshowmsg.msgtype,"MSU ISUP IDR ");    
		   break;
	   case 0x37:   sprintf(mshowmsg.msgtype,"MSU ISUP IRS "); 
		   operatecode=0x37;
		   break;
	   case 0x04:   sprintf(mshowmsg.msgtype,"MSU ISUP INF "); 
		   operatecode=0x04;
		   break;
	   case 0x03:   sprintf(mshowmsg.msgtype,"MSU ISUP INR ");     
		   break;
	   case 0x01:   sprintf(mshowmsg.msgtype,"MSU ISUP IAM ");
		   operatecode=0x01;
		   break;
	   case 0x24:   sprintf(mshowmsg.msgtype,"MSU ISUP LPA ");     
		   break;
	   case 0x32:   sprintf(mshowmsg.msgtype,"MSU ISUP NRM ");     
		   break;
	   case 0x30:   sprintf(mshowmsg.msgtype,"MSU ISUP OLM ");     
		   break;
	   case 0x28:   sprintf(mshowmsg.msgtype,"MSU ISUP PAM ");     
		   break;
	   case 0x0C:   sprintf(mshowmsg.msgtype,"MSU ISUP REL "); 
		   operatecode=0x0C;
		   break;
	   case 0x10:   sprintf(mshowmsg.msgtype,"MSU ISUP RLC "); 
		   operatecode=0x10;
		   break;
	   case 0x12:   sprintf(mshowmsg.msgtype,"MSU ISUP RSC ");     
		   break;
	   case 0x0E:   sprintf(mshowmsg.msgtype,"MSU ISUP RES ");    
		   break;
	   case 0x38:   sprintf(mshowmsg.msgtype,"MSU ISUP SGM ");    
		   break;
	   case 0x02:   sprintf(mshowmsg.msgtype,"MSU ISUP SAM ");  
		   operatecode=0x02;
		   break;
	   case 0x0D:   sprintf(mshowmsg.msgtype,"MSU ISUP SUS ");     
		   break;
	   case 0x14:   sprintf(mshowmsg.msgtype,"MSU ISUP UBL ");     
		   break;
	   case 0x26:   sprintf(mshowmsg.msgtype,"MSU ISUP UBA ");     
		   break;
	   case 0x2E:   sprintf(mshowmsg.msgtype,"MSU ISUP UCIC ");    
		   break;
	   case 0x35:   sprintf(mshowmsg.msgtype,"MSU ISUP UPA ");     
		   break;
	   case 0x34:   sprintf(mshowmsg.msgtype,"MSU ISUP UPT ");     
		   break;
	   case 0x2D:   sprintf(mshowmsg.msgtype,"MSU ISUP USR ");    
		   break;
	   case 0xFE:   sprintf(mshowmsg.msgtype,"MSU ISUP OPR ");     
		   break;
	   case 0xFD:   sprintf(mshowmsg.msgtype,"MSU ISUP MPM ");     
		   break;
	   case 0xFC:   sprintf(mshowmsg.msgtype,"MSU ISUP CCL ");     
		   break;
	   default:
		   break;
	}
	switch(operatecode)
	{
	case 0x06:            //地址全
		{
			if(*(buffer+3)==0x00)             //任选项指针
				return;
			else if(*(buffer+3)==0x01)
			{
				buffer+=4;
				if(*buffer==0x29)             //任选后向呼叫表示语
					buffer+=3;
				if(*buffer==0x01)             //呼叫参考
					buffer+=8;
				if(*buffer==0x12)             //原因表示语
				{
					buffer++;                 //指向原因表示语的长度
					GetISUPCause(buffer);
					buffer++;
				}
			}

		}
		break;
	case 0x2C:            //呼叫进展
		{
			if(*(buffer+2)==0x00)          //任选项指针
				return;
			else if(*(buffer+2)==0x01)     
				buffer+=3;
			if(*buffer==0x12)
			{
				buffer++;                  // 指向原因表示语的长度
				GetISUPCause(buffer);
				buffer++;
			}			
		}
		break;
	case 0x21:            //性能拒绝
		{
			buffer=buffer+2+(*(buffer+2));  // 指向原因表示语的长度
			GetISUPCause(buffer);
			buffer++;
		}
		break;
	case 0x37:            //识别响应
		{
			if(*(buffer+1)==0x00)                     //指向任选项的指针
				return;
			else if(*(buffer+1)==0x01)
			{
				if(*(buffer+2)==0x3C)                 //MCID响应表示语
					buffer=buffer+3+(*(buffer+3));
				if(*buffer==0x38)                     //消息兼容性信息
					buffer=buffer+1+(*(buffer+1));
				if(*buffer==0x39)                     //参数兼容性信息
					buffer=buffer+1+(*(buffer+1));
				if(*buffer==0x0A)                     //主叫用户号码
				{
					int acalladdlen=0;                //字符串acalladd的长度	  
				    int addrlen=0,even=0;
					acalladdlen=strlen(mshowmsg.acalladd);
					acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CallingAddr: "); 
					addrlen=*(buffer+1)-2;
					even=*(buffer+2)&0x80;          //even=0x00:地址信号为偶数;0x10:奇数
					buffer+=4;
					GetISDNAddrNum(buffer,addrlen,even);
					buffer++;
				}
			}
		}
		break;
	case 0x04:            //信息
		{			
			if(*(buffer+3)==0x00)                   //任选项指针
				return;
			else if(*(buffer+3)==0x01)
			{
				buffer+=4;
				if(*buffer==0x09)                   //主叫用户类别
					buffer+=3;
				if(*buffer==0x0A)                   //主叫用户号码
				{
					int acalladdlen=0;              //字符串acalladd的长度	  
				    int addrlen=0,even=0;
					acalladdlen=strlen(mshowmsg.acalladd);
					acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CallingAddr: "); 
					addrlen=*(buffer+1)-2;
					even=*(buffer+2)&0x80;        //even=0x00:地址信号为偶数;0x10:奇数
					buffer+=4;
					GetISDNAddrNum(buffer,addrlen,even);
					buffer++;
				}
			}
		}
		break;
	case 0x01:            //初始地址
		{	
			int acalladdlen=0;                     //字符串acalladd的长度	  
			int addrlen=0,even=0;
			acalladdlen=strlen(mshowmsg.acalladd);
			acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CalledAddr: "); 
			buffer=buffer+6+(*(buffer+6));         // 指向被叫用户号码长度指示语
			addrlen=*buffer-2;
			even=*(buffer+1)&0x80;                 //even=0x00:地址信号为偶数;0x10:奇数
			buffer+=3;
			GetISDNAddrNum(buffer,addrlen,even);
			buffer=buffer+addrlen;
			if(*buffer==0x23)                      //转接网选择
				buffer=buffer+1+(*(buffer+1));
			if(*buffer==0x01)                      //呼叫参考
				buffer=buffer+1+(*(buffer+1));
			if(*buffer==0x08)                   //任选前向呼叫表示语
				buffer=buffer+3;
			if(*buffer==0x0A)                      //主叫用户号码
			{
				acalladdlen=strlen(mshowmsg.acalladd);
				acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, "   CallingAddr: "); 
				addrlen=*(buffer+1)-2;
				even=*(buffer+2)&0x80;                 //even=0x00:地址信号为偶数;0x10:奇数
				buffer+=4;
				GetISDNAddrNum(buffer,addrlen,even);
				buffer=buffer+addrlen;
			}
			if(*buffer==0x0B)                   //改发的号码
				buffer=buffer+1+(*(buffer+1));
            if(*buffer==0x13)                   //改发信息
				buffer=buffer+1+(*(buffer+1));	
			if(*buffer==0x1A)                   //闭合用户群连锁编码
				buffer=buffer+6;
			if(*buffer==0x0D)                   //连接请求
				buffer=buffer+1+(*(buffer+1));
			if(*buffer==0x28)                   //原被叫号码
			{
				acalladdlen=strlen(mshowmsg.acalladd);
				acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, "   OCalledAddr: ");
				addrlen=*(buffer+1)-2;
				even=*(buffer+2)&0x80;             //even=0x00:地址信号为偶数;0x80:奇数
				buffer+=4;
				GetISDNAddrNum(buffer,addrlen,even);
				buffer=buffer+addrlen;
			}
//			ylfFilteMsg::FiltIAM(dpc,opc,cic,addr,baddr);
		}
		break;
	case 0x0C:            //释放
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -