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

📄 msgtext.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:

#include "stdafx.h"
#include "detailcommon.h"
#include "base.h"
#include "msgText.h"

BYTE PCLEN;//03/05//2002 aiming add
extern int GetMapMsgFKind();
extern char  UNKNOWNSUB_Field[8][25];
extern BYTE  UNKNOWNSUB_FieldCrit[8][4];

CMsgText::CMsgText()
{
	oldx=oldy=-1;
	oldlen=0;
}
void CMsgText::RemoveAll()
{
	strList.RemoveAll ();
}

CString CMsgText::GetLengthText()
{
	AddString(0,0x7fffff," ",0);
	CString str;
	POSITION pos=strList.GetHeadPosition();
	while(pos)
	{
		str+=strList.GetNext(pos)+_T("\r\n");
	}
	return str;
}

void CMsgText::AddString(CString str)
{
	strList.AddTail(str);
}

void CMsgText::AddString(int x,int y,char* str,int len)
{
	if(y>oldy+10)
	{
		if(!strText.IsEmpty())strList.AddTail(strText);
		strText="";
		int n=x/8+1;
		if(n<1||n>500)n=1;
		for(int i=0;i<n;i++)strText+=" ";
	}
	else 
	{
		int cx=x-oldx;
		int n=(cx/8-oldlen);
		//if(n<1||n>500)n=1;
		for(int i=0;i<n;i++)strText+=" ";
	}
	strText+=str;
	oldlen=len;
	oldx=x;
	oldy=y;
	CString tstr=str;
	if(tstr.Find("位置信息长度")>=0)
	{
		return;
	}
}
void CMsgText::DetailText(BYTE* buf)
{
	procdisplay((char*)buf);
	BYTE			SelMsgType,SelSubMsg,SelMsgKind,SelOcKind,SelChildKind;
	BYTE			DetailType;	
	//0:overview 1:allshow
    SelMsgType = 0;
	SelSubMsg =0 ;
	SelMsgKind = 0;

	char  Str[250],Str1[200],Str2[270];
	float   PtRate=1;
	WORD  Fnum,I,K,Len,Len1,Len3,Len4,I1,MsgNo,Wnum,wLinkNum; //M16,  16: ?16H
	BYTE  J,Len2,Num,ByteNum,bData,ShowType,bySysKind,LinkNum,Mode;      //sccp
	int   nDrawX,nDrawY=0,DltY=20,X0=0,DeltaXL,DeltaXS,DeltaX;
	BOOL  bEnd,bErr,b14,bSSNSCMG1,bSSNSCMG2,bSSNMAP1,bSSNMAP2,bSSNINAP1,bSSNINAP2,bSSNCAP1,bSSNCAP2,bTx;//b16,bClr,
	BOOL	bSSNBSSMAP;			//Judge if ssn==0xfe
	BOOL	bSSN14;			//ZXW 2000-09-01
	BOOL	bPseudo;				//Judge if DTAP has Layer2 Pseudo field
	WORD   wCIC;//wMSecond,
	CFont cfont;
	tagTIME  Time;
	BOOL  bPrint=FALSE,bDrawOK; //define for print || draw
	BOOL	bShowDetail;	 //DetailFiled Show OR Not

 	bSSNSCMG1=bSSNSCMG2=FALSE;		//reset one msg's used field
	bSSNMAP1=bSSNMAP2=FALSE;		//reset one msg's used field
	bSSNINAP1=bSSNINAP2=FALSE;		//reset one msg's used field
	bSSNCAP1=bSSNCAP2=FALSE;		//reset one msg's used field
	bSSNBSSMAP=bPseudo=FALSE;		//reset flags for Bssmap
	bSSN14=FALSE;		//ZXW 2000-09-01
	DataKind=0;		//normal msg

	MsgSU=MsgUP=MsgKind=MsgProId=0;


	Len=BUFDISPLAY[3]*256+BUFDISPLAY[2];
	I=I1=4;
	DeltaXL=120;
	DeltaX=130;
	DeltaXS=40;
	bErr=FALSE;
	bDrawOK=TRUE;
	while((I-I1) <Len-1) {        //94
		SelMode = Mode=SS7MODE;
		wLinkNum=(BUFDISPLAY[I]+(BUFDISPLAY[I+1]&0x0f)*256);		//0,1->0:link_1 2,3 ->1:link_2
		
		LinkNum=wLinkNum;		//0,1->0:link_1 2,3 ->1:link_2
	/*	if(wLinkNum>=MAX_NUM_OF_LINK*2)  {
			while(1) {
				if(BUFDISPLAY[I]==0xcc && BUFDISPLAY[I+1]==0xee) {
					I++;
					break;
				}
				I++;
				if(I>Len+4) {
					 return;
				}
			}
			I++;
			continue;
		}
		else */if(wLinkNum%2==0) {
			X0=nDrawX=10;
			bTx=TRUE;
		}
		else {
			if(wLinkNum%2==1) {
				X0=nDrawX=10;
				bTx=FALSE;
			}
		}
		I+=2;
		Len1=BUFDISPLAY[I];
		I++;
		Len1+=BUFDISPLAY[I]*256;
		I++;
		MsgNo=BUFDISPLAY[I];
		I++;
		MsgNo+=BUFDISPLAY[I]*256;
	//	MsgNo+=PAGEMSGNO1[M];

		
		if(bDrawOK) {
			if(!bTx) {
				sprintf(Str,"Rx_%d <",LinkNum+1);
				AddString((nDrawX)*PtRate,nDrawY*PtRate,Str,strlen(Str));
			}
			else {
				sprintf(Str,"Tx_%d >",LinkNum+1);
				AddString((nDrawX)*PtRate,nDrawY*PtRate,Str,strlen(Str));
			}
		}

		Len1+=I-1;  // I ->MsgNo
		if(BUFDISPLAY[Len1-1]!=0xee && BUFDISPLAY[Len1-1]!=0xcc) {
			return;
		}
		I++;
 //      BUFDISPLAY[I]=LOBYTE(nDrawY);
      I++;
 //      BUFDISPLAY[I]=HIBYTE(nDrawY);
      I++;
      Time.Hour=BUFDISPLAY[I];  
      I++;
      Time.Minute=BUFDISPLAY[I];
      I++;
      Time.Second=BUFDISPLAY[I];
      I++;
      Time.MSecond=BUFDISPLAY[I];
      I++;
      Time.MSecond+=BUFDISPLAY[I]*256;
      I++;     // I-> new msgfield
		if(bDrawOK) {
			sprintf(Str,"%02u: %02u: %02u.%03u",Time.Hour,Time.Minute,Time.Second,Time.MSecond);
			AddString((nDrawX+90)*PtRate ,nDrawY*PtRate,Str,strlen(Str));
		 //  nDrawX=X0;
			nDrawY+=DltY;
		}
		DataKind=0;		//normal msg
		TcapKind=0xff;		//sccp maybe have tcap or not, initial tcapkind
		TcapCpntKind=0xff;		//initial cpntkind
		MapKind=0xff;		//sccp maybe have tcap or not, initial tcapkind
		MapErrKind=0xff;		//initial cpntkind
		bSSNSCMG1=bSSNSCMG2=FALSE;
		bSSNMAP1=bSSNMAP2=FALSE;
		bSSNINAP1=bSSNINAP2=FALSE;
		bSSNCAP1=bSSNCAP2=FALSE;
		bSSNBSSMAP=bPseudo=FALSE;
		bSSN14=FALSE;		//ZXW 2000-09-01

		while(I<Len1-1) {
			FieldNo=BUFDISPLAY[I];
			if(FieldNo==7)
			{
				PCLEN=BUFDISPLAY[I+1];//03/05/2002 aiming add 
			}
			I++;
			if(DataKind!=3 && FieldNo>=0xd0 && FieldNo<0xfe)	{	//	2000-6-12临时修改MAP显示原码n for maybe morethan one CNPTS in one TCAP's msg, so when >=0xd4 restore TCAP HANDLE
				DataKind=2;		//map & inap field <0xd4 so restore TCAP
			}
			//Judge if print ok or not

			bDrawOK=true;

#if 0 
               if(FieldNo==0X5A)//cdma msg
				{
					if((BUFDISPLAY[I+0]==0xEE)&&(BUFDISPLAY[I+1]==0xEE)&&(BUFDISPLAY[I+2]==0xEE)&&(BUFDISPLAY[I+3]==0xCC))//CDMA START FLAG
					{
                        I+=4;
						bANSIITCAP1=bANSIITCAP2=TRUE;  //AIMING ADD 05/13/2002
						bCDMAMSG=FALSE;  //AIMING ADD 05/S3/2002
					    continue;						
					}else if((BUFDISPLAY[I+0]==0xEF)&&(BUFDISPLAY[I+1]==0xEF)&&(BUFDISPLAY[I+2]==0xEF)&&(BUFDISPLAY[I+3]==0xCC))//CDMA START FLAG
					{
                        I+=4;
						bCDMAMSG=TRUE;  //AIMING ADD 05/13/2002
						bANSIITCAP1=bANSIITCAP2=FALSE;//AIMING ADD 05/23/2002
					    continue;						
					}
				}

				if(bANSIITCAP1)
				{
				  I--;
				  nDrawX=nDrawX*PtRate;
				  nDrawY=nDrawY*PtRate;
                  DrawCDMATCAPMSG(*this,PtRate,bDrawOK,0,NULL,1,nDrawX,nDrawY,&BUFDISPLAY[0],I);
				  nDrawY+=DltY*PtRate;
				  nDrawX/=PtRate;
				  nDrawY/=PtRate;
				  I--;
				}else if(bCDMAMSG)
				{
                  I--;
				  nDrawX=nDrawX*PtRate;
				  nDrawY=nDrawY*PtRate;
				  DrawCDMAMSG(*this,PtRate,bDrawOK,0,NULL,2,nDrawX,nDrawY,&BUFDISPLAY[0],I);	
				  nDrawY+=DltY*PtRate;
				  nDrawX/=PtRate;
				  nDrawY/=PtRate;
				  I--;
				}else
#endif
			if(DataKind==3) {//map msg 
				if(FieldNo==0xfe) {     //len 2 byte
					Len2=BUFDISPLAY[I]; //data 16h len
					I++;
					Len2+=BUFDISPLAY[I]*256;
					I++;
					if(DetailType==0)	//overview :not main field
						bDrawOK=FALSE;
					if(bDrawOK) {
						nDrawX+=20;K=0;
						ShowType=2;
						strcpy(Str2,"");
						for(J=0;J<Len2;++J) {
							K++;
							bData=BUFDISPLAY[I];
							I++;
							Num=8;
							bEnd=GetDataStr(bData,Num,ShowType);  //No Err
							strcat(Str2," ");
							strcat(Str2,DataStr);
							if(K>=20) {
								K=0;
									sprintf(Str,"%sh",Str2);
									AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
								strcpy(Str2,"");
								nDrawY+=DltY;
							}
						}
						if(K!=0) {
								sprintf(Str,"%sh",Str2);
								AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							strcpy(Str2,"");
							nDrawY+=DltY;
						}
						nDrawX=X0;
					}//IF
					else I+=Len2;
				}
				else {
					//no use to getmsgfkind filedno-1=msgfkind

				//	MsgFKind=FieldNo-1;
					MsgFKind=GetMapMsgFKind();
					if(DetailType==0)	{//overview
						bShowDetail=ShowMapField();
						if(!bShowDetail)
							bDrawOK=FALSE;
					}
					if(bDrawOK) {
								sprintf(Str,"xxh");
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
					}
					//data fields	zxw 2000-08-18
					Len2=BUFDISPLAY[I];
					I++;
					if(Len2==0) {
						Len3=BUFDISPLAY[I];	//bytenum
						I++;
					}
					else {
						if((Len2%8)==0)
							Len3=Len2/8;
						else Len3=Len2/8+1;
					}
					if(bDrawOK) {
						nDrawY=DrawMapVeiw(*this,I,Len2,Len3,nDrawX,nDrawY,DltY,PtRate);
						nDrawX=X0;
					}				//if(bshow)
					I+=Len3;
				}//else !=0xfe
			}
			else if(DataKind==4) 
			{//map err msg
							if(FieldNo==0xfe) {     //len 2 byte
					Len2=BUFDISPLAY[I]; //data 16h len
					I++;
					Len2+=BUFDISPLAY[I]*256;
					I++;
					if(DetailType==0)	//overview :not main field
						bDrawOK=FALSE;
					if(bDrawOK) {
						nDrawX+=20;K=0;
						ShowType=2;
						strcpy(Str2,"");
						for(J=0;J<Len2;++J) {
							K++;
							bData=BUFDISPLAY[I];
							I++;
							Num=8;
							bEnd=GetDataStr(bData,Num,ShowType);  //No Err
							strcat(Str2," ");
							strcat(Str2,DataStr);
							if(K>=20) {
								K=0;
									sprintf(Str,"%sh",Str2);
									AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
								strcpy(Str2,"");
								nDrawY+=DltY;
							}
						}
						if(K!=0) {
								sprintf(Str,"%sh",Str2);
								AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							strcpy(Str2,"");
							nDrawY+=DltY;
						}
						nDrawX=X0;
					}//IF
					else I+=Len2;
				}
				else {
					//no use to getmsgfkind filedno-1=msgfkind
					MsgFKind=FieldNo-1;
					if(DetailType==0) {//show main fields
						bShowDetail=ShowMapErrField();
						if(!bShowDetail)
							bDrawOK=FALSE;
					}
					if(bDrawOK) {
								sprintf(Str,"xxh");
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
					}
					//data fields	zxw 2000-08-18
					Len2=BUFDISPLAY[I];
					I++;
					if(Len2==0) {
						Len3=BUFDISPLAY[I];	//bytenum
						I++;
					}
					else {
						if((Len2%8)==0)
							Len3=Len2/8;
						else Len3=Len2/8+1;
					}
					if(bDrawOK) {
							switch(MapErrKind) {
								case 1:         //RESTRANCALL
									if(MsgFKind<8) {
											ShowType=UNKNOWNSUB_FieldCrit[MsgFKind][3];
											 strcpy(Str2,"");
											 for(J=0;J<Len3;++J) {
												 bData=BUFDISPLAY[I];
												 I++;
												if(bDrawOK) {	//in print range except BUFDISPLAY[I];I++;
													 Num=8;
													 if(J==(Len2/8))
														Num=Len2%8;
													 bEnd=GetDataStr(bData,Num,ShowType);  //2 is show type
													 if(!bEnd) {
														sprintf(Str2,"?: %02Xh",bData);
														I+=(Len3-1-J);
														break;
													 }
													 strcat(Str2,DataStr);
												}
											 }
											if(bDrawOK) {	//in print range except BUFDISPLAY[I];I++;
												strcpy(Str,UNKNOWNSUB_Field[MsgFKind]);
												nDrawX+=DeltaXL;
												AddString(nDrawX*PtRate ,nDrawY*PtRate,Str,strlen(Str));
												if(ShowType==1)
													sprintf(Str,": %sb",Str2);
												else {
													if(ShowType==2)
														sprintf(Str,": %sh",Str2);
													else  sprintf(Str,": %s",Str2);
												}
												strcat(Str,"   ");
												GetMapErrFieldStr(bData);
												strcat(Str,DataStr);
												nDrawX+=DeltaX;
												AddString(nDrawX*PtRate ,nDrawY*PtRate,Str,strlen(Str));
												nDrawX=X0;
												nDrawY+=DltY;
											}
									}
									else I+=Len3;
									break;
								case 6:         //RESTRANCALL
									if(MsgFKind<8) {
											ShowType=DISAGREEROAM_FieldCrit[MsgFKind][3];
											 strcpy(Str2,"");
											 for(J=0;J<Len3;++J) {
												 bData=BUFDISPLAY[I];
												 I++;
												if(bDrawOK) {	//in print range except BUFDISPLAY[I];I++;
													 Num=8;
													 if(J==(Len2/8))
														Num=Len2%8;
													 bEnd=GetDataStr(bData,Num,ShowType);  //2 is show type
													 if(!bEnd) {
														sprintf(Str2,"?: %02Xh",bData);
														I+=(Len3-1-J);
														break;
													 }
													 strcat(Str2,DataStr);
												}
											 }
											if(bDrawOK) {	//in print range except BUFDISPLAY[I];I++;
												strcpy(Str,DISAGREEROAM_Field[MsgFKind]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -