📄 preprocmsg.cpp
字号:
if(bitF==0x20)
{
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " OCalledAddr: ");
addrlen=(*buffer&0xF0)>>4;
buffer++;
GetTUPAddrNum(buffer,addrlen);
}
}
}
break;
case 0x31:
{
int acalladdlen=0; //字符串acalladd的长度
int addrlen=0;
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CalledAddr: ");
buffer++;
addrlen=(*buffer&0xF0)>>4;
buffer++;
GetTUPAddrNum(buffer,addrlen);
buffer=buffer+(addrlen/2+addrlen%2);
}
break;
case 0x41:
{
int acalladdlen=0; //字符串acalladd的长度
int addrlen=0;
char tempFirstNum;
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CalledAddr: ");
buffer++;
tempFirstNum=((*buffer)&0x0F)+48;
mshowmsg.acalladd[acalladdlen++]=tempFirstNum;
buffer++;
}
break;
case 0x12:
{
int acalladdlen=0; //字符串acalladd的长度
int addrlen=0;
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CallingAddr: ");
buffer+=2;
addrlen=(*buffer&0xF0)>>4;
buffer++;
GetTUPAddrNum(buffer,addrlen);
buffer=buffer+(addrlen/2+addrlen%2);
buffer=buffer+(((*buffer&0xF0)>>4)/2+((*buffer&0xF0)>>4)%2);
}
break;
}
return;
}
//*****************************************************************
void CShowMsg::GetTUPAddrNum(unsigned char *buffer,int len)
{
//提取TUP主/被叫号码
int i;
int acalladdlen=0;
acalladdlen=strlen(mshowmsg.acalladd);
if((len%2)==0)
{
for(i=len/2;i>0;i--)
{
char tempvarL,tempvarU;
tempvarL=((*buffer)&0x0F)+48;
mshowmsg.acalladd[acalladdlen++]=tempvarL;
tempvarU=(((*buffer)&0xF0)>>4)+48;
if(tempvarU==0x0F+48)
break;
mshowmsg.acalladd[acalladdlen++]=tempvarU;
buffer++;
}
}
else
{
char tempFirstNum;
for(i=len/2;i>0;i--)
{
char tempvarL,tempvarU;
tempvarL=((*buffer)&0x0F)+48;
mshowmsg.acalladd[acalladdlen++]=tempvarL;
tempvarU=(((*buffer)&0xF0)>>4)+48;
mshowmsg.acalladd[acalladdlen++]=tempvarU;
buffer++;
}
tempFirstNum=((*buffer)&0x0F)+48;
if(tempFirstNum==0x0F+48)
return;
mshowmsg.acalladd[acalladdlen++]=tempFirstNum;
}
}
//*****************************************************************
void CShowMsg::ProcISUPmsg(unsigned char *buffer)
{
//提取ISUP消息类型,并存入buffer
unsigned char mtype; //ISUP消息类型:ACM、ANM、BLO、BLA、CPG……
unsigned char operatecode;
mshowmsg.cic=*buffer+(*(buffer+1)&0x0F)*256; //get CIC
buffer+=2;
mtype=*buffer;
mshowmsg.submsgtype=mtype;
switch(mtype)
{
case 0x06: sprintf(mshowmsg.msgtype,"MSU ISUP ACM ");
operatecode=0x06;
break;
case 0x09: sprintf(mshowmsg.msgtype,"MSU ISUP ANM ");
break;
case 0x13: sprintf(mshowmsg.msgtype,"MSU ISUP BLO ");
break;
case 0x15: sprintf(mshowmsg.msgtype,"MSU ISUP BLA ");
break;
case 0x2C: sprintf(mshowmsg.msgtype,"MSU ISUP CPG ");
operatecode=0x2C;
break;
case 0x18: sprintf(mshowmsg.msgtype,"MSU ISUP CGB ");
break;
case 0x1A: sprintf(mshowmsg.msgtype,"MSU ISUP CGA ");
break;
case 0x2A: sprintf(mshowmsg.msgtype,"MSU ISUP CQM ");
break;
case 0x2B: sprintf(mshowmsg.msgtype,"MSU ISUP CQR ");
break;
case 0x17: sprintf(mshowmsg.msgtype,"MSU ISUP GRS ");
break;
case 0x29: sprintf(mshowmsg.msgtype,"MSU ISUP GRA ");
break;
case 0x19: sprintf(mshowmsg.msgtype,"MSU ISUP CGU ");
break;
case 0x1B: sprintf(mshowmsg.msgtype,"MSU ISUP CGUA ");
break;
case 0x31: sprintf(mshowmsg.msgtype,"MSU ISUP CGR ");
break;
case 0x2F: sprintf(mshowmsg.msgtype,"MSU ISUP CONF ");
break;
case 0x07: sprintf(mshowmsg.msgtype,"MSU ISUP CON ");
break;
case 0x05: sprintf(mshowmsg.msgtype,"MSU ISUP COT ");
break;
case 0x11: sprintf(mshowmsg.msgtype,"MSU ISUP CCR ");
break;
case 0x33: sprintf(mshowmsg.msgtype,"MSU ISUP FAC ");
break;
case 0x20: sprintf(mshowmsg.msgtype,"MSU ISUP FAA ");
break;
case 0x21: sprintf(mshowmsg.msgtype,"MSU ISUP FRJ ");
operatecode=0x21;
break;
case 0x1F: sprintf(mshowmsg.msgtype,"MSU ISUP FAR ");
break;
case 0x08: sprintf(mshowmsg.msgtype,"MSU ISUP FOT ");
break;
case 0x36: sprintf(mshowmsg.msgtype,"MSU ISUP IDR ");
break;
case 0x37: sprintf(mshowmsg.msgtype,"MSU ISUP IRS ");
operatecode=0x37;
break;
case 0x04: sprintf(mshowmsg.msgtype,"MSU ISUP INF ");
operatecode=0x04;
break;
case 0x03: sprintf(mshowmsg.msgtype,"MSU ISUP INR ");
break;
case 0x01: sprintf(mshowmsg.msgtype,"MSU ISUP IAM ");
operatecode=0x01;
break;
case 0x24: sprintf(mshowmsg.msgtype,"MSU ISUP LPA ");
break;
case 0x32: sprintf(mshowmsg.msgtype,"MSU ISUP NRM ");
break;
case 0x30: sprintf(mshowmsg.msgtype,"MSU ISUP OLM ");
break;
case 0x28: sprintf(mshowmsg.msgtype,"MSU ISUP PAM ");
break;
case 0x0C: sprintf(mshowmsg.msgtype,"MSU ISUP REL ");
operatecode=0x0C;
break;
case 0x10: sprintf(mshowmsg.msgtype,"MSU ISUP RLC ");
operatecode=0x10;
break;
case 0x12: sprintf(mshowmsg.msgtype,"MSU ISUP RSC ");
break;
case 0x0E: sprintf(mshowmsg.msgtype,"MSU ISUP RES ");
break;
case 0x38: sprintf(mshowmsg.msgtype,"MSU ISUP SGM ");
break;
case 0x02: sprintf(mshowmsg.msgtype,"MSU ISUP SAM ");
operatecode=0x02;
break;
case 0x0D: sprintf(mshowmsg.msgtype,"MSU ISUP SUS ");
break;
case 0x14: sprintf(mshowmsg.msgtype,"MSU ISUP UBL ");
break;
case 0x26: sprintf(mshowmsg.msgtype,"MSU ISUP UBA ");
break;
case 0x2E: sprintf(mshowmsg.msgtype,"MSU ISUP UCIC ");
break;
case 0x35: sprintf(mshowmsg.msgtype,"MSU ISUP UPA ");
break;
case 0x34: sprintf(mshowmsg.msgtype,"MSU ISUP UPT ");
break;
case 0x2D: sprintf(mshowmsg.msgtype,"MSU ISUP USR ");
break;
case 0xFE: sprintf(mshowmsg.msgtype,"MSU ISUP OPR ");
break;
case 0xFD: sprintf(mshowmsg.msgtype,"MSU ISUP MPM ");
break;
case 0xFC: sprintf(mshowmsg.msgtype,"MSU ISUP CCL ");
break;
default:
break;
}
switch(operatecode)
{
case 0x06: //地址全
{
if(*(buffer+3)==0x00) //任选项指针
return;
else if(*(buffer+3)==0x01)
{
buffer+=4;
if(*buffer==0x29) //任选后向呼叫表示语
buffer+=3;
if(*buffer==0x01) //呼叫参考
buffer+=8;
if(*buffer==0x12) //原因表示语
{
buffer++; //指向原因表示语的长度
GetISUPCause(buffer);
buffer++;
}
}
}
break;
case 0x2C: //呼叫进展
{
if(*(buffer+2)==0x00) //任选项指针
return;
else if(*(buffer+2)==0x01)
buffer+=3;
if(*buffer==0x12)
{
buffer++; // 指向原因表示语的长度
GetISUPCause(buffer);
buffer++;
}
}
break;
case 0x21: //性能拒绝
{
buffer=buffer+2+(*(buffer+2)); // 指向原因表示语的长度
GetISUPCause(buffer);
buffer++;
}
break;
case 0x37: //识别响应
{
if(*(buffer+1)==0x00) //指向任选项的指针
return;
else if(*(buffer+1)==0x01)
{
if(*(buffer+2)==0x3C) //MCID响应表示语
buffer=buffer+3+(*(buffer+3));
if(*buffer==0x38) //消息兼容性信息
buffer=buffer+1+(*(buffer+1));
if(*buffer==0x39) //参数兼容性信息
buffer=buffer+1+(*(buffer+1));
if(*buffer==0x0A) //主叫用户号码
{
int acalladdlen=0; //字符串acalladd的长度
int addrlen=0,even=0;
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CallingAddr: ");
addrlen=*(buffer+1)-2;
even=*(buffer+2)&0x80; //even=0x00:地址信号为偶数;0x10:奇数
buffer+=4;
GetISDNAddrNum(buffer,addrlen,even);
buffer++;
}
}
}
break;
case 0x04: //信息
{
if(*(buffer+3)==0x00) //任选项指针
return;
else if(*(buffer+3)==0x01)
{
buffer+=4;
if(*buffer==0x09) //主叫用户类别
buffer+=3;
if(*buffer==0x0A) //主叫用户号码
{
int acalladdlen=0; //字符串acalladd的长度
int addrlen=0,even=0;
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CallingAddr: ");
addrlen=*(buffer+1)-2;
even=*(buffer+2)&0x80; //even=0x00:地址信号为偶数;0x10:奇数
buffer+=4;
GetISDNAddrNum(buffer,addrlen,even);
buffer++;
}
}
}
break;
case 0x01: //初始地址
{
int acalladdlen=0; //字符串acalladd的长度
int addrlen=0,even=0;
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CalledAddr: ");
buffer=buffer+6+(*(buffer+6)); // 指向被叫用户号码长度指示语
addrlen=*buffer-2;
even=*(buffer+1)&0x80; //even=0x00:地址信号为偶数;0x10:奇数
buffer+=3;
GetISDNAddrNum(buffer,addrlen,even);
buffer=buffer+addrlen;
if(*buffer==0x23) //转接网选择
buffer=buffer+1+(*(buffer+1));
if(*buffer==0x01) //呼叫参考
buffer=buffer+1+(*(buffer+1));
if(*buffer==0x08) //任选前向呼叫表示语
buffer=buffer+3;
if(*buffer==0x0A) //主叫用户号码
{
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " CallingAddr: ");
addrlen=*(buffer+1)-2;
even=*(buffer+2)&0x80; //even=0x00:地址信号为偶数;0x10:奇数
buffer+=4;
GetISDNAddrNum(buffer,addrlen,even);
buffer=buffer+addrlen;
}
if(*buffer==0x0B) //改发的号码
buffer=buffer+1+(*(buffer+1));
if(*buffer==0x13) //改发信息
buffer=buffer+1+(*(buffer+1));
if(*buffer==0x1A) //闭合用户群连锁编码
buffer=buffer+6;
if(*buffer==0x0D) //连接请求
buffer=buffer+1+(*(buffer+1));
if(*buffer==0x28) //原被叫号码
{
acalladdlen=strlen(mshowmsg.acalladd);
acalladdlen+=sprintf(mshowmsg.acalladd+acalladdlen, " OCalledAddr: ");
addrlen=*(buffer+1)-2;
even=*(buffer+2)&0x80; //even=0x00:地址信号为偶数;0x80:奇数
buffer+=4;
GetISDNAddrNum(buffer,addrlen,even);
buffer=buffer+addrlen;
}
// ylfFilteMsg::FiltIAM(dpc,opc,cic,addr,baddr);
}
break;
case 0x0C: //释放
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -