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

📄 snmu2.cpp

📁 7号信令协议2M链路协议解码程序源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -