📄 svsccpcri.cpp
字号:
#include "stdafx.h"
#define NOPASS 0
#define PASS 0xff
#define BYTEOFPVAR 3
extern BYTE BUFSETMEM[];
extern BYTE compare(BYTE *code,BYTE *crit,BYTE floh);
extern BYTE compareaddr(BYTE *msg,BYTE *crit);
extern BYTE comparespcode(BYTE *msg,BYTE *crit);
extern BYTE compareDPC14(BYTE *msg,BYTE *crit);
extern BYTE compareOPC14(BYTE *msg,BYTE *crit);
BYTE compareSCCPDPC(BYTE *msg,BYTE *crit)
{
return (compare(msg,crit+2,0));
}
BYTE compareSCCPDPC14(BYTE *msg,BYTE *crit)
{ BYTE code[2];
code[0]=*(msg+1); //get SPCODE to code
code[1]=*(msg+2)&0x3f;
return (compare(&code[0],crit+2,0));
}
BYTE compareSCCPSSN(BYTE *msg,BYTE *crit)
{ BYTE code;
if(*msg&0x01) msg+=3;
code=*(msg+1); //get SSN to code
return (compare(&code,crit+2,0));
}
BYTE compareSCCPSSN14(BYTE *msg,BYTE *crit)
{ BYTE code;
if(*msg&0x01) msg+=2;
code=*(msg+1); //get SSN to code
return (compare(&code,crit+2,0));
}
BYTE compareSCCPADDR(BYTE *msg,BYTE *crit)
{ BYTE code,len;
len=*msg++; //get len &msg-->ADDIN
code=*msg++;
if(code&0x01) {msg+=3;len-=3;} //exist SPCODE
if(code&0x02) {msg++;len--;} //exist SSSN
code&=0x3c;
if(code==0x04||code==0x08)//GT1\GT2
{msg++;len--;}
else if(code==0x0c)//GT3
{msg+=2;len-=2;}
else if(code==0x10)//GT4
{msg+=3;len-=3;}
else len=0;
if(len!=0) return(compareaddr(msg,crit));
else return NOPASS;
}
BYTE compareSCCPADDR14(BYTE *msg,BYTE *crit)
{ BYTE code,len;
len=*msg++; //get len &msg-->ADDIN
code=*msg++;
if(code&0x01) {msg+=2;len-=2;} //exist SPCODE
if(code&0x02) {msg++;len--;} //exist SSSN
code&=0x3c;
if(code==0x04||code==0x08)//GT1\GT2
{msg++;len--;}
else if(code==0x0c)//GT3
{msg+=2;len-=2;}
else if(code==0x10)//GT4
{msg+=3;len-=3;}
else len=0;
if(len!=0) return(compareaddr(msg,crit));
else return NOPASS;
}
BYTE SCCPmesscri14(BYTE *bmsg,BYTE *crit)
{
BYTE selecth1h0=0;
BYTE fldno,numofbyte,varno,head;
BYTE 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;
if (BUFSETMEM[varno]!=*msg
||BUFSETMEM[varno+1]!=(*(msg+1)&0x3f) )
stat=NOPASS;
crit +=5; //crit-->OR(F7)/AND(F8)/CC
}
else //compare with criteria
{stat=compareDPC14(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+1;
if(numofbyte==0)//compare with var
{varno = (*(crit+4))*BYTEOFPVAR;stat=PASS;
if( BUFSETMEM[varno]!=(*msg&0xc0)
||BUFSETMEM[varno+1]!=*(msg+1)
||BUFSETMEM[varno+2]!=(*(msg+2)&0x0f) )
stat=NOPASS;
crit +=5; //crit-->OR/AND/0xaa
}
else //compare with criteria
{stat=compareOPC14(msg,crit);
if (*(crit+2)==0xf5) numofbyte *=2;//logical sign
crit += 4+numofbyte;//crit-->OR(F7)/AND(F8)/CC
}
break;
case 9://SLS
msg=bmsg+3; //msg-->sls
if (numofbyte==0)//compare with var
{varno = (*(crit+4))*BYTEOFPVAR;stat=PASS;
if (BUFSETMEM[varno]!=(*msg&0xf0)) stat=NOPASS;
crit +=5; //crit-->OR/AND/0xaa
}
else //compare with criteria
{code=*(bmsg+3)&0xf0; code=code>>4;
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+4);
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+11; //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+13; //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+11; //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+10; //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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -