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