📄 snmu2.cpp
字号:
//没有data数据段,无需解析
break;
case 0x48: //连接不可能信号 "CNP":connection-not-possible signal
//没有data数据段,无需解析
break;
////////////////////////////////////////////////////////////////////
//UFC 用户部分流量控制消息 User part flow control messages
case 0x1A: //用户部分不可用信号 "UPU":User part unavailable signal
GetDataDecode_UPU(u_pMsg, u_msgLength, v_pDecodeResult);
break;
default:
//默认没解析
break;
}
return TRUE;
}
////////////////////////////////////////////////////////////////////
//UFC 用户部分流量控制消息 User part flow control messages
//case 0x1A: //用户部分不可用信号 "UPU":User part unavailable signal
//==================================================================
BOOL CSnmu2::GetDataDecode_UPU(BYTE *u_pMsg, DWORD u_msgLength, char *v_pParseData)
{
int dataLength=0;
int strLength=0, indexByte=0;
//#define SS7_SNMU_DATA_OFFSET (SS7_SNMU_H1H0_OFFSET + 1)
dataLength = u_msgLength - SS7_SNMU_DATA_OFFSET;
////////////////////////////////////////////
//目的地(8*3)
strLength += sprintf(&v_pParseData[strLength], "\n" );
indexByte = SS7_SNMU_DATA_OFFSET;
strLength += sprintf(&v_pParseData[strLength], \
"%02X %02X %02X DST :0x%02X%02X%02X %s\n",
u_pMsg[indexByte], u_pMsg[indexByte+1], u_pMsg[indexByte+2], \
u_pMsg[indexByte+2], u_pMsg[indexByte+1], u_pMsg[indexByte], \
("目的地信令点标识") );
indexByte += 3;
CString strMsg;
switch( (int)(u_pMsg[indexByte] & 0x0F) )
{
case 3: //0011
strMsg = "SCCP用户部分";
break;
case 4: //0100
strMsg = "TUP用户部分";
break;
case 5: //0101
strMsg = "ISUP用户部分";
break;
case 8: //1000
strMsg = "MTP测试用户部分";
break;
default:
strMsg = "备用";
break;
}
strLength += sprintf(&v_pParseData[strLength], \
"%02X UPID :....%d%d%d%d %s\n",
u_pMsg[indexByte], \
(u_pMsg[indexByte]>>3 & 0x01), (u_pMsg[indexByte]>>2 & 0x01), \
(u_pMsg[indexByte]>>1 & 0x01), (u_pMsg[indexByte] & 0x01), \
strMsg );
strLength += sprintf(&v_pParseData[strLength], \
" SPARE :%d%d%d%d.... \n",
(u_pMsg[indexByte]>>7 & 0x01), (u_pMsg[indexByte]>>6 & 0x01), \
(u_pMsg[indexByte]>>5 & 0x01), (u_pMsg[indexByte]>>4 & 0x01) );
return TRUE;
}
////////////////////////////////////////////////////////////////////
//FCM 信令业务流量控制消息 Signalling-traffic-flow control message
//==================================================================
//case 0x23: //受控传递信号 "TFC": Transfer-Controlled signal
BOOL CSnmu2::GetDataDecode_TFC(BYTE *u_pMsg, DWORD u_msgLength, char *v_pParseData)
{
int dataLength=0;
int strLength=0, indexByte=0;
//#define SS7_SNMU_DATA_OFFSET (SS7_SNMU_H1H0_OFFSET + 1)
dataLength = u_msgLength - SS7_SNMU_DATA_OFFSET;
////////////////////////////////////////////
//目的地(8*3)
strLength += sprintf(&v_pParseData[strLength], "\n" );
indexByte = SS7_SNMU_DATA_OFFSET;
strLength += sprintf(&v_pParseData[strLength], \
"%02X %02X %02X DST :0x%02X%02X%02X %s\n",
u_pMsg[indexByte], u_pMsg[indexByte+1], u_pMsg[indexByte+2], \
u_pMsg[indexByte+2], u_pMsg[indexByte+1], u_pMsg[indexByte], \
("目的地信令点标识") );
indexByte += 3;
strLength += sprintf(&v_pParseData[strLength], \
"%02X CONG :......%d%d %s\n",
u_pMsg[indexByte], \
(u_pMsg[indexByte]>>1 & 0x01), (u_pMsg[indexByte] & 0x01), \
("拥塞状态") ); //拥塞状态:待进一步解析
strLength += sprintf(&v_pParseData[strLength], \
" SPARE :%d%d%d%d%d%d.. \n",
(u_pMsg[indexByte]>>7 & 0x01), (u_pMsg[indexByte]>>6 & 0x01), \
(u_pMsg[indexByte]>>5 & 0x01), (u_pMsg[indexByte]>>4 & 0x01), \
(u_pMsg[indexByte]>>3 & 0x01), (u_pMsg[indexByte]>>2 & 0x01) );
return TRUE;
}
////////////////////////////////////////////////////////////////////
//DLM 信令数据链路连接命令信号 Signalling-data-link-connection-order message
//case 0x18: //信令数据链路连接命令信号 "DLC":signalling-data-link-connection-order signal
//==================================================================
BOOL CSnmu2::GetDataDecode_DLC(BYTE *u_pMsg, DWORD u_msgLength, char *v_pParseData)
{
int dataLength=0;
int strLength=0, indexByte=0;
//#define SS7_SNMU_DATA_OFFSET (SS7_SNMU_H1H0_OFFSET + 1)
dataLength = u_msgLength - SS7_SNMU_DATA_OFFSET;
////////////////////////////////////////////
//信令数据链路标识(8*2)
strLength += sprintf(&v_pParseData[strLength], "\n" );
indexByte = SS7_SNMU_DATA_OFFSET;
strLength += sprintf(&v_pParseData[strLength], \
"%02X %02X DLID :0x%X%02X %s\n",
u_pMsg[indexByte], u_pMsg[indexByte+1], \
(u_pMsg[indexByte+1] & 0x0F), (u_pMsg[indexByte]), \
("信令数据链路标识") );
indexByte += 1;
strLength += sprintf(&v_pParseData[strLength], \
" SPARE :%d%d%d%d.... \n",
(u_pMsg[indexByte]>>7 & 0x01), (u_pMsg[indexByte]>>6 & 0x01),\
(u_pMsg[indexByte]>>5 & 0x01), (u_pMsg[indexByte]>>4 & 0x01) );
return TRUE;
}
////////////////////////////////////////////////////////////////////
//TFM 禁止传递、允许传递、受限传递消息 Transfer-prohibited,transfer-allowed and transfer-restricted message
//==================================================================
//case 0x14: //禁止传递信号 "TFP":Transfer-prohibited signal
//case 0x34: //受限传递信号 "TFR":Transfer-restricted signal
//case 0x54: //允许传递信号 "TFA":Transfer-allowed signal
////////////////////////////////////////////////////////////////////
//==================================================================
//RSM 信号路由组测试消息 Signalling-route-set-test message
//case 0x15: //禁止目的地的信令路由组测试信号 "RST"
//case 0x25: //限制目的地的信令路由组测试信号 "RSR"
//以上六种信令都使用此解码函数
BOOL CSnmu2::GetDataDecode_TFP(BYTE *u_pMsg, DWORD u_msgLength, char *v_pParseData)
{
int dataLength=0;
int strLength=0, indexByte=0;
//#define SS7_SNMU_DATA_OFFSET (SS7_SNMU_H1H0_OFFSET + 1)
dataLength = u_msgLength - SS7_SNMU_DATA_OFFSET;
////////////////////////////////////////////
//目的地(8*3)
strLength += sprintf(&v_pParseData[strLength], "\n" );
indexByte = SS7_SNMU_DATA_OFFSET;
strLength += sprintf(&v_pParseData[strLength], \
"%02X %02X %02X DST :0x%02X%02X%02X %s\n",
u_pMsg[indexByte], u_pMsg[indexByte+1], u_pMsg[indexByte+2], \
u_pMsg[indexByte+2], u_pMsg[indexByte+1], u_pMsg[indexByte], \
("目的地信令点标识") );
return TRUE;
}
////////////////////////////////////////////////////////////////////
//CHM 倒换和倒回消息 Changeover and changeback message
//==================================================================
//case 0x51: //倒回说明信号 "CBD": ChangeBack-Declaration signal
//case 0x61: //倒回证实信号 "CBA": ChangBack-Acknowledgement signal
BOOL CSnmu2::GetDataDecode_CBD(BYTE *u_pMsg, DWORD u_msgLength, char *v_pParseData)
{
int dataLength=0;
int strLength=0, indexByte=0;
//#define SS7_SNMU_DATA_OFFSET (SS7_SNMU_H1H0_OFFSET + 1)
dataLength = u_msgLength - SS7_SNMU_DATA_OFFSET;
////////////////////////////////////////////
//倒回编码(8)
strLength += sprintf(&v_pParseData[strLength], "\n" );
indexByte = SS7_SNMU_DATA_OFFSET;
strLength += sprintf(&v_pParseData[strLength], \
"%02X CBC :0x%02X %s\n",
u_pMsg[indexByte], u_pMsg[indexByte], \
("倒回编码") );
return TRUE;
}
//case 0x11: //倒换命令信号 "COO": ChangeOver-Order signal
//case 0x21: //倒换证实信号 "COA": ChangeOver-Acknowledgement signal
BOOL CSnmu2::GetDataDecode_COO(BYTE *u_pMsg, DWORD u_msgLength, char *v_pParseData)
{
int dataLength=0;
int strLength=0, indexByte=0;
//#define SS7_SNMU_DATA_OFFSET (SS7_SNMU_H1H0_OFFSET + 1)
dataLength = u_msgLength - SS7_SNMU_DATA_OFFSET;
////////////////////////////////////////////
//最后收到的MSU的FSN(8)
strLength += sprintf(&v_pParseData[strLength], "\n" );
indexByte = SS7_SNMU_DATA_OFFSET;
strLength += sprintf(&v_pParseData[strLength], \
"%02X FSN :.%d%d%d%d%d%d%d %s\n",
u_pMsg[indexByte], \
(u_pMsg[indexByte]>>6 & 0x01), \
(u_pMsg[indexByte]>>5 & 0x01), (u_pMsg[indexByte]>>4 & 0x01), \
(u_pMsg[indexByte]>>3 & 0x01), (u_pMsg[indexByte]>>2 & 0x01), \
(u_pMsg[indexByte]>>1 & 0x01), (u_pMsg[indexByte] & 0x01), \
("最后收到的MSU的FSN") );
strLength += sprintf(&v_pParseData[strLength], \
" SPARE :%d....... \n", \
(u_pMsg[indexByte] >> 7) & 0x01 );
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -