📄 svsccpcri.cpp
字号:
fldno+=head;
msg=bmsg+12; //msg-->length of CLDPA(V)
if(fldno==46 || fldno==47 || fldno==52)//select CLGPA
{code=*msg++; //get length of CLDPA(V)
msg +=code; //msg-->len of CLGPA(V)
}//select CLGPA
if(fldno==37||fldno==46)//select DPC
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x01) stat=compareSCCPDPC(msg,crit); //exist DPC
else stat=NOPASS;
}//select DPC
else if (fldno==38||fldno==47)//select SSN
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x02) stat=compareSCCPSSN(msg,crit); //exist DPC
else stat=NOPASS;
}//select SSN
else if (fldno==43||fldno==52)//select ADDR
{ if (*(msg+1)&0x04)
stat=compareSCCPADDR(msg,crit);//msg-->len
else stat=NOPASS;
}//select ADDR
else stat=NOPASS;
break;
default:stat=NOPASS; break;
}//switch(head)
if (*(crit+2)==0xf5) numofbyte *=2;//logical sign
crit += 4+numofbyte;//crit-->OR(F7)/AND(F8)/CC
}//else:select H1H0
crit++; //crit-->F7/F8/AA
if((stat!=PASS && *crit==0xf8)//the condition isn't pass & and
||(stat==PASS && *crit==0xf7))//the condition is pass & or
break;
else if ((stat==PASS && *crit==0xf8)//condition is pass & OR
||(stat!=PASS && *crit==0xf7))//condition isn't pass & AND
crit++;
} while(*crit!=0xaa);
return stat;
}
BYTE SCCPmesscri(BYTE *bmsg,BYTE *crit)
{
BYTE selecth1h0=0;
BYTE fldno,numofbyte,varno,head;
BYTE c,stat,code,*msg;
do{
fldno = *crit++;
numofbyte=*(crit+3);
if (fldno<=10)
switch (fldno)
{
case 7://DPC
msg=bmsg;
if (numofbyte==0)//compare with var
{varno = (*(crit+4))*BYTEOFPVAR;stat=PASS;
for (c=0;c<3;c++)
{if (BUFSETMEM[varno+c]!=*(msg+c)) {stat=NOPASS;break;}}
crit +=5; //crit-->OR(F7)/AND(F8)/CC
}
else //compare with criteria
{stat=comparespcode(msg,crit);
if (*(crit+2)==0xf5) numofbyte *=2;//logical sign
crit += 4+numofbyte;//crit-->OR(F7)/AND(F8)/CC
}
break;
case 8://OPC
msg=bmsg+3;
if(numofbyte==0)//compare with var
{varno = (*(crit+4))*BYTEOFPVAR;stat=PASS;
for (c=0;c<3;c++)
{if (BUFSETMEM[varno+c]!=*(msg+c)) {stat=NOPASS;break;}}
crit +=5; //crit-->OR/AND/0xaa
}
else //compare with criteria
{stat=comparespcode(msg,crit);
if (*(crit+2)==0xf5) numofbyte *=2;//logical sign
crit += 4+numofbyte;//crit-->OR(F7)/AND(F8)/CC
}
break;
case 9://SLC
if (numofbyte==0)//compare with var
{varno = (*(crit+4))*BYTEOFPVAR;stat=PASS;
if (BUFSETMEM[varno]!=*(bmsg+6)) {stat=NOPASS;break;}
crit +=5; //crit-->OR/AND/0xaa
}
else //compare with criteria
{code=*(msg+6)&0x0f;
stat=compare(&code,crit+2,0);
if (*(crit+2)==0xf5) numofbyte *=2;//logical sign
crit += 4+numofbyte;//crit-->OR(F7)/AND(F8)/CC
}
break;
case 10: //H1H0
selecth1h0=0xff;
head=code=*(bmsg+7);
stat=compare(&code,crit+2,0);
if (*(crit+2)==0xf5) numofbyte *=2;//logical sign
crit += 4+numofbyte;//crit-->OR(F7)/AND(F8)/CC
break;
default:stat=NOPASS; break;
}//switch
else if(selecth1h0)
{switch(head)
{case 0x01://CR
msg=bmsg+14; //msg-->Option pointer
if(fldno==31 || fldno==32 || fldno==37)//select CLGPA
{code=*msg++; //get Option pointer
msg +=code; //msg-->Option Name code
code=*msg++; //get Option Name code,msg-->len
if(code==0x09)//exist credit:3byte
msg+=3; //msg-->next Option Name code
code=*msg++; //get Option Name code,msg-->len
if(code!=0x04)//no CLGPA
{stat=NOPASS;break;}
}//select CLGPA
if(fldno==18||fldno==31)//select DPC
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x01) stat=compareSCCPDPC(msg,crit); //exist DPC
else stat=NOPASS;
}//select DPC
else if (fldno==19||fldno==32)//select SSN
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x02) stat=compareSCCPSSN(msg,crit); //exist DPC
else stat=NOPASS;
}//select SSN
else if (fldno==24||fldno==37)//select ADDR
{ if (*(msg+1)&0x04)
stat=compareSCCPADDR(msg,crit);//msg-->len
else stat=NOPASS;
}//select ADDR
else stat=NOPASS;
break;
case 0x02://CC
msg=bmsg+16; //msg-->Option name code
if(fldno==22||fldno==23||fldno==28)
{code=*msg++; //get Option Name code,msg-->len
if(code==0x09)//exist credit:3byte
msg+=3; //msg-->next Option Name code
code=*msg++; //get Option Name code,msg-->len
if(code!=0x03)//no CLDPA
{stat=NOPASS;break;}
}
if(fldno==22)//select DPC
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x01) stat=compareSCCPDPC(msg,crit); //exist DPC
else stat=NOPASS;
}//select DPC
else if (fldno==23)//select SSN
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x02) stat=compareSCCPSSN(msg,crit); //exist DPC
else stat=NOPASS;
}//select SSN
else if (fldno==28)//select ADDR
{ if (*(msg+1)&0x04)
stat=compareSCCPADDR(msg,crit);//msg-->len
else stat=NOPASS;
}//select ADDR
else stat=NOPASS;
break;
case 0x03://CREF
msg=bmsg+14; //msg-->Option name code
if(fldno==17||fldno==18||fldno==23)
{code=*msg++; //get Option Name code,msg-->len
if(code==0x09)//exist credit:3byte
msg+=3; //msg-->next Option Name code
code=*msg++; //get Option Name code,msg-->len
if(code!=0x03)//no CLDPA
{stat=NOPASS;break;}
}
if(fldno==17)//select DPC
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x01) stat=compareSCCPDPC(msg,crit); //exist DPC
else stat=NOPASS;
}//select DPC
else if (fldno==18)//select SSN
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x02) stat=compareSCCPSSN(msg,crit); //exist DPC
else stat=NOPASS;
}//select SSN
else if (fldno==23)//select ADDR
{ if (*(msg+1)&0x04)
stat=compareSCCPADDR(msg,crit);//msg-->len
else stat=NOPASS;
}//select ADDR
else stat=NOPASS;
break;
case 0x09://field No of UDT:18,19,24,27,28,33
case 0x0a://field No of UDTS:17,18,23,26,27,32
fldno+=head;
msg=bmsg+13; //msg-->length of CLDPA(V)
if(fldno==37 || fldno==38 || fldno==43)//select CLGPA
{code=*msg++; //get length of CLDPA(V)
msg +=code; //msg-->len of CLGPA(V)
}//select CLGPA
if(fldno==28||fldno==37)//select DPC
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x01) stat=compareSCCPDPC(msg,crit); //exist DPC
else stat=NOPASS;
}//select DPC
else if (fldno==29||fldno==38)//select SSN
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x02) stat=compareSCCPSSN(msg,crit); //exist DPC
else stat=NOPASS;
}//select SSN
else if (fldno==34||fldno==43)//select ADDR
{ if (*(msg+1)&0x04)
stat=compareSCCPADDR(msg,crit);//msg-->len
else stat=NOPASS;
}//select ADDR
else stat=NOPASS;
break;
case 0x11://XUDT
case 0x12://XUDTS
fldno+=head;
msg=bmsg+15; //msg-->length of CLDPA(V)
if(fldno==46 || fldno==47 || fldno==52)//select CLGPA
{code=*msg++; //get length of CLDPA(V)
msg +=code; //msg-->len of CLGPA(V)
}//select CLGPA
if(fldno==37||fldno==46)//select DPC
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x01) stat=compareSCCPDPC(msg,crit); //exist DPC
else stat=NOPASS;
}//select DPC
else if (fldno==38||fldno==47)//select SSN
{ msg++; //msg-->ADDRIN of CLDPA
if(*msg&0x02) stat=compareSCCPSSN(msg,crit); //exist DPC
else stat=NOPASS;
}//select SSN
else if (fldno==43||fldno==52)//select ADDR
{ if (*(msg+1)&0x04)
stat=compareSCCPADDR(msg,crit);//msg-->len
else stat=NOPASS;
}//select ADDR
else stat=NOPASS;
break;
default:stat=NOPASS; break;
}//switch(head)
if (*(crit+2)==0xf5) numofbyte *=2;//logical sign
crit += 4+numofbyte;//crit-->OR(F7)/AND(F8)/CC
}//else:select H1H0
crit++; //crit-->F7/F8/AA
if((stat!=PASS && *crit==0xf8)//the condition isn't pass & and
||(stat==PASS && *crit==0xf7))//the condition is pass & or
break;
else if ((stat==PASS && *crit==0xf8)//condition is pass & OR
||(stat!=PASS && *crit==0xf7))//condition isn't pass & AND
crit++;
} while(*crit!=0xaa);
return stat;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -