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

📄 svinapdisp.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//“扩展”
		  if((*recbuf&0x3f)==0x2f) ProcExpand(0x3b);
//触发类型(枚举)
		  if((*recbuf&0x3f)==16) procsbasicpara(0x48);
//高层一致性
		  if((*recbuf&0x3f)==23) procsbasicpara(0x4b);
//业务相互作用表示语
		  if((*recbuf&0x3f)==24) procsbasicpara(0x4e);
//附加主叫用户号码
		  if((*recbuf&0x3f)==25) procINAPADDR(0x51);
//前向呼叫指示
		  if((*recbuf&0x3f)==26) procsbasicpara(0x55);
//“承载能力”选择“承载能力1”“传输媒介要求”
		  if((*recbuf&0x3f)==0x3b)//承载能力:27
		  {indeffmt2=procsequencetag(0x58);//承载能力 sequence
		   if((*recbuf&0x1f)==0) procsbasicpara(0x5a); //承载能力1
		   else if((*recbuf&0x1f)==1) procsbasicpara(0x5d); //传输媒介要求
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }//承载能力
//BCSM事件类型(枚举)
		  if((*recbuf&0x3f)==28) procsbasicpara(0x60);
//改向用户ID
		  if((*recbuf&0x3f)==29) procINAPADDR(0x63);
//改向信息
		  if((*recbuf&0x3f)==30) procsbasicpara(0x67);

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

	 case 32:  //启动试呼:32
		  indeffmt=procsequencetag(0x01); //sequence
//目的地路由地址
		  indeffmt2=procsequencetag(0x03); //目的地路由地址 sequence
		  while((*recbuf&0x3f)==0x04)  procINAPADDR(0x05);  //被叫用户号码
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
//振铃模式
		  if((*recbuf&0x3f)==1) procsbasicpara(0x09);
//与ISDN接入相关的信息
		  if((*recbuf&0x3f)==2) procsbasicpara(0x0c);
//跨越标志
		  if((*recbuf&0x3f)==3) procsbasicpara(0x0f);
//“扩展”
		  if((*recbuf&0x3f)==0x24) ProcExpand(0x13);
//业务相互作用表示语
		  if((*recbuf&0x3f)==29) procsbasicpara(0x20);
//主叫用户号码
		  if((*recbuf&0x3f)==30) procINAPADDR(0x23);

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

	 case 47:  //播送通知:47
		  indeffmt=procsequencetag(0x01); //sequence
//要发送的信息
		  if((*recbuf&0x3f)==0x20) ProcSendingInfo(0x03,0x4b); //要发送的信息
//禁止由IP启动拆线(BOOL)
		  if((*recbuf&0x3f)==0x01) procsbasicpara(0x38);
//请求通知完成(BOOL)
		  if((*recbuf&0x3f)==0x02) procsbasicpara(0x3b);
//“扩展”
		  if((*recbuf&0x3f)==0x23) ProcExpand(0x3e);

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

	 case 48:  //提示并收集用户信息:48
		  if(compt==1)//operate
		  {indeffmt=procsequencetag(0x01); //sequence
//收集的信息选择“收集的数字”“IA5信息”
		   indeffmt2=procsequencetag(0x03); //收集的信息 sequence
		   if((*recbuf&0x3f)==0x20)//收集的数字
		   {indeffmt3=procsequencetag(0x05); //收集的数字 sequence
			if((*recbuf&0x3f)==0) procsbasicpara(0x07);  //最小数字个数
			if((*recbuf&0x3f)==1) procsbasicpara(0x0a);  //最大数字个数
			if((*recbuf&0x3f)==2) procsbasicpara(0x0d);  //应答结束数字
			if((*recbuf&0x3f)==3) procsbasicpara(0x10);  //取消数字
			if((*recbuf&0x3f)==4) procsbasicpara(0x13);  //开始数字
			if((*recbuf&0x3f)==5) procsbasicpara(0x16);  //首位超时
			if((*recbuf&0x3f)==6) procsbasicpara(0x19);  //位间超时
			if((*recbuf&0x3f)==7) procsbasicpara(0x1c);  //差错处理(枚举)
			if((*recbuf&0x3f)==8) procsbasicpara(0x1f);  //中断通知表示语(BOOL)
			if((*recbuf&0x3f)==9) procsbasicpara(0x22);  //语音信息(BOOL)
			if((*recbuf&0x3f)==10) procsbasicpara(0x25);  //语音反馈(BOOL)
		    if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
		   }//收集的数字
		   else if((*recbuf&0x3f)==1) procsbasicpara(0x28);  //IA5信息(BOOL)

		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
//禁止由IP启动拆线(BOOL)
		   procsbasicpara(0x2b);
//要发送的信息
		   if((*recbuf&0x3f)==0x22) ProcSendingInfo(0x2e,0x76);
//“扩展”
		   if((*recbuf&0x3f)==0x23) ProcExpand(0x63);

		   if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
		  }//operate
		  else//result
		  {if((*recbuf&0x3f)==0) procsbasicpara(0x70); //数字响应
		   else if((*recbuf&0x3f)==1) procsbasicpara(0x73); //IA5响应
		  }//result
		  break;

	 case 22:  //释放呼叫:22
		  procCase(0x01);
		  break;


	 case 37:  //请求报告当前状态:37
		  if(compt==1)//operate
		  {if((*recbuf&0x3f)==0) procsbasicpara(0x01);  //选择"用户线ID"
		   else if((*recbuf&0x3f)==0x21) procResourceID(0x04); //选择"资源ID"
		  }//operate
		  else//result
		  {indeffmt=procsequencetag(0x1a);  //sequence
//资源状态
		   if((*recbuf&0x3f)==0) procsbasicpara(0x1c);
//资源ID
		   if((*recbuf&0x3f)==0x21) procResourceID(0x04);//"资源ID"
//“扩展”
		   if((*recbuf&0x3f)==0x22) ProcExpand(0x1f);

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

	 case 38:  //请求报告每一状态变化:38
		  indeffmt=procsequencetag(0x1a);  //sequence
//资源ID
		  procResourceID(0x03);
//资源状态
		  if((*recbuf&0x3f)==1) procsbasicpara(0x17);
//相关ID
		  if((*recbuf&0x3f)==2) procsbasicpara(0x1a);
//监视持续时间
		  if((*recbuf&0x3f)==3) procsbasicpara(0x1d);
//“扩展”
		   if((*recbuf&0x3f)==0x24) ProcExpand(0x20);
//“承载能力”选择“承载能力1”“传输媒介要求”
		  if((*recbuf&0x3f)==0x25)//承载能力
		  {indeffmt2=procsequencetag(0x2d);
		   if((*recbuf&0x3f)==0) procsbasicpara(0x2f); //承载能力1
		   else if((*recbuf&0x3f)==1) procsbasicpara(0x32); //传输媒介要求
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }//承载能力

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

	 case 25:  //请求通知计费事件:25
		  indeffmt=procsequencetag(0x01);  //sequence
		  while(*recbuf==0x30) //计费事件,P57
		  {len = UDTlen;
		   indeffmt2=procsequencetag(0x03);  //计费事件 sequence
//计费事件类型
		   procsbasicpara(0x05);
//监视方式(枚举)
		   procsbasicpara(0x08);
//LEGID
		   if((*recbuf&0x3f)==0x22) procLegID(0x0b);

		   if(len <= UDTlen)
		   {
			 procmoredatadisp(UDTlen); //add by 2000.06.14
			 UDTlen = 0;
			 return;
		   }
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }//计费事件
		  if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
		  break;

	 case 23:  //请求报告BCSM事件:23
		  indeffmt=procsequencetag(0x01);  //sequence
//BCSM事件组
		  indeffmt2=procsequencetag(0x03);  //BCSM事件组 sequence
		  while(*recbuf==0x30)//BCSM事件
		  {len = UDTlen;
		   indeffmt3=procsequencetag(0x05);  //BCSM事件 sequence
		   procsbasicpara(0x07);  //BCSM事件类型(枚举)
		   procsbasicpara(0x0a);  //监视方式(枚举)
		   if((*recbuf&0x3f)==0x22) procLegID(0x0d); //LEGID
		   if((*recbuf&0x3f)==0x3e)//DP规定准则:30
		   {indeffmt4=procsequencetag(0x15);//DP规定准则 sequence
		    if((*recbuf&0x3f)==0) procsbasicpara(0x17);  //数字个数
		    else if((*recbuf&0x3f)==1) procsbasicpara(0x1a);  //应用定时器
		    if(indeffmt4!=0) {recbuf+=2;UDTlen-=2;}
		   }//DP规定准则

		   if(len <= UDTlen)
		   {
			 procmoredatadisp(UDTlen); //add by 2000.06.14
			 UDTlen = 0;
			 return;
		   }
		   if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
		  }//BCSM事件
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
//BCSM事件相关ID
		  if((*recbuf&0x3f)==1) procsbasicpara(0x1d);
//“扩展”
		  if((*recbuf&0x3f)==0x22) ProcExpand(0x20);

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

	 case 33:  //重设定时器:33
		  indeffmt=procsequencetag(0x01);  //sequence
//定时器ID(枚举)
		  if((*recbuf&0x3f)==0) procsbasicpara(0x03);
//定时器值
		  if((*recbuf&0x3f)==1) procsbasicpara(0x06);
//“扩展”
		  if((*recbuf&0x3f)==0x22) ProcExpand(0x09);

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

	 case 30:  //选择设备:30
		  indeffmt=procsequencetag(0x01);  //sequence
//振铃模式
		  if((*recbuf&0x3f)==0) procsbasicpara(0x03);
//目的地路由地址,P59
		  if((*recbuf&0x3f)==0x21)//目的地路由地址
		  {indeffmt2=procsequencetag(0x06);//目的地路由地址 sequence
		   while((*recbuf&0x3f)==0x04) procINAPADDR(0x08); //被叫用户号码
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }//目的地路由地址
//与ISDN接入相关的信息
		  if((*recbuf&0x3f)==2) procsbasicpara(0x0c);
//被叫设备群
		  if((*recbuf&0x3f)==0x23)//被叫设备群
		  {indeffmt2=procsequencetag(0x0f);//被叫设备群 sequence
		   if((*recbuf&0x3f)==0) procsbasicpara(0x11);     //中继群ID
		   else if((*recbuf&0x3f)==1) procsbasicpara(0x14);//单个设备ID
		   else if((*recbuf&0x3f)==2) procsbasicpara(0x17);//搜索群
		   else if((*recbuf&0x3f)==3) procsbasicpara(0x1a);//路由索引
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }//被叫设备群
//被叫设备群成员
		  if((*recbuf&0x3f)==4) procsbasicpara(0x1d);
//原被叫用户ID
		  if((*recbuf&0x3f)==5) procINAPADDR(0x20);
//“扩展”
		  if((*recbuf&0x3f)==0x26) ProcExpand(0x24);

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


	 case 46:  //发送计费信息:46,具体信息待定
		  procSourcePARAdisp(0x01);  //sequence
		  break;

	 case 43:  //业务过滤响应:43
		  indeffmt=procsequencetag(0x01);  //sequence
//计数器值
		  indeffmt2=procsequencetag(0x03);  //计数器值 sequence
		  while(*recbuf==0x30)//计数器和值
		  {len=UDTlen;
		   indeffmt3=procsequencetag(0x05);  //计数器和值 sequence
		   procsbasicpara(0x07);//计数器ID
		   procsbasicpara(0x0a);//计数器值

		   if(len <= UDTlen)
		   {
			 procmoredatadisp(UDTlen); //add by 2000.06.14
			 UDTlen = 0;
			 return;
		   }
		   if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
		  }//计数器和值
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
//“过滤标准”选择“所拨数字”“主叫用户线ID”“业务键”“地址和业务”,P59
		  indeffmt2=procsequencetag(0x0d);  //计数器值 sequence
		  if((*recbuf&0x3f)==0) procsbasicpara(0x0f);  //所拨数字
		  else if((*recbuf&0x3f)==1) procsbasicpara(0x12);  //主叫用户线ID
		  else if((*recbuf&0x3f)==2) procsbasicpara(0x15);     //业务键
		  else if((*recbuf&0x3f)==0x23)//地址和业务
		  {indeffmt3=procsequencetag(0x18);  //地址和业务 sequence
		   procINAPADDR(0x1a);  //被叫地址值
		   procsbasicpara(0x15);  //业务键
		   if((*recbuf&0x3f)==2) procINAPADDR(0x1e);  //主叫地址值
		   if((*recbuf&0x3f)==3) procINAPADDR(0x22);  //位置号码
		   if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
		  }//地址和业务
		  if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
//“扩展”
		  if((*recbuf&0x3f)==0x22) ProcExpand(0x26);
//响应条件(枚举)
		  if((*recbuf&0x3f)==3) procsbasicpara(0x33);

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

	 case 49:  //专用资源报告:49
		  procNULL(0x01);
		  break;

	 case 40:  //状态报告:40
		  indeffmt=procsequencetag(0x01);  //sequence
//资源状态(枚举)
		  if((*recbuf&0x3f)==0) procsbasicpara(0x03);
//相关ID
		  if((*recbuf&0x3f)==1) procsbasicpara(0x06);
//资源ID
		  if((*recbuf&0x3f)==0x22) procResourceID(0x09);
//“扩展”
		  if((*recbuf&0x3f)==0x23) ProcExpand(0x20);
//报告条件(枚举)
		  if((*recbuf&0x3f)==4) procsbasicpara(0x2d);

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

	 default:
		 procmoredatadisp(UDTlen); //add by 2000.06.14
		 UDTlen = 0;
		 break;
	}//switch
}



void procINAPERRdisp(unsigned char ec)
{ unsigned char indeffmt;

   switch(ec)
   {
    case 1://取消失败:1
		  indeffmt=procsequencetag(0x01);  //sequence
		  procsbasicpara(0x03);  //问题(枚举)
		  procsbasicpara(0x06);  //操作
		  if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
		  break;


    case 10://所请求的信息差错:10
    case 12://任务被拒绝:12
		  procsbasicpara(0x01);  //枚举
		  break;

    case 11://系统故障:11
		  procsbasicpara(0x01);  //不知道网络资源(枚举)
		  break;

	default:break;
   }//switch
}

⌨️ 快捷键说明

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