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

📄 svsccpcri.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		  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 + -