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

📄 svmapdisp.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					return;
			}
			if((*recbuf&0x1f)==0x9) 
			{
				procExtension(USERDATAfld[192]);//扩展(extension) zxf add
				if(templen2>=iAllLength)
					templen2-=iAllLength;
				else
					return;
			}
			if(UDTlen>=indeffmt2*2)//add 2000.07.24 by LHG
			{	 
				recbuf+=indeffmt2*2;
				UDTlen-=indeffmt2*2;
			}
			if(templen2!=0)
				return;
		}//前转特性
		if(UDTlen>=indeffmt1*2)//add 2000.07.24 by LHG
		{	
			recbuf+=indeffmt1*2;
			UDTlen-=indeffmt1*2;
		}
		if(templen1!=0)
			return;
		if((*recbuf&0x1f)==0 &&templen>0)
		{
			procExtension(USERDATAfld[192]);//扩展(extension) zxf add
			if(templen>=iAllLength)
				templen-=iAllLength;
			else 
				return;
		}
		
		if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
		{	
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if(templen!=0)
			return;
	}//SS信息选择"前转信息"
	else if((*recbuf&0x1f)==1)//SS信息选择"限制呼叫信息"
	{
		indeffmt=procsequencetag(*(buf+11));  //限制呼叫信息 sequence
		templen=iDataLength-indeffmt*2;
		if((*recbuf&0x3f)==4&&templen>0)
		{
			procsbasicparamap2plus(*(buf+12));  //SS码
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
		}
		indeffmt1=procsequencetag(*(buf+13));  //限制呼叫特性清单 sequence
		templen1=iDataLength-indeffmt1*2;
		if(templen>=iAllLength)
			templen-=iAllLength;
		else
			return;
		while(*recbuf==0x30&&templen1>0)  //限制呼叫特性 sequence
		{
			indeffmt2=procsequencetag(*(buf+14));
			templen2=iDataLength-indeffmt2*2;
			if(templen1>=iAllLength)
				templen1-=iAllLength;
			else
				return;
			//基本业务:"承载业务"和"电信业务"选择其一
			if((*recbuf&0x3f)==2&&templen2>0)
			{
				procsbasicparamap2plus(*(buf+15)); //承载业务
				if(templen2>=iAllLength)
					templen2-=iAllLength;
				else
					return;
			}
			else if((*recbuf&0x3f)==3&&templen2>0)
			{
				procsbasicparamap2plus(*(buf+16)); //电信业务
				if(templen2>=iAllLength)
					templen2-=iAllLength;
				else
					return;
			}
			if((*recbuf&0x3f)==4&&templen2>0) 
			{
				procsbasicparamap2plus(*(buf+17));  //SS状态
				if(templen2>=iAllLength)
					templen2-=iAllLength;
				else
					return;
			}
			if(*recbuf==0x30&&templen2>0)
			{
				procExtension(USERDATAfld[192]);//扩展(extension) zxf add
				if(templen2>=iAllLength)
					templen2-=iAllLength;
				else
					return;
			}
			if(UDTlen>=indeffmt2*2)//add 2000.07.24 by LHG
			{
				recbuf+=indeffmt2*2;
				UDTlen-=indeffmt2*2;
			}
			if(templen2!=0)
				return;
		}//前转特性
		if(UDTlen>=indeffmt1*2)//add 2000.07.24 by LHG
		{
			recbuf+=indeffmt1*2;
			UDTlen-=indeffmt1*2;
		}
		if(templen1!=0)
			return;
		if(*recbuf==0x30&&templen>0)
		{
			procExtension(USERDATAfld[192]);//扩展(extension) zxf add
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
		}
		if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
		{
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if(templen!=0)
			return;
	}//SS信息选择"限制呼叫信息"
	else if((*recbuf&0x1f)==2)//SS信息选择"CUG信息"
	{
		indeffmt=procsequencetag(USERDATAfld[160]);  //CUG信息 sequence
		templen=iDataLength-indeffmt*2;
		iChangeData1=templen;
		//CUG签约清单
		//procCUGqylst();//zxf update
		procCUGqylstmap2plus();
		if(templen>iChangeData1)
			templen=iChangeData1;
		else
			return;
		//add 2000.07.24 by LHG
		if(UDTlen==0)
			return;
		//CUG特性清单
		if(*recbuf==0x30&&templen>0)//exist"CUG特性清单"
		{
			indeffmt2=procsequencetag(USERDATAfld[169]);  //CUG特性清单
			templen1=iDataLength-indeffmt2*2;
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
			counter=0;
			while(*recbuf==0x30 && counter<32&&templen1>0)//基本业务组最大数目:13 or map2+=32
			{
				indeffmt3=procsequencetag(USERDATAfld[170]); //CUG特性 sequence
				templen2=iDataLength-indeffmt3*2;
				if(templen1>=iAllLength)
					templen1-=iAllLength;
				else
					return;
				if((*recbuf&0x3f)==2&&templen2>0)
				{
					procsbasicparamap2plus(USERDATAfld[171]); //承载业务码
					if(templen2>=iAllLength)
						templen2-=iAllLength;
					else
						return;
				}
				else if((*recbuf&0x3f)==3&&templen2>0)
				{
					procsbasicparamap2plus(USERDATAfld[172]); //电信业务码
					if(templen2>=iAllLength)
						templen2-=iAllLength;
					else
						return;
				}
				if((*recbuf&0x3f)!=4&&templen2>0)
				{
					procsbasicparamap2plus(USERDATAfld[173]);  //优先CUG指示
					if(templen2>=iAllLength)
						templen2-=iAllLength;
					else
						return;
				}
				procsbasicparamap2plus(USERDATAfld[174]);  //CUG内限制
				if(templen2>=iAllLength)
					templen2-=iAllLength;
				else
					return;
				if(*recbuf==0x30&&templen2>0) 
				{
					procExtension(USERDATAfld[192]);//扩展(extension) zxf add
					if(templen2>=iAllLength)
						templen2-=iAllLength;
					else
						return;
				}
				counter++;
				if(UDTlen>=indeffmt3*2)//add 2000.07.24 by LHG
				{
					recbuf+=indeffmt3*2;
    				UDTlen-=indeffmt3*2;
				}
				if(templen2!=0)
					return;
			}//whileCUG特性清单
			if(UDTlen>=indeffmt2*2)//add 2000.07.24 by LHG
			{recbuf+=indeffmt2*2;
			 UDTlen-=indeffmt2*2;
			}
			if(templen1!=0)
				return;
			
		}//exist"CUG特性清单"

		if((*recbuf&0x1f)==0&&templen>0) 
		{
			procExtension(USERDATAfld[192]);//扩展(extension) zxf add
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
		}

		if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
		{
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if(templen!=0)
			return;
	}//SS信息选择"CUG信息"
	else if((*recbuf&0x1f)==3)//SS信息选择"SS数据"
	{
		indeffmt=procsequencetag(*(buf+18));  //SS数据 sequence
        templen=iDataLength-indeffmt*2;
		if((*recbuf&0x3f)==0x04&&templen>0) 
		{
			procsbasicparamap2plus(*(buf+19));  //SS码
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
		}
		if((*recbuf&0x3f)==0x04&&templen>0)
		{
			procsbasicparamap2plus(*(buf+20));  //SS状态
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
		}

		//"SS签约"选择:“呼叫线识别限制选择”“超跃种类”,V2
		if((*recbuf&0x3f)==0x01&&templen>0)
		{
			procsbasicparamap2plus(*(buf+21));  //超跃种类
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
		}
		else if((*recbuf&0x3f)==0x02&&templen>0)
		{
			procsbasicparamap2plus(*(buf+22));  //呼叫线识别限制选择
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
		}
		if(*recbuf==0x30&&templen>0)////基本业务组清单,V2
		{
			indeffmt2=procsequencetag(*(buf+22));
			templen1=iDataLength-indeffmt2*2;
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
			while(((*recbuf&0x3f)==0x02||(*recbuf&0x3f)==0x03) && UDTlen>=3+2*indeffmt2&&templen1>0)
			{
				if((*recbuf&0x3f)==0x02&&templen1>0)
				{
					procsbasicparamap2plus(*(buf+24));//承载业务码
					if(templen1>=iAllLength)
						templen1-=iAllLength;
					else
						return;
				}
				else if((*recbuf&0x3f)==0x03)
				{
					procsbasicparamap2plus(*(buf+25));//电信业务码
					if(templen1>=iAllLength)
						templen1-=iAllLength;
					else
						return;
				}
			}//while
			if(UDTlen>=indeffmt2*2)//add 2000.07.24 by LHG
			{
				recbuf+=indeffmt2*2;
				UDTlen-=indeffmt2*2;
			}
			if(templen1!=0)
				return;
		}//基本业务组清单
		if((*recbuf&0x1f)==0x05&&templen>0) 
		{
			procExtension(USERDATAfld[192]);//扩展(extension) zxf add
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
		}
		if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
		{
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if(templen!=0) 
			return;
	}//SS信息选择"SS数据"
	else if((*recbuf&0x1f)==4)//emlpp信息
	{
		indeffmt=procsequencetag(USERDATAfld[0xc1]);  //Ssequence
		templen=iDataLength-indeffmt*2;
		procsbasicparamap2plus(USERDATAfld[0xc2]);//MaxEntitledPri
		if(templen>=iAllLength)
			templen-=iAllLength;
		else
			return;
		procsbasicparamap2plus(USERDATAfld[0xc3]);//默认优先级
		if(templen>=iAllLength)
			templen-=iAllLength;
		else
			return;
		if(*recbuf==0x30&&templen>0) 
		{
			procsbasicparamap2plus(USERDATAfld[0xc0]);//扩展(extension) zxf add
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
		}
		if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
		{
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if(templen!=0)
			return;
	}
	else
	{
		recbuf++;  //-->len
		len=procCONSTRUCTFMT(recbuf);
		procmoredatadisp(len); //add by 2000.07.24
		UDTlen -= len+1;
	}
}

void procUSERDATAdisp(unsigned char *buf)//用户数据
{unsigned char li,indeffmt,indeffmt2,len;
    
	if((*recbuf&0x3f)==1)  //存在ms isdn(任选项)
		   procsISDNADDR(*buf);

	if((*recbuf&0x3f)==2)  //存在类别(任选项)
		   procsbasicparamap2plus(*(buf+1));
		 
	if((*recbuf&0x3f)==3)  //存在用户状态(任选项)
		   procsbasicparamap2plus(*(buf+2));
		 
	if((*recbuf&0x1f)==4)  //存在承载业务清单(任选项)
		 {indeffmt=procsequencetag(*(buf+3));  //承载业务清单sequence
		  while((*recbuf&0x3f)==0x04 && UDTlen>=3+2*indeffmt)  //8位组串tag=0x04
			  procsbasicparamap2plus(*(buf+4));

		  if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
		  {recbuf+=indeffmt*2;
		   UDTlen-=indeffmt*2;
		  }
		 }//存在承载业务清单

	if((*recbuf&0x1f)==6)  //存在电信业务清单(任选项)
		 {indeffmt=procsequencetag(*(buf+5));  //电信业务清单sequence
		  while((*recbuf&0x3f)==0x04 && UDTlen>=3+2*indeffmt)  //8位组串tag=0x04
			  procsbasicparamap2plus(*(buf+6));
		  if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
		  {recbuf+=indeffmt*2;
		   UDTlen-=indeffmt*2;
		  }
		 }//存在电信业务清单
		 
	if((*recbuf&0x1f)==7)  //存在被提供的SS(任选项)
	{if(*(recbuf+1)<=0x80) li=*(recbuf+1);
	 else li=*(recbuf+2);
	 indeffmt2=procsequencetag(*(buf+7));  //SS信息清单sequence
	 
	 if(indeffmt2!=0)//indefinite format
	 {
		 while(*(unsigned short *)recbuf!=0)
		 {len=UDTlen; procSSInfo(buf+8);
		  if(len<=UDTlen) return;
		 }
	  recbuf+=2;UDTlen-=2;
	 }//indefinite format
	 else//short or long format
	 {
		 do{len=UDTlen; procSSInfo(buf+8);
	        if(len<=UDTlen)
				return;
			len-=UDTlen;
			if(li<len)
				return;
	        li-=len;
		 }while(li!=0);
	 }//short or long format
	}//存在被提供的SS
	if((*recbuf&0x1f)==8)  //存在ODB-数据(任选项)
	{indeffmt=procsequencetag(*(buf+128));  //ODB-数据sequence
	 procsbasicparamap2plus(*(buf+129));  //ODB一般数据
	 if((*recbuf&0x3f)==3) procsbasicparamap2plus(*(buf+130));//ODB-HPLMN数据

	 if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
	 {recbuf+=indeffmt*2;
	  UDTlen-=indeffmt*2;
	 }
	}//存在电信业务清单
	if((*recbuf&0x1f)==9)  //存在由于不支持的特性漫游限制(NULL)(任选项)
		 procNULL(*(buf+131));
	if((*recbuf&0x1f)==10)  //存在区域签约数据(任选项)
	{indeffmt=procsequencetag(*(buf+132));  //区域签约数据sequence
	 while((*recbuf&0x3f)==0x04 && UDTlen>=3+2*indeffmt)  //8位组串tag=0x04
		procsbasicparamap2plus(*(buf+133));//签约码
	 if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
	 {recbuf+=indeffmt*2;
	  UDTlen-=indeffmt*2;
	 }
	}//存在区域签约数据
}
void procUSERDATAdispforMap2plus(unsigned char *buf)//用户数据
{
	unsigned char li,indeffmt,indeffmt2,len;
    BYTE icounter,indeffmt1,indeffmt3,indeffmt4,indeffmt5,indeffmt6,icounter1;//zxf add
	BYTE templen,templen1,templen2,templen3,templen4,templen5,templen6,templen7;//zxf
	if((*recbuf&0x3f)==1&&iChangeData>0)  //存在ms isdn(任选项)
	{
		procsISDNADDR(*buf);
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		else 
			return;
	}
	if((*recbuf&0x3f)==2&&iChangeData>0)  //存在类别(任选项)
	{
		   procsbasicparamap2plus(*(buf+1));
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		else 
			return;
	}
		 
	if((*recbuf&0x3f)==3&&iChangeData>0)  //存在用户状态(任选项)
	{
		   procsbasicparamap2plus(*(buf+2));
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		else 
			return;
	}
		 
	if((*recbuf&0x1f)==4&&iChangeData>0)  //存在承载业务清单(任选项)
	{
		indeffmt=procsequencetag(*(buf+3));  //承载业务清单sequence
		templen=iDataLength;
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		else 
			return;

		while((*recbuf&0x3f)==0x04 && UDTlen>=3+2*indeffmt&&templen>0)  //8位组串tag=0x04
		{
			procsbasicparamap2plus(*(buf+4));
			templen-=iAllLength;
		}
		if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
		{
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if((templen-indeffmt*2)!=0) 
			return;

	}//存在承载业务清单

	if((*recbuf&0x1f)==6&&iChangeData>0)  //存在电信业务清单(任选项)
	{
		indeffmt=procsequencetag(*(buf+5));  //电信业务清单sequence
		templen=iDataLength;
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		while((*recbuf&0x3f)==0x04 && UDTlen>=3+2*indeffmt&& templen>0)  //8位组串tag=0x04
		{

⌨️ 快捷键说明

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