📄 svmapdisp.cpp
字号:
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 + -