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

📄 svmapdisp.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			procsbasicparamap2plus(*(buf+6));
			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)==7&&iChangeData>0)  //存在被提供的SS(任选项)
	{
		if(*(recbuf+1)<=0x80) li=*(recbuf+1);
		else li=*(recbuf+2);
		indeffmt2=procsequencetag(*(buf+7));  //SS信息清单sequence
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		else 
			return;
		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&&iChangeData>0)  //存在ODB-数据(任选项)
	{
		indeffmt=procsequencetag(*(buf+128));  //ODB-数据sequence
		templen=iDataLength;
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		procsbasicparamap2plus(*(buf+129));  //ODB一般数据
		templen-=iAllLength;
		if((*recbuf&0x3f)==3&&templen>0)
		{
			procsbasicparamap2plus(*(buf+130));//ODB-HPLMN数据
			templen-=iAllLength;
		}
		
		if(*recbuf==0x30&&templen>0) 
		{
			procExtension(0xc0);//扩展(extension)
			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)==9&&iChangeData>0)  //存在由于不支持的特性漫游限制(NULL)(任选项)
	{
		 procNULL(*(buf+131));
		 iChangeData-=2;
	}

	if((*recbuf&0x1f)==10&&iChangeData>0)  //存在区域签约数据(任选项)
	{
		indeffmt=procsequencetag(*(buf+132));  //区域签约数据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+133));//签约码
			templen-=iAllLength;
		}
		if(UDTlen>=indeffmt*2)//add 2000.07.24 by LHG
		{
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if((templen-indeffmt*2)!=0)
			return;
	}//存在区域签约数据
	//down for map2+
	if((*recbuf&0x1f)==11&&iChangeData>0)//vbs签约数据
	{
		indeffmt=procsequencetag(USERDATAfld[175]);  //vbs签约数据(vbsSubscriptData) sequence
		templen=iDataLength;
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		icounter=0;
		while((*recbuf==0x30)&&(icounter<50)&&templen>0)
		{
			indeffmt2=procsequencetag(USERDATAfld[176]);//话音广播数据(VBD)
			templen1=iDataLength;
			if(templen>=iAllLength)
				templen-=iAllLength;
			else 
				return;
			procsbasicparamap2plus(USERDATAfld[177]);//组标识(GroupId) 
			templen1-=iAllLength;
			if((*recbuf&0x1f)==0x05&&templen1>0)
			{
				procNULL(USERDATAfld[178]);//广播初始名称(BroadcastInitEntitle) 
				templen1-=2;
			}
			if(*recbuf==0x30&&templen1>0)
			{
				procExtension(USERDATAfld[0xc0]);//扩展sequence
				templen1-=iAllLength;
			}
			if(UDTlen>=indeffmt2*2)//add 2000.07.24 by LHG
			{
				recbuf+=indeffmt2*2;
				UDTlen-=indeffmt2*2;
			}
			if((templen1-indeffmt2*2)!=0)
				return;
			icounter++;
		}
		if(UDTlen>=indeffmt*2)
		{
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if((templen-indeffmt*2)!=0)
			return;

	}
	if((*recbuf&0x1f)==12&&iChangeData>0)//-vgcs签约数据
	{
		indeffmt=procsequencetag(USERDATAfld[179]);  //vgcs签约数据
		templen=iDataLength;
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		else 
			return;
		icounter=0;
		while((*recbuf==0x30)&&(icounter<50)&&templen>0)
		{
			indeffmt2=procsequencetag(USERDATAfld[180]);//话音组呼叫数据(VoiceGroupCallData)
			templen1=iDataLength;
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
			procsbasicparamap2plus(USERDATAfld[177]	);//组标识(GroupId) 
			templen1-=iAllLength;
			if(*recbuf==0x30&&templen1>0) 
			{
				procExtension(USERDATAfld[0xc0]);//扩展sequence
				templen1-=iAllLength;
			}
			if(UDTlen>=indeffmt2*2)
			{
				recbuf+=indeffmt2*2;
				UDTlen-=indeffmt2*2;
			}
			if((templen1-indeffmt2*2)!=0)
				return;
			icounter++;
		}
		if(UDTlen>=indeffmt*2)
		{
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if((templen-indeffmt*2)!=0)
			return;
	}
	if((*recbuf&0x1f)==13&&iChangeData>0)//vlrCamel签约信息
	{
		indeffmt=procsequencetag(USERDATAfld[181]);  //vlrCamel签约信息]
		if(iChangeData>=iAllLength)
			iChangeData-=iAllLength;
		else
			return;
		templen=iDataLength-indeffmt*2;
		//tag==0  13-0
		if((*recbuf&0x1f)==0&&templen>0)//o-CSI
		{
			indeffmt1=procsequencetag(USERDATAfld[182]);  //o-CSI sequence
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
			templen1=iDataLength-indeffmt1*2;
			icounter=0;
			indeffmt2=procsequencetag(USERDATAfld[183]);//o-BcsmCamelTDP数据清单
			if(templen1>=iAllLength)
				templen1-=iAllLength;
			else
				return;

			templen2=iDataLength-indeffmt*2;
			while((*recbuf==0x30)&&(icounter<=10)&&templen2>0)
			{
				indeffmt6=procsequencetag(USERDATAfld[184]);//-o-BcsmCamelTDP数据 
				if(templen2>=iAllLength) templen2-=iAllLength;
				else 
					break;
				templen3=iDataLength;
				procsbasicparamap2plus(USERDATAfld[185]);//o-BCSMTDP
				templen3-=iAllLength;
				procsbasicparamap2plus(USERDATAfld[186]);//业务键(ServiceKey) 
				templen3-=iAllLength;
				procsISDNADDR(USERDATAfld[187]);//gsmSCF地址 tag=xxx00000
				templen3-=iAllLength;
				procsbasicparamap2plus(USERDATAfld[188]);//默认呼叫处理 tag=xxx00001
				templen3-=iAllLength;
				if((*recbuf&0x1f)==2&&templen3>0) 
				{
					procExtension(USERDATAfld[0xc0]);//扩展sequence
					templen3-=iAllLength;
				}
				if((*recbuf&0x1f)==3&&templen3>0) //o-BcsmCamelTDP标准
				{
					indeffmt3=procsequencetag(USERDATAfld[189]);//o-BcsmCamelTDP标准
					templen4=iDataLength;
					if(templen3>=iAllLength)
						templen3-=iAllLength;
					else
						break;
					if((*recbuf&0x1f)==0&&templen4>0) //目的号码标准
					{
						indeffmt4=procsequencetag(USERDATAfld[190]);//目的号码标准
						templen5=iDataLength;
						if(templen4>=iAllLength)
							templen4-=iAllLength;
						else
							break;
						procsbasicparamap2plus(USERDATAfld[191]);//匹配类型(matchType)
						templen5-=iAllLength;
						icounter1=0;
						if((*recbuf&0x1f)==1&&templen5>0)//destinationNumberList
						{
							indeffmt5=procsequencetag(USERDATAfld[0xc4]);//目的号码清单
							templen6=iDataLength;
							if(templen5>=iAllLength)
								templen5-=iAllLength;
							else
								break;
							while(((*recbuf&0x1f)==1)&&(icounter1<10)&&templen6>0)//目的号码清单
							{
								procsISDNADDR(USERDATAfld[0xc5]	);//目的号码(DestNumber)
								templen6-=iAllLength;
								icounter1++;
							}
							if(UDTlen>=indeffmt5*2){recbuf+=indeffmt5*2;UDTlen-=indeffmt5*2;}
							if((templen6-indeffmt5*2)!=0)
								return;
						}
						if((*recbuf&0x1f)==2&&templen5>0)//DestinationNumberLengthList
						{
							icounter1=0;
							indeffmt5=procsequencetag(USERDATAfld[0xc6]);//目的号码长度清单
							templen6=iDataLength;
							if(templen5>=iAllLength)
								templen5-=iAllLength;
							else
								return;
							templen6=iDataLength;
							while(((*recbuf&0x1f)==2)&&(icounter1<3)&&templen6>0)//目的号码长度清单
							{
								procsbasicparamap2plus(USERDATAfld[0xc7]);//目的号码长度(DestNoLen)
								templen6-=iAllLength;
								icounter1++;
							}
							if(UDTlen>=indeffmt5*2){recbuf+=indeffmt5*2;UDTlen-=indeffmt5*2;}
							if((templen6-indeffmt5*2)!=0)
								return;
						}
						
						if(UDTlen>=indeffmt4*2){recbuf+=indeffmt4*2;UDTlen-=indeffmt4*2;}
						if((templen5-indeffmt4*2)!=0)
							return;
					}
					if((*recbuf&0x1f)==1&&templen4>0)//基本业务标准
					{
							indeffmt5=procsequencetag(USERDATAfld[0xc8]);//基本业务标准
							templen5=iDataLength;
							if(templen4>=iAllLength)
								templen4-=iAllLength;
							else
								return;
							if((*recbuf&0x1f)==2&&templen5>0)
							{
								procsbasicparamap2plus(USERDATAfld[171]);//承载业务码
								templen5-=iAllLength;
							}
							else if((*recbuf&0x1f)==3&&templen5>0)
							{
								procsbasicparamap2plus(USERDATAfld[173]);//电信业务码
								templen5-=iAllLength;
							}
							if(UDTlen>=indeffmt5*2){recbuf+=indeffmt5*2;UDTlen-=indeffmt5*2;}
							if((templen5-indeffmt5*2)!=0)
								return;
					}
					if((*recbuf&0x1f)==2&&templen4>0)
					{
						procsbasicparamap2plus(USERDATAfld[0xc9]);//呼叫类型标准
						templen4-=iAllLength;
					}
					
					if(UDTlen>=indeffmt3*2)
					{
						recbuf+=indeffmt3*2;
						UDTlen-=indeffmt3*2;
					}
					if((templen4-indeffmt3*2)!=0)
						return;
				}
				if(UDTlen>=indeffmt6*2)
				{
					recbuf+=indeffmt6*2;
					UDTlen-=indeffmt6*2;
				}
				if((templen3-indeffmt6*2)!=0)
					return;
			icounter++;
			}
			if(UDTlen>=indeffmt2*2)
			{
				recbuf+=indeffmt2*2;
				UDTlen-=indeffmt2*2;
			}
			if(templen2!=0)
				return;
			if(*recbuf==0x30&&templen1>0)
			{
				procExtension(USERDATAfld[0xc0]);//扩展(extension) 
				templen1-=iAllLength;
			}
			if((*recbuf&0x1f)==0&&templen1>0)
			{
				procsbasicparamap2plus(USERDATAfld[0xd0]);//Camel能力处理
				templen1-=iAllLength;
			}
			if(UDTlen>=indeffmt1*2)
			{
				recbuf+=indeffmt1*2;
				UDTlen-=indeffmt1*2;
			}
			if(templen1!=0)
				return;
		}
		if((*recbuf&0x1f)==1&&templen>0)//扩展(extension)
		{
			procExtension(USERDATAfld[0xc0]);//扩展(extension) 	
			templen-=iAllLength;
		}
		if((*recbuf&0x1f)==2&&templen>0)//ss-CSI
		{
			indeffmt1=procsequencetag(USERDATAfld[0xd1]);//ss-CSI
			templen1=iDataLength;
			icounter=0;
			if(templen>=iAllLength)
				templen-=iAllLength;
			else
				return;
			indeffmt2=procsequencetag(USERDATAfld[0xd1]);//ss事件清单
			templen2=iDataLength;
			if(templen1>=iAllLength)
				templen1-=iAllLength;
			else
				return;
			while((*recbuf==0x30)&&(icounter<10)&&templen2>0)//ss事件清单
			{
				procsbasicparamap2plus(USERDATAfld[9]);
				templen2-=iAllLength;
				icounter++;
			}
			if(UDTlen>=indeffmt2*2)
			{
				recbuf+=indeffmt2*2;
				UDTlen-=indeffmt2*2;
			}			
			if((templen2-indeffmt2*2)!=0)
				return;
			procsISDNADDR(USERDATAfld[187]);//gsmSCF地址
			templen1-=iAllLength;
			if((*recbuf&0x1f)==0&&templen1>0)
			{
				procExtension(USERDATAfld[0xc0]);//扩展
				templen1-=iAllLength;
			}
			if(UDTlen>=indeffmt1*2)
			{
				recbuf+=indeffmt1*2;
				UDTlen-=indeffmt1*2;
			}
			if((templen1-indeffmt1*2)!=0)
				return;
		}
		if(UDTlen>=indeffmt*2)
		{
			recbuf+=indeffmt*2;
			UDTlen-=indeffmt*2;
		}
		if(templen!=0)   
			return; 
	}
}


void procMAPCI(BYTE dfldno1,BYTE dfldno2)  //add by 2000.05.24
{
	*dispbuf++=dfldno1;
	*dispbuf++=8;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	*dispbuf++=dfldno1+1;
	*dispbuf++=8;

	iDataLength=*dispbuf++=*recbuf++;
	iAllLength=iDataLength+2;

	*dispbuf++=0xcc;

	*dispbuf++=dfldno2;  //MCC
	*dispbuf++=12;
	*dispbuf++=(*recbuf>>4) | (*recbuf<<4);
	recbuf++;
	*dispbuf++=(*recbuf<<4);
	recbuf++;
	*dispbuf++=0xcc;

	*dispbuf++=dfldno2+1;  //MCC
	*dispbuf++=8;
	*dispbuf++=(*recbuf>>4) | (*recbuf<<4);
	recbuf++;
	*dispbuf++=0xcc;

	*dispbuf++=dfldno2+2;  //LAC
	*dispbuf++=16;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	*dispbuf++=dfldno2+3;  //CI
	*dispbuf++=16;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen += 27;
	UDTlen -= 9; 

}
//zxf add function 2001-8-14
/************************************
0x28--小区(CCI)tag(XXX00000)
0x29--小区(CI)li(7)
0x2a--MCC(第1-2字节,3位数字)
0x2b--MNC(第3字节,2位数字)
0x2c--LAC(第4-5字节)
0x2d--CI(第6-7字节)

0x2e--位置区(LA)tag(XXX00000)
0x2f--位置区(LA)li(7)
0x2a--MCC(第1-2字节,3位数字)
0x2b--MNC(第3字节,2位数字)
0x2c--LAC(第4-5字节)
void  procCCILA(BYTE dfldno1(two),BYTE dfldno2(three),BOOL more6byte(one))
*************************************/
void  procCCILA(BYTE dfldno1,BYTE dfldno2,BOOL more6byte)
{
	int i;
	*dispbuf++=dfldno1;//小区(CCI)
	*dispbuf++=8;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
	
	*dispbuf++=dfldno1+1;//小区(CI)
	*dispbuf++=8;
	iDataLength=*dispbuf++=*recbuf++;
	iAllLength=iDataLength+2;
	*dispbuf++=0xcc;
	
	*dispbuf++=dfldno2; //MCC
	*dispbuf++=8*2;
	for(i=0;i<2;i++)
	{
		*dispbuf=(*recbuf&0x0f)<<4;
		*dispbuf|=(*recbuf&0xf0)>>4;
		dispbuf++;
		recbuf++;

⌨️ 快捷键说明

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