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

📄 snmu2.cpp

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