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