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

📄 svinapdisp.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	switch(oc)  //operate code
	{
	 case 42:  //激活业务过滤
		  indeffmt=procsequencetag(0x01);
//过滤掉的呼叫处理
		  indeffmt2=procsequencetag(0x03);
////SF帐单计费特性
		  indeffmt3=procsequencetag(0x05);
//////“SF帐单计费特性”选择“无IN计费”“IN计费”“发送计费信息”
		  if((*recbuf&0x3f)==0) procNULL(0x07);  //选择“无IN计费”
		  else if((*recbuf&0x3f)==0x21)  //选择“IN计费”
		  {indeffmt4=procsequencetag(0x09); //IN计费 sequence
		   if((*recbuf&0x3f)==0) procsbasicpara(0x0b);  //计费模式
		   if((*recbuf&0x3f)==2) procINAPADDR(0x0e);    //目标地址号码
		   if((*recbuf&0x3f)==3) procsbasicpara(0x12);     //计费用户标识指示
		   if((*recbuf&0x3f)==4) procINAPCHGADDR(0x15);    //规定的计费号码
		   if((*recbuf&0x3f)==0x25) ProcAdditionalCharg(0x19);  //附加费
		   if((*recbuf&0x3f)==6) procsbasicpara(0x21);  //计费类型
		   if((*recbuf&0x3f)==0x27) ProcAdjustRate(0x24);  //计费调整率
		   if((*recbuf&0x3f)==8) procsbasicpara(0x2c);  //开始计费方式(枚举)
		   if((*recbuf&0x3f)==9) procsbasicpara(0x2f);  //详细帐单记录类型
		   if((*recbuf&0x3f)==10) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==11) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==12) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==13) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==14) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==15) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==16) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==17) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==18) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==19) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==20) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==21) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==22) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==23) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==24) procsbasicpara(0x32);  //透明参数
		   if((*recbuf&0x3f)==25) procsbasicpara(0x32);  //透明参数
		   if(indeffmt4!=0) {recbuf+=2;UDTlen-=2;}
		  }//选择“IN计费”
		  else if((*recbuf&0x3f)==0x22) //选择“发送计费信息”
		  {
		  }//选择“发送计费信息”
		  if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
////“要发送的信息”
		  if((*recbuf&0x3f)==0x21) ProcSendingInfo(0x35,0xa7);
////“最大计数器个数”
		  if((*recbuf&0x3f)==2) procsbasicpara(0x6a);
////“释放原因”
		  if((*recbuf&0x3f)==3) procCase(0x6d);
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}

//“过滤特性”选择“间隙间隔”“呼叫次数”
		  indeffmt2=procsequencetag(0x70);  //过滤特性 sequence
		  if((*recbuf&0x3f)==0) procsbasicpara(0x72);  //间隙间隔
		  else if((*recbuf&0x3f)==1) procsbasicpara(0x75);  //呼叫次数
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}

//“过滤迂限”选择“持续时间”“结束时间”
		  indeffmt2=procsequencetag(0x78);  //过滤迂限 sequence
		  if((*recbuf&0x3f)==0) procsbasicpara(0x64);  //持续时间
		  else if((*recbuf&0x3f)==1) procsbasicpara(0x7a);  //结束时间
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}

//“过滤标准”选择“所拨数字”“主叫用户线”“业务键”“地址和业务”
		  indeffmt2=procsequencetag(0x7d);  //过滤标准 sequence
		  if((*recbuf&0x3f)==0) procsbasicpara(0x7f);  //所拨数字
		  else if((*recbuf&0x3f)==1) procINAPADDR(0x82);  //主叫用户线
		  else if((*recbuf&0x3f)==2) procsbasicpara(0x86);   //业务键
		  else if((*recbuf&0x3f)==0x3e)//地址和业务
		  {indeffmt3=procsequencetag(0x89);  //地址和业务 sequence
		   procINAPADDR(0x8b);    //被叫地址值
		   procsbasicpara(0x86);  //业务键
		   if((*recbuf&0x3f)==2) procINAPADDR(0x8f);    //主叫地址值
		   if((*recbuf&0x3f)==3) procINAPADDR(0x93);    //位置号码
		   if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
		  }//地址和业务
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}

//开始时间
		  if((*recbuf&0x3f)==4) procsbasicpara(0x97);  //所拨数字
//扩展
		  if((*recbuf&0x3f)==0x25) ProcExpand(0x9a);

		  if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
		break;


	 case 35:  //申请计费:35
		  indeffmt=procsequencetag(0x01);
//ACH帐单计费特性
		  indeffmt2=procsequencetag(0x03); //ACH帐单计费特性 sequence
////计费模式
		  if((*recbuf&0x3f)==0) procsbasicpara(0x05);
////计费记录标识
		  if((*recbuf&0x3f)==1) procsbasicpara(0x08);
////计费动作(枚举)
		  if((*recbuf&0x3f)==2) procsbasicpara(0x0b);
////计费部分(枚举)
		  if((*recbuf&0x3f)==4) procsbasicpara(0x0e);
////计费记录处理
		  if((*recbuf&0x3f)==5) procsbasicpara(0x11);
////主叫用户号码
		  if((*recbuf&0x3f)==6) procINAPADDR(0x14);
////被叫用户号码
		  if((*recbuf&0x3f)==7) procINAPADDR(0x18);
////目标地址号码
		  if((*recbuf&0x3f)==8) procINAPADDR(0x1c);
////位置号码
		  if((*recbuf&0x3f)==9) procINAPADDR(0x20);
////计费记录标识指示
		  if((*recbuf&0x3f)==10) procsbasicpara(0x24);
////规定的计费号码
		  if((*recbuf&0x3f)==11) procINAPCHGADDR(0x27);
////附加费
		  if((*recbuf&0x3f)==0x2c) ProcAdditionalCharg(0x2b);  //附加费
////计费类别
		  if((*recbuf&0x3f)==13) procsbasicpara(0x33);  
////计费调整率
		  if((*recbuf&0x3f)==0x2e) ProcAdjustRate(0x36);  //计费调整率
////开始计费方式(枚举)
		  if((*recbuf&0x3f)==15) procsbasicpara(0x3e);  
////停止计费方式(枚举)
		  if((*recbuf&0x3f)==16) procsbasicpara(0x41);  
////详细帐单计费记录类型
		  if((*recbuf&0x3f)==17) procsbasicpara(0x44);  
////是否发送计费信息(枚举)
		  if((*recbuf&0x3f)==18) procsbasicpara(0x47);
////透明参数
		   if((*recbuf&0x3f)==19) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==20) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==21) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==22) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==23) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==24) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==25) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==26) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==27) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==28) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==29) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==30) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==31) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==32) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==33) procsbasicpara(0x4a);  //透明参数
		   if((*recbuf&0x3f)==34) procsbasicpara(0x4a);  //透明参数
////呼叫监视
		   if((*recbuf&0x3f)==35)//呼叫监视
		   {indeffmt3=procsequencetag(0x4d);  //呼叫监视 sequence
		    if((*recbuf&0x3f)==0x21)//监视方式
			{indeffmt4=procsequencetag(0x4f);//监视方式 sequence
			 if((*recbuf&0x3f)==1) procsbasicpara(0x51);  //选择费用
			 else if((*recbuf&0x3f)==2) procsbasicpara(0x54);  //选择时间
			 if(indeffmt4!=0) {recbuf+=2;UDTlen-=2;}
			}//监视方式
		    if((*recbuf&0x3f)==0x22)//到达前告警
			{indeffmt4=procsequencetag(0x57);//到达前告警 sequence
			 if((*recbuf&0x3f)==0) procsbasicpara(0x59);  //提前告警时间
			 if((*recbuf&0x3f)==0x21) ProcSendingInfo(0x5c,0xad);  //告警指示:“要发送的信息”
			 if(indeffmt4!=0) {recbuf+=2;UDTlen-=2;}
			}//到达前告警
		    if((*recbuf&0x3f)==3) procCase(0x8f); //强制释放原因
		    if((*recbuf&0x3f)==4) procsbasicpara(0x92);    //报告时间间隔
			if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
		   }//呼叫监视
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}

//“发送结果给SCP”(BOOL)
		  if((*recbuf&0x3f)==1) procsbasicpara(0x95);

//计费方式”选择“发方”“收方”
		  if((*recbuf&0x3f)==2)
		  {indeffmt2=procsequencetag(0x98);
		   if((*recbuf&0x3f)==0) procsbasicpara(0x9a);  //选择“发方”
		   else if((*recbuf&0x3f)==1) procsbasicpara(0x9d);  //选择“收方”
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }
//“扩展”
		  if((*recbuf&0x3f)==0x23) ProcExpand(0xa0);

		  if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
		  break;

	 case 36:  //申请计费报告:36
		  indeffmt=procsequencetag(0x01);
//业务键
		  if((*recbuf&0x3f)==0) procsbasicpara(0x03);
//计费模式
		  if((*recbuf&0x3f)==1) procsbasicpara(0x06);
//计费记录标识
		  if((*recbuf&0x3f)==5) procsbasicpara(0x09);
//计费用户标识指示
		  if((*recbuf&0x3f)==7) procsbasicpara(0x0c);
//规定的计费号码
		  if((*recbuf&0x3f)==8) procINAPCHGADDR(0x0F);
//主叫用户号码
		  if((*recbuf&0x3f)==9) procINAPADDR(0x13);
//被叫用户号码
		  if((*recbuf&0x3f)==10) procINAPADDR(0x17);
//目标地址号码
		  if((*recbuf&0x3f)==11) procINAPADDR(0x1b);
//位置号码
		  if((*recbuf&0x3f)==12) procINAPADDR(0x1f);
//开始日期和时间
		  if((*recbuf&0x3f)==13) procsbasicpara(0x23);
//结束日期和时间
		  if((*recbuf&0x3f)==14) procsbasicpara(0x26);
//持续时间
		  if((*recbuf&0x3f)==15) procsbasicpara(0x29);
//呼叫费用
		  if((*recbuf&0x3f)==16) procsbasicpara(0x2c);
//“承载能力”选择“承载能力1”“传输媒介要求”
		  if((*recbuf&0x3f)==0x31)//承载能力
		  {indeffmt2=procsequencetag(0x2f);
		   if((*recbuf&0x3f)==0) procsbasicpara(0x31); //承载能力1
		   else if((*recbuf&0x3f)==1) procsbasicpara(0x34); //传输媒介要求
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }//承载能力
//计费类别
		  if((*recbuf&0x3f)==18) procsbasicpara(0x37);
//报告原因(枚举)
		  if((*recbuf&0x3f)==19) procsbasicpara(0x3a);
//时间标记
		  if((*recbuf&0x3f)==20) procsbasicpara(0x3d);
//监视结果
		  if((*recbuf&0x3f)==0x35)//监视结果
		  {indeffmt2=procsequencetag(0x40); //监视结果 sequence
////“监视方式”选择“所用费用”“所用时间”
		   if((*recbuf&0x3f)==0) procsbasicpara(0x44);  //所用费用
		   else if((*recbuf&0x3f)==1) procsbasicpara(0x47); //所用时间
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }//监视结果

		  if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
		  break;

	 case 16:  //辅助请求指令:16
		  indeffmt=procsequencetag(0x01);
//相关ID
		  procsbasicpara(0x03);
//IP可用性
		  if((*recbuf&0x3f)==1) procsbasicpara(0x06);
//IPSSP能力
		  if((*recbuf&0x3f)==2) procsbasicpara(0x09);
//“扩展”
		  if((*recbuf&0x3f)==0x23) ProcExpand(0x0c);

		  if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
		  break;


	 case 41:  //呼叫间隙:41
		  indeffmt=procsequencetag(0x01);
//“间隙标准”选择“被叫地址值”“根据业务间隙”“被叫地址和业务”“主叫地址和业务”
		  indeffmt2=procsequencetag(0x03);
		  if((*recbuf&0x3f)==0) procINAPADDR(0x05); //选择“被叫地址值”
		  else if((*recbuf&0x3f)==0x22) //“根据业务间隙”
		  {indeffmt3=procsequencetag(0x09); //根据业务间隙 sequence
		   if((*recbuf&0x3f)==0) procsbasicpara(0x0b);	    //业务键
		   if((*recbuf&0x3f)==1) procsbasicpara(0x0e);	//DP标准(枚举)
		   if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
		  }//“根据业务间隙”
		  else if((*recbuf&0x3f)==0x3d)//“被叫地址和业务”:29
		  {indeffmt3=procsequencetag(0x11); //被叫地址和业务 sequence
		   if((*recbuf&0x3f)==0) procINAPADDR(0x05); //选择“被叫地址值”
		   if((*recbuf&0x3f)==1) procsbasicpara(0x0b);  //业务键
		   if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
		  }//“被叫地址和业务”
		  else if((*recbuf&0x3f)==0x3e)//“主叫地址和业务”:30
		  {indeffmt3=procsequencetag(0x11); //主叫地址和业务 sequence
		   if((*recbuf&0x3f)==0) procINAPADDR(0x15);      //主叫地址值
		   if((*recbuf&0x3f)==1) procsbasicpara(0x0b);	    //业务键
		   if((*recbuf&0x3f)==2) procINAPADDR(0x19);      //位置号码
		   if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
		  }//“主叫地址和业务”
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}

//“间隙指示”
		  if((*recbuf&0x3f)==0x21) 
		  {indeffmt2=procsequencetag(0x1d);  //间隙指示 sequence
		   if((*recbuf&0x3f)==0) procsbasicpara(0x1f);	  //持续时间
		   if((*recbuf&0x3f)==1) procsbasicpara(0x22);	  //间隙间隔
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }

//“控制类型(枚举)”
		  if((*recbuf&0x3f)==2) procsbasicpara(0x25);  //控制类型(枚举)

//“间隙处理”选择“要发送的信息”“释放愿因”“都要”
		  if((*recbuf&0x3f)==0x23)//间隙处理
		  {indeffmt2=procsequencetag(0x1d);  //间隙处理 sequence
		   if((*recbuf&0x3f)==0x20) ProcSendingInfo(0x2a,0x71);	//要发送的信息
		   else if((*recbuf&0x3f)==1) procsbasicpara(0x5f);//释放愿因
		   else if((*recbuf&0x3f)==0x22)//“要发送的信息”“释放愿因”都要
		   {indeffmt3=procsequencetag(0x62);  
			if((*recbuf&0x3f)==0x20) ProcSendingInfo(0x2a,0x71);	//要发送的信息
			if((*recbuf&0x3f)==1) procsbasicpara(0x5f);   //释放愿因
		    if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
		   }//“要发送的信息”“释放愿因”都要
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }//间隙处理
		  
//“扩展”
		  if((*recbuf&0x3f)==0x24) ProcExpand(0x64);

		  if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
		  break;


	 case 44:  //呼叫信息报告:44
		  indeffmt=procsequencetag(0x01);
//所请求的信息清单
		  indeffmt2=procsequencetag(0x03);  //所请求的信息清单 sequence
////所请求的信息
		  while(*recbuf==0x30)//所请求的信息
		  {indeffmt3=procsequencetag(0x05);  //所请求的信息 sequence
		   procsbasicpara(0x07);   //所请求的信息类型(枚举)
//“所请求的信息值”:以下5项选择其一
		   indeffmt3+=procsequencetag(0x0a);  //所请求的信息值 sequence
		   if((*recbuf&0x3f)==0) procsbasicpara(0x0c);  //呼叫历时时间值
		   else if((*recbuf&0x3f)==1) procsbasicpara(0x0f); //呼叫停止时间
		   else if((*recbuf&0x3f)==2) procsbasicpara(0x12);    //呼叫连接历时时间
		   else if((*recbuf&0x3f)==3) procINAPADDR(0x15);   //被叫地址值
		   else if((*recbuf&0x3f)==4) procsbasicpara(0x09); //释放愿因值
		   else
		   {
			 procmoredatadisp(UDTlen); //add by 2000.06.14
			 UDTlen = 0;
			 return;
		   }
		   if(indeffmt3!=0) {recbuf+=2*indeffmt3;UDTlen-=2*indeffmt3;}
		  }//所请求的信息
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}

//“相关ID”
		  if((*recbuf&0x3f)==1) procsbasicpara(0x1c); //相关ID
		  
//“扩展”
		  if((*recbuf&0x3f)==0x24) ProcExpand(0x1f);

		  if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
		  break;


	 case 45:  //呼叫信息请求:45
		  indeffmt=procsequencetag(0x01);
//所请求的信息类型清单
		  indeffmt2=procsequencetag(0x03);  //所请求的信息类型清单 sequence
////所请求的信息类型
		  while(*recbuf==0x30)//所请求的信息类型
		       procsbasicpara(0x05);   //所请求的信息类型(枚举)
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}

//“相关ID”
		  if((*recbuf&0x3f)==1) procsbasicpara(0x08); //相关ID
		  

⌨️ 快捷键说明

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