📄 snmu2.cpp
字号:
// Snmu2.cpp: implementation of the CSnmu2 class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "decode2.h"
#include "Snmu2.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSnmu2::CSnmu2()
{
this->createH1h0Table();
}
CSnmu2::~CSnmu2()
{
}
void CSnmu2::createH1h0Table()
{
int i;
for(i=0; i<256; i++)
{
strcpy(m_h1h0Table[i], "RES");
}
strcpy(m_h1h0Table[0x11], "COO");
strcpy(m_h1h0Table[0x12], "ECO");
strcpy(m_h1h0Table[0x13], "RCT");
strcpy(m_h1h0Table[0x14], "TFP");
strcpy(m_h1h0Table[0x15], "RST");
strcpy(m_h1h0Table[0x16], "LIN");
strcpy(m_h1h0Table[0x17], "TRA");
strcpy(m_h1h0Table[0x18], "DLC");
strcpy(m_h1h0Table[0x1A], "UPU");
strcpy(m_h1h0Table[0x21], "COA");
strcpy(m_h1h0Table[0x22], "ECA");
strcpy(m_h1h0Table[0x23], "TFC");
strcpy(m_h1h0Table[0x25], "RSR");
strcpy(m_h1h0Table[0x26], "LUN");
strcpy(m_h1h0Table[0x28], "CSS");
strcpy(m_h1h0Table[0x34], "TFR");
strcpy(m_h1h0Table[0x36], "LIA");
strcpy(m_h1h0Table[0x38], "CNS");
strcpy(m_h1h0Table[0x46], "LUA");
strcpy(m_h1h0Table[0x48], "CNP");
strcpy(m_h1h0Table[0x51], "CBD");
strcpy(m_h1h0Table[0x54], "TFA");
strcpy(m_h1h0Table[0x56], "LID");
strcpy(m_h1h0Table[0x61], "CBA");
strcpy(m_h1h0Table[0x66], "LFU");
strcpy(m_h1h0Table[0x76], "LLT");
strcpy(m_h1h0Table[0x86], "LRT");
}
BOOL CSnmu2::GetH1H0(BYTE *u_pMsg, DWORD u_msgLength, char *v_pH1H0)
{
sprintf(v_pH1H0, "%02X", u_pMsg[SS7_SNMU_H1H0_OFFSET]);
return TRUE;
}
BOOL CSnmu2::GetSls(BYTE *u_pMsg, DWORD u_msgLength, char *v_pSls)
{
sprintf(v_pSls, "%X", u_pMsg[SS7_SNMU_SLC_OFFSET] & SS7_SNMU_SLC_MASK);
return TRUE;
}
BOOL CSnmu2::GetCic(BYTE *u_pMsg, DWORD u_msgLength, char *v_pCic)
{
v_pCic[0] = 0;
return TRUE;
}
BOOL CSnmu2::GetData(BYTE *u_pMsg, DWORD u_msgLength, char *v_pData)
{
extern CDecodeApp2 theApp;
int dataLength;
int i, temp;
temp = SS7_SNMU_DATA_OFFSET + MAX_DATA_BYTE_NUMBER - 1;
if(temp > ((int )u_msgLength))
{
dataLength = u_msgLength - SS7_SNMU_DATA_OFFSET;
}
else
{
dataLength = MAX_DATA_BYTE_NUMBER;
}
temp = 0;
for(i=0; i<dataLength; i++)
{
theApp.ConvertOneByte(u_pMsg[SS7_SNMU_DATA_OFFSET + i], \
&v_pData[temp]);
temp += 3;
}
return TRUE;
}
BOOL CSnmu2::GetMessageDecodeInfo(BYTE *u_pMsg, DWORD u_msgLength, char *v_pDecodeResult)
{
int strLength;
BYTE temp;
strLength = 0;
temp = u_pMsg[SS7_SNMU_SLC_OFFSET];
sprintf(&v_pDecodeResult[strLength],
"%02X SLC :....%d%d%d%d \n",
temp, (temp >> 3) & 0x01, (temp >> 2) & 0x01, (temp >> 1) & 0x01, temp & 0x01);
strLength = strlen(v_pDecodeResult);
sprintf(&v_pDecodeResult[strLength], \
" SPARE :%d%d%d%d.... \n",
(temp >> 7) & 0x01, (temp >> 6) & 0x01, (temp >> 5) & 0x01, (temp >> 4) & 0x01);
strLength = strlen(v_pDecodeResult);
temp = u_pMsg[SS7_SNMU_H1H0_OFFSET];
sprintf(&v_pDecodeResult[strLength], \
"%02X H1H0 :%s \n",
temp, m_h1h0Table[temp]);
///////////////////////////////////////////////
//// added by me
strLength = strlen(v_pDecodeResult);
GetMessageDecodeInfo_AfterH1H0(u_pMsg, u_msgLength, &v_pDecodeResult[strLength]);
/////////////////////////////////////////////////
return TRUE;
}
BOOL CSnmu2::GetMessageDecodeInfo_AfterH1H0(BYTE *u_pMsg, DWORD u_msgLength, char *v_pDecodeResult)
{
/////////////////////////////////////////////
//// 此编写不同类消息解析的代码
BYTE nH1H0;
nH1H0 = u_pMsg[SS7_SNMU_H1H0_OFFSET]; //#define SS7_SNMU_H1H0_OFFSET (11)
switch(nH1H0)
{
////////////////////////////////////////////////////////////////////
//CHM 倒换和倒回消息 Changeover and changeback message
case 0x11: //倒换命令信号 "COO": ChangeOver-Order signal
GetDataDecode_COO(u_pMsg, u_msgLength, v_pDecodeResult);
break;
case 0x21: //倒换证实信号 "COA": ChangeOver-Acknowledgement signal
GetDataDecode_COO(u_pMsg, u_msgLength, v_pDecodeResult);
break;
case 0x51: //倒回说明信号 "CBD": ChangeBack-Declaration signal
GetDataDecode_CBD(u_pMsg, u_msgLength, v_pDecodeResult);
break;
case 0x61: //倒回证实信号 "CBA": ChangBack-Acknowledgement signal
GetDataDecode_CBD(u_pMsg, u_msgLength, v_pDecodeResult);
break;
////////////////////////////////////////////////////////////////////
//ECM 紧急倒换消息 Emergency-changeover message
case 0x12: //紧急倒换命令信号 "ECO":Emergency-changeover-order signal
//没有data数据段,无需解析
break;
case 0x22: //紧急倒换证实信号 "ECA":Emergency-changeover-acknowledgement signal
//没有data数据段,无需解析
break;
////////////////////////////////////////////////////////////////////
//FCM 信令业务流量控制消息 Signalling-traffic-flow control message
case 0x13: //信令路由组拥塞测试信号 "RCT" : Signalling-route-set-congestion-test signal
//没有data数据段,无需解析
break;
case 0x23: //受控传递信号 "TFC": Transfer-Controlled signal
GetDataDecode_TFC(u_pMsg, u_msgLength, v_pDecodeResult);
break;
////////////////////////////////////////////////////////////////////
//TFM 禁止传递、允许传递、受限传递消息 Transfer-prohibited,transfer-allowed and transfer-restricted message
case 0x14: //禁止传递信号 "TFP":Transfer-prohibited signal
GetDataDecode_TFP(u_pMsg, u_msgLength, v_pDecodeResult);
break;
case 0x34: //受限传递信号 "TFR":Transfer-restricted signal
GetDataDecode_TFP(u_pMsg, u_msgLength, v_pDecodeResult);
break;
case 0x54: //允许传递信号 "TFA":Transfer-allowed signal
GetDataDecode_TFP(u_pMsg, u_msgLength, v_pDecodeResult);
break;
////////////////////////////////////////////////////////////////////
//RSM 信号路由组测试消息 Signalling-route-set-test message
case 0x15: //禁止目的地的信令路由组测试信号 "RST"
GetDataDecode_TFP(u_pMsg, u_msgLength, v_pDecodeResult);
break;
case 0x25: //限制目的地的信令路由组测试信号 "RSR"
GetDataDecode_TFP(u_pMsg, u_msgLength, v_pDecodeResult);
break;
////////////////////////////////////////////////////////////////////
//MIM 管理阻断消息 Management inhibit messages
//没有data数据段,无需解析
case 0x16: //阻断链路信号 "LIN":Link inhibit signal
break;
case 0x26: //解除阻断链路信号 "LUN":Link uninhibit signal
break;
case 0x36: //阻断链路证实信号 "LIA":Link inhibit acknowledgement signal
break;
case 0x46: //解除阻断链路证实信号 "LUA":Link uninhibit acknowledgement signal
break;
case 0x56: //阻断链路否认信号 "LID":Link inhibit denied signal
break;
case 0x66: //强制解除阻断链路信号 "LFU":Link forced uninhibit signal
break;
case 0x76: //本地阻断链路测试信号 "LLT":Link locoal inhibit test signal
break;
case 0x86: //远端阻断链路测试信号 "LRT":Link remote inhibit signal
break;
////////////////////////////////////////////////////////////////////
//TRM 业务再启动允许消息 Traffic-restart-allowed messages
//没有data数据段,无需解析
case 0x17: //业务再启动允许信号 "TRA":Traffic-Restart-Allowed signal
break;
////////////////////////////////////////////////////////////////////
//DLM 信令数据链路连接命令信号 Signalling-data-link-connection-order message
case 0x18: //信令数据链路连接命令信号 "DLC":signalling-data-link-connection-order signal
GetDataDecode_DLC(u_pMsg, u_msgLength, v_pDecodeResult);
break;
case 0x28: //连接成功信号 "CSS":Connection successful signal
//没有data数据段,无需解析
break;
case 0x38: //连接不成功信号 "CNS":connection-not-successful signal
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -