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

📄 isupptl.cpp

📁 ABis无线接口全套资料
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/* ======================================================================== *\
 |
 |
 |  JOYIT Communication Technology
 |  Copyright (C)  2003~2006,  All Right Reserved.
 |
 |  System: Programmable Signaling Gateway
 |  Sub-system:
 |  Filename: isup.cpp
 |  Environment: Red Hat Linux 7.2 & GNU C/C++ Compiler 2.96
 |  Function description: ISUP Protocol class
 |
\* ======================================================================== */

#ifndef _ISUPPTL_HPP
#include "isupptl.hpp"
#endif

#ifndef _ISUPFMT_HPP
#include "isupfmt.hpp"
#endif

#ifndef _JOYITIEFMT_HPP
#include "joyitiefmt.hpp"
#endif

UINT8 CIsupPdu::IsupIe2JoyitIe[MAX_IE];
UINT8 CIsupPdu::JoyitIe2IsupIe[MAX_IE];
UINT16 CIsupPdu::IsupMsg2JoyitMsg[MAX_MSG];
UINT8 CIsupPdu::JoyitMsg2IsupMsg[MAX_MSG];

CIsupPdu::CIsupPdu( ) : CPduBase(0, ISUP_VAR_CHINA, 24, 0)
{
	ownedPcmId = 0;
	ownedTsId = 0;
	rlcType = 0;
}

CIsupPdu::CIsupPdu(CIsupPdu& s) : CPduBase(s) // Copy construction function. Add 2005-11-19, by Wujianjin.
{
	ownedPcmId = s.ownedPcmId;
	ownedTsId = s.ownedTsId;
}

CIsupPdu::CIsupPdu(UINT8 pt, UINT8 pv, UINT8 pcf, UINT16 mt) : CPduBase(pt, pv, pcf, mt)
{
}

CIsupPdu::~CIsupPdu( )
{
}

void CIsupPdu::InitStaticData( )	// Initialize static data member.
{
	InitIsupIe( );
	InitJoyitIe( );
	InitIsupMsg( );
	InitJoyitMsg( );
}

void CIsupPdu::InitIsupIe( )	// Initialize IsupIe2JoyitIe array.
{
	memset(IsupIe2JoyitIe, 0xff, MAX_IE);

	IsupIe2JoyitIe[ISUP_IE_ACCDLVINF]	= PSG_IE_ACCDLVINF;
	IsupIe2JoyitIe[ISUP_IE_ACCTRN]		= PSG_IE_ACCTRN;
	IsupIe2JoyitIe[ISUP_IE_AUTOCNGLVL]	= PSG_IE_AUTOCNGLVL;
	IsupIe2JoyitIe[ISUP_IE_BCKCALLIND]	= PSG_IE_BCKCALLIND;
	IsupIe2JoyitIe[ISUP_IE_CALLDVSINF]	= PSG_IE_CALLDVSINF;
	IsupIe2JoyitIe[ISUP_IE_CALLHSTINF]	= PSG_IE_CALLHSTINF;
	IsupIe2JoyitIe[ISUP_IE_CALLRFR]		= PSG_IE_CALLRFR;
	IsupIe2JoyitIe[ISUP_IE_CLNPRTNUM]	= PSG_IE_CLNPRTNUM;
	IsupIe2JoyitIe[ISUP_IE_CLNPRTCTG]	= PSG_IE_CLNPRTCTG;
	IsupIe2JoyitIe[ISUP_IE_CAUSEIND]	= PSG_IE_CAUSEIND;

	IsupIe2JoyitIe[ISUP_IE_CGPSPVIND]	= PSG_IE_CGPSPVIND;
	IsupIe2JoyitIe[ISUP_IE_CCTSTATEIND]	= PSG_IE_CCTSTATEIND;
	IsupIe2JoyitIe[ISUP_IE_CLSUSRGRP]	= PSG_IE_CLSUSRGRP;
	IsupIe2JoyitIe[ISUP_IE_CONNUM]		= PSG_IE_CONNUM;
	IsupIe2JoyitIe[ISUP_IE_CONREQ]		= PSG_IE_CONREQ;
	IsupIe2JoyitIe[ISUP_IE_COTIND]		= PSG_IE_COTIND;
	IsupIe2JoyitIe[ISUP_IE_ECHOINF]		= PSG_IE_ECHOINF;
	IsupIe2JoyitIe[ISUP_IE_ENDOPT]		= PSG_IE_ENDOPT;
	IsupIe2JoyitIe[ISUP_IE_EVENTINF]	= PSG_IE_EVENTINF;
	IsupIe2JoyitIe[ISUP_IE_FACIND]		= PSG_IE_FACIND;

	IsupIe2JoyitIe[ISUP_IE_FWDCALLIND]	= PSG_IE_FWDCALLIND;
	IsupIe2JoyitIe[ISUP_IE_FREECALLIND]	= PSG_IE_FREECALLIND;
	IsupIe2JoyitIe[ISUP_IE_GNRDGT]		= PSG_IE_GNRDGT;
	IsupIe2JoyitIe[ISUP_IE_GNRIND]		= PSG_IE_GNRIND;
	IsupIe2JoyitIe[ISUP_IE_GNRNUM]		= PSG_IE_GNRNUM;
	IsupIe2JoyitIe[ISUP_IE_GNRRFR]		= PSG_IE_GNRRFR;
	IsupIe2JoyitIe[ISUP_IE_HOPCNT]		= PSG_IE_HOPCNT;
	IsupIe2JoyitIe[ISUP_IE_INFIND]		= PSG_IE_INFIND;
	IsupIe2JoyitIe[ISUP_IE_INFRQSIND]	= PSG_IE_INFRQSIND;
	IsupIe2JoyitIe[ISUP_IE_LCTNUM]		= PSG_IE_LCTNUM;

	IsupIe2JoyitIe[ISUP_IE_MCIDRQSIND]	= PSG_IE_MCIDRQSIND;
	IsupIe2JoyitIe[ISUP_IE_MCIDRSPIND]	= PSG_IE_MCIDRSPIND;
	IsupIe2JoyitIe[ISUP_IE_MSGCMPIND]	= PSG_IE_MSGCMPIND;
	IsupIe2JoyitIe[ISUP_IE_MLPPPRC]		= PSG_IE_MLPPPRC;
	IsupIe2JoyitIe[ISUP_IE_NTRCONIND]	= PSG_IE_NTRCONIND;
	IsupIe2JoyitIe[ISUP_IE_NTWSPCFCL]	= PSG_IE_NTWSPCFCL;
	IsupIe2JoyitIe[ISUP_IE_OPTBCKCALLIND]= PSG_IE_OPTBCKCALLIND;
	IsupIe2JoyitIe[ISUP_IE_OPTFWDCALLIND]= PSG_IE_OPTFWDCALLIND;
	IsupIe2JoyitIe[ISUP_IE_ORGCLDNUM]	= PSG_IE_ORGCLDNUM;
	IsupIe2JoyitIe[ISUP_IE_ORGISCPC]	= PSG_IE_ORGISCPC;

	IsupIe2JoyitIe[ISUP_IE_PARACOMPINFO]= PSG_IE_PARACOMPINFO;
	IsupIe2JoyitIe[ISUP_IE_PRPDELAYCNT]	= PSG_IE_PRPDELAYCNT;
	IsupIe2JoyitIe[ISUP_IE_RNGSTATUS]	= PSG_IE_RNGSTATUS;
	IsupIe2JoyitIe[ISUP_IE_REDNGNUM]	= PSG_IE_REDNGNUM;
	IsupIe2JoyitIe[ISUP_IE_REDIRINF]	= PSG_IE_REDIRINF;
	IsupIe2JoyitIe[ISUP_IE_REDIRNUM]	= PSG_IE_REDIRNUM;
	IsupIe2JoyitIe[ISUP_IE_REDIRNUMRSTR]= PSG_IE_REDIRNUMRSTR;
	IsupIe2JoyitIe[ISUP_IE_RMTOPR]		= PSG_IE_RMTOPR;
	IsupIe2JoyitIe[ISUP_IE_SRVACT]		= PSG_IE_SRVACT;
	IsupIe2JoyitIe[ISUP_IE_SPC]			= PSG_IE_SPC;

	IsupIe2JoyitIe[ISUP_IE_SUBNUM]		= PSG_IE_SUBNUM;
	IsupIe2JoyitIe[ISUP_IE_RESSUSIND]	= PSG_IE_RESSUSIND;
	IsupIe2JoyitIe[ISUP_IE_TRNNTWSLC]	= PSG_IE_TRNNTWSLC;
	IsupIe2JoyitIe[ISUP_IE_TRNMDMRQR]	= PSG_IE_TRNMDMRQR;
	IsupIe2JoyitIe[ISUP_IE_TRNMDMRQRP]	= PSG_IE_TRNMDMRQRP;
	IsupIe2JoyitIe[ISUP_IE_TRNMDMUSE]	= PSG_IE_TRNMDMUSE;
	IsupIe2JoyitIe[ISUP_IE_USRSRVINF]	= PSG_IE_USRSRVINF;
	IsupIe2JoyitIe[ISUP_IE_USRSRVINFP]	= PSG_IE_USRSRVINFP;
	IsupIe2JoyitIe[ISUP_IE_USRTELSRVINF]= PSG_IE_USRTELSRVINF;
	IsupIe2JoyitIe[ISUP_IE_USRTOUSRIND]	= PSG_IE_USRTOUSRIND;

	IsupIe2JoyitIe[ISUP_IE_USRTOUSRINF]	= PSG_IE_USRTOUSRINF;
	IsupIe2JoyitIe[ISUP_IE_CRGINF]		= PSG_IE_CRGINF;
}

void CIsupPdu::InitJoyitIe( )	// Initialize JoyitIe2IsupIe array.
{
	memset(JoyitIe2IsupIe, 0xff, MAX_IE);

	JoyitIe2IsupIe[PSG_IE_ACCDLVINF]	= ISUP_IE_ACCDLVINF;
	JoyitIe2IsupIe[PSG_IE_ACCTRN]		= ISUP_IE_ACCTRN;
	JoyitIe2IsupIe[PSG_IE_AUTOCNGLVL]	= ISUP_IE_AUTOCNGLVL;
	JoyitIe2IsupIe[PSG_IE_BCKCALLIND]	= ISUP_IE_BCKCALLIND;
	JoyitIe2IsupIe[PSG_IE_CALLDVSINF]	= ISUP_IE_CALLDVSINF;
	JoyitIe2IsupIe[PSG_IE_CALLHSTINF]	= ISUP_IE_CALLHSTINF;
	JoyitIe2IsupIe[PSG_IE_CALLRFR]		= ISUP_IE_CALLRFR;
	JoyitIe2IsupIe[PSG_IE_CLNPRTNUM]	= ISUP_IE_CLNPRTNUM;
	JoyitIe2IsupIe[PSG_IE_CLNPRTCTG]	= ISUP_IE_CLNPRTCTG;
	JoyitIe2IsupIe[PSG_IE_CAUSEIND]		= ISUP_IE_CAUSEIND;
	
	JoyitIe2IsupIe[PSG_IE_CGPSPVIND]	= ISUP_IE_CGPSPVIND;
	JoyitIe2IsupIe[PSG_IE_CCTSTATEIND]	= ISUP_IE_CCTSTATEIND;
	JoyitIe2IsupIe[PSG_IE_CLSUSRGRP]	= ISUP_IE_CLSUSRGRP;
	JoyitIe2IsupIe[PSG_IE_CONNUM]		= ISUP_IE_CONNUM;
	JoyitIe2IsupIe[PSG_IE_CONREQ]		= ISUP_IE_CONREQ;
	JoyitIe2IsupIe[PSG_IE_COTIND]		= ISUP_IE_COTIND;
	JoyitIe2IsupIe[PSG_IE_ECHOINF]		= ISUP_IE_ECHOINF;
	JoyitIe2IsupIe[PSG_IE_ENDOPT]		= ISUP_IE_ENDOPT;
	JoyitIe2IsupIe[PSG_IE_EVENTINF]		= ISUP_IE_EVENTINF;
	JoyitIe2IsupIe[PSG_IE_FACIND]		= ISUP_IE_FACIND;
	
	JoyitIe2IsupIe[PSG_IE_FWDCALLIND]	= ISUP_IE_FWDCALLIND;
	JoyitIe2IsupIe[PSG_IE_FREECALLIND]	= ISUP_IE_FREECALLIND;
	JoyitIe2IsupIe[PSG_IE_GNRDGT]		= ISUP_IE_GNRDGT;
	JoyitIe2IsupIe[PSG_IE_GNRIND]		= ISUP_IE_GNRIND;
	JoyitIe2IsupIe[PSG_IE_GNRNUM]		= ISUP_IE_GNRNUM;
	JoyitIe2IsupIe[PSG_IE_GNRRFR]		= ISUP_IE_GNRRFR;
	JoyitIe2IsupIe[PSG_IE_HOPCNT]		= ISUP_IE_HOPCNT;
	JoyitIe2IsupIe[PSG_IE_INFIND]		= ISUP_IE_INFIND;
	JoyitIe2IsupIe[PSG_IE_INFRQSIND]	= ISUP_IE_INFRQSIND;
	JoyitIe2IsupIe[PSG_IE_LCTNUM]		= ISUP_IE_LCTNUM;
	
	JoyitIe2IsupIe[PSG_IE_MCIDRQSIND]	= ISUP_IE_MCIDRQSIND;
	JoyitIe2IsupIe[PSG_IE_MCIDRSPIND]	= ISUP_IE_MCIDRSPIND;
	JoyitIe2IsupIe[PSG_IE_MSGCMPIND]	= ISUP_IE_MSGCMPIND;
	JoyitIe2IsupIe[PSG_IE_MLPPPRC]		= ISUP_IE_MLPPPRC;
	JoyitIe2IsupIe[PSG_IE_NTRCONIND]	= ISUP_IE_NTRCONIND;
	JoyitIe2IsupIe[PSG_IE_NTWSPCFCL]	= ISUP_IE_NTWSPCFCL;
	JoyitIe2IsupIe[PSG_IE_OPTBCKCALLIND]= ISUP_IE_OPTBCKCALLIND;
	JoyitIe2IsupIe[PSG_IE_OPTFWDCALLIND]= ISUP_IE_OPTFWDCALLIND;
	JoyitIe2IsupIe[PSG_IE_ORGCLDNUM]	= ISUP_IE_ORGCLDNUM;
	JoyitIe2IsupIe[PSG_IE_ORGISCPC]		= ISUP_IE_ORGISCPC;
	
	JoyitIe2IsupIe[PSG_IE_PARACOMPINFO]	= ISUP_IE_PARACOMPINFO;
	JoyitIe2IsupIe[PSG_IE_PRPDELAYCNT]	= ISUP_IE_PRPDELAYCNT;
	JoyitIe2IsupIe[PSG_IE_RNGSTATUS]	= ISUP_IE_RNGSTATUS;
	JoyitIe2IsupIe[PSG_IE_REDNGNUM]		= ISUP_IE_REDNGNUM;
	JoyitIe2IsupIe[PSG_IE_REDIRINF]		= ISUP_IE_REDIRINF;
	JoyitIe2IsupIe[PSG_IE_REDIRNUM]		= ISUP_IE_REDIRNUM;
	JoyitIe2IsupIe[PSG_IE_REDIRNUMRSTR]	= ISUP_IE_REDIRNUMRSTR;
	JoyitIe2IsupIe[PSG_IE_RMTOPR]		= ISUP_IE_RMTOPR;
	JoyitIe2IsupIe[PSG_IE_SRVACT]		= ISUP_IE_SRVACT;
	JoyitIe2IsupIe[PSG_IE_SPC]			= ISUP_IE_SPC;
	
	JoyitIe2IsupIe[PSG_IE_SUBNUM]		= ISUP_IE_SUBNUM;
	JoyitIe2IsupIe[PSG_IE_RESSUSIND]	= ISUP_IE_RESSUSIND;
	JoyitIe2IsupIe[PSG_IE_TRNNTWSLC]	= ISUP_IE_TRNNTWSLC;
	JoyitIe2IsupIe[PSG_IE_TRNMDMRQR]	= ISUP_IE_TRNMDMRQR;
	JoyitIe2IsupIe[PSG_IE_TRNMDMRQRP]	= ISUP_IE_TRNMDMRQRP;
	JoyitIe2IsupIe[PSG_IE_TRNMDMUSE]	= ISUP_IE_TRNMDMUSE;
	JoyitIe2IsupIe[PSG_IE_USRSRVINF]	= ISUP_IE_USRSRVINF;
	JoyitIe2IsupIe[PSG_IE_USRSRVINFP]	= ISUP_IE_USRSRVINFP;
	JoyitIe2IsupIe[PSG_IE_USRTELSRVINF]	= ISUP_IE_USRTELSRVINF;
	JoyitIe2IsupIe[PSG_IE_USRTOUSRIND]	= ISUP_IE_USRTOUSRIND;
	
	JoyitIe2IsupIe[PSG_IE_USRTOUSRINF]	= ISUP_IE_USRTOUSRINF;
	JoyitIe2IsupIe[PSG_IE_CRGINF]		= ISUP_IE_CRGINF;
}

void CIsupPdu::InitIsupMsg( )	// Initialize IsupMsg2JoyitMsg array.
{
	memset(IsupMsg2JoyitMsg, 0xff, sizeof(UINT16)*MAX_MSG);

	IsupMsg2JoyitMsg[ISUP_ACM]	= PSG_MSG_ISUP_ACM;
	IsupMsg2JoyitMsg[ISUP_ANM]	= PSG_MSG_ISUP_ANM;
	IsupMsg2JoyitMsg[ISUP_BLO]	= PSG_MSG_ISUP_BLO;
	IsupMsg2JoyitMsg[ISUP_BLA]	= PSG_MSG_ISUP_BLA;
	IsupMsg2JoyitMsg[ISUP_CPG]	= PSG_MSG_ISUP_CPG;
	IsupMsg2JoyitMsg[ISUP_CGB]	= PSG_MSG_ISUP_CGB;
	IsupMsg2JoyitMsg[ISUP_CGBA]	= PSG_MSG_ISUP_CGBA;
	IsupMsg2JoyitMsg[ISUP_CQM]	= PSG_MSG_ISUP_CQM;
	IsupMsg2JoyitMsg[ISUP_CQR]	= PSG_MSG_ISUP_CQR;
	IsupMsg2JoyitMsg[ISUP_GRS]	= PSG_MSG_ISUP_GRS;
	IsupMsg2JoyitMsg[ISUP_GRA]	= PSG_MSG_ISUP_GRA;
	IsupMsg2JoyitMsg[ISUP_CGU]	= PSG_MSG_ISUP_CGU;
	IsupMsg2JoyitMsg[ISUP_CGUA]	= PSG_MSG_ISUP_CGUA;
	IsupMsg2JoyitMsg[ISUP_CRG]	= PSG_MSG_ISUP_CRG;
	IsupMsg2JoyitMsg[ISUP_CFN]	= PSG_MSG_ISUP_CFN;
	IsupMsg2JoyitMsg[ISUP_CON]	= PSG_MSG_ISUP_CON;
	IsupMsg2JoyitMsg[ISUP_COT]	= PSG_MSG_ISUP_COT;
	IsupMsg2JoyitMsg[ISUP_CCR]	= PSG_MSG_ISUP_CCR;
	IsupMsg2JoyitMsg[ISUP_FAC]	= PSG_MSG_ISUP_FAC;
	IsupMsg2JoyitMsg[ISUP_FAA]	= PSG_MSG_ISUP_FAA;
	IsupMsg2JoyitMsg[ISUP_FRJ]	= PSG_MSG_ISUP_FRJ;
	IsupMsg2JoyitMsg[ISUP_FAR]	= PSG_MSG_ISUP_FAR;
	IsupMsg2JoyitMsg[ISUP_FOT]	= PSG_MSG_ISUP_FOT;
	IsupMsg2JoyitMsg[ISUP_IDR]	= PSG_MSG_ISUP_IDR;
	IsupMsg2JoyitMsg[ISUP_IRS]	= PSG_MSG_ISUP_IRS;
	IsupMsg2JoyitMsg[ISUP_INF]	= PSG_MSG_ISUP_INF;
	IsupMsg2JoyitMsg[ISUP_INR]	= PSG_MSG_ISUP_INR;
	IsupMsg2JoyitMsg[ISUP_IAM]	= PSG_MSG_ISUP_IAM;
	IsupMsg2JoyitMsg[ISUP_LPA]	= PSG_MSG_ISUP_LPA;
	IsupMsg2JoyitMsg[ISUP_NRM]	= PSG_MSG_ISUP_NRM;
	IsupMsg2JoyitMsg[ISUP_OLM]	= PSG_MSG_ISUP_OLM;
	IsupMsg2JoyitMsg[ISUP_PAM]	= PSG_MSG_ISUP_PAM;
	IsupMsg2JoyitMsg[ISUP_REL]	= PSG_MSG_ISUP_REL;
	IsupMsg2JoyitMsg[ISUP_RLC]	= PSG_MSG_ISUP_RLC;
	IsupMsg2JoyitMsg[ISUP_RSC]	= PSG_MSG_ISUP_RSC;
	IsupMsg2JoyitMsg[ISUP_RES]	= PSG_MSG_ISUP_RES;
	IsupMsg2JoyitMsg[ISUP_SGM]	= PSG_MSG_ISUP_SGM;
	IsupMsg2JoyitMsg[ISUP_SAM]	= PSG_MSG_ISUP_SAM;
	IsupMsg2JoyitMsg[ISUP_SUS]	= PSG_MSG_ISUP_SUS;
	IsupMsg2JoyitMsg[ISUP_UBL]	= PSG_MSG_ISUP_UBL;
	IsupMsg2JoyitMsg[ISUP_UBA]	= PSG_MSG_ISUP_UBA;
	IsupMsg2JoyitMsg[ISUP_UCIC]	= PSG_MSG_ISUP_UCIC;
	IsupMsg2JoyitMsg[ISUP_UPA]	= PSG_MSG_ISUP_UPA;
	IsupMsg2JoyitMsg[ISUP_UPT]	= PSG_MSG_ISUP_UPT;
	IsupMsg2JoyitMsg[ISUP_USR]	= PSG_MSG_ISUP_USR;
	IsupMsg2JoyitMsg[ISUP_OPR]	= PSG_MSG_ISUP_OPR;
	IsupMsg2JoyitMsg[ISUP_MPM]	= PSG_MSG_ISUP_MPM;
	IsupMsg2JoyitMsg[ISUP_CCL]	= PSG_MSG_ISUP_CCL;
}

void CIsupPdu::InitJoyitMsg( )	// Initialize JoyitMsg2IsupMsg array.
{
	memset(JoyitMsg2IsupMsg, 0xff, MAX_MSG);
	
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_ACM-0x100]	= ISUP_ACM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_ANM-0x100]	= ISUP_ANM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_BLO-0x100]	= ISUP_BLO;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_BLA-0x100]	= ISUP_BLA;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CPG-0x100]	= ISUP_CPG;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CGB-0x100]	= ISUP_CGB;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CGBA-0x100]	= ISUP_CGBA;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CQM-0x100]	= ISUP_CQM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CQR-0x100]	= ISUP_CQR;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_GRS-0x100]	= ISUP_GRS;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_GRA-0x100]	= ISUP_GRA;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CGU-0x100]	= ISUP_CGU;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CGUA-0x100]	= ISUP_CGUA;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CRG-0x100]	= ISUP_CRG;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CFN-0x100]	= ISUP_CFN;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CON-0x100]	= ISUP_CON;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_COT-0x100]	= ISUP_COT;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CCR-0x100]	= ISUP_CCR;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_FAC-0x100]	= ISUP_FAC;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_FAA-0x100]	= ISUP_FAA;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_FRJ-0x100]	= ISUP_FRJ;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_FAR-0x100]	= ISUP_FAR;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_FOT-0x100]	= ISUP_FOT;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_IDR-0x100]	= ISUP_IDR;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_IRS-0x100]	= ISUP_IRS;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_INF-0x100]	= ISUP_INF;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_INR-0x100]	= ISUP_INR;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_IAM-0x100]	= ISUP_IAM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_LPA-0x100]	= ISUP_LPA;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_NRM-0x100]	= ISUP_NRM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_OLM-0x100]	= ISUP_OLM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_PAM-0x100]	= ISUP_PAM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_REL-0x100]	= ISUP_REL;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_RLC-0x100]	= ISUP_RLC;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_RSC-0x100]	= ISUP_RSC;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_RES-0x100]	= ISUP_RES;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_SGM-0x100]	= ISUP_SGM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_SAM-0x100]	= ISUP_SAM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_SUS-0x100]	= ISUP_SUS;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_UBL-0x100]	= ISUP_UBL;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_UBA-0x100]	= ISUP_UBA;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_UCIC-0x100]	= ISUP_UCIC;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_UPA-0x100]	= ISUP_UPA;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_UPT-0x100]	= ISUP_UPT;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_USR-0x100]	= ISUP_USR;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_OPR-0x100]	= ISUP_OPR;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_MPM-0x100]	= ISUP_MPM;
	JoyitMsg2IsupMsg[PSG_MSG_ISUP_CCL-0x100]	= ISUP_CCL;
}

uchar CIsupPdu::ToJoyitIe(UINT8 id)	// ISUP's IE to ISUP API's IE index.
{
	return (id < MAX_IE) ? IsupIe2JoyitIe[id] : 0xff;
}

uchar CIsupPdu::ToIsupIe(UINT8 id)		// ISUP API's IE index to ISUP's IE.
{
	return (id < MAX_IE) ? JoyitIe2IsupIe[id] : 0xff;
}

UINT16 CIsupPdu::ToJoyitMsg(UINT8 id)	// ISUP message type to ISUP API message index.
{
	return (id < MAX_MSG) ? IsupMsg2JoyitMsg[id] : 0xFFFF;
}

uchar CIsupPdu::ToIsupMsg(UINT16 id)	// ISUP API message index to ISUP message type.
{
	UINT8 msgindex = id - 0x100;

	return (msgindex < MAX_MSG) ? JoyitMsg2IsupMsg[msgindex] : 0xFF;
}

int CIsupPdu::Unpacked(char  * ptr, UINT16 len, UINT8 mod)
{
	int r = 0;

	switch (mod)
	{
		case MOD_JOYIT:
		case MOD_TUPAPI:
		case MOD_ISUPAPI:
		case MOD_Q931API:
			r = DecomposeJoyitApi(ptr, len);
			break;

		case MOD_ISUP:
			r = DecomposeIsupPdu(ptr, len);
			break;
			
		default:
			break;
	} // End of switch(mod)

	return r;
}

char  * CIsupPdu::OutPut(UINT16& len, UINT8 mod)
{
	char  * pPdu = NULL;
	len = 0;

	switch (mod)
	{
		case MOD_JOYIT:
			pPdu = ComposeJoyitApi(len);
			break;

		case MOD_ISUP:
			pPdu = ComposeIsupPdu(len);
			break;

		default:
			break;
	} // End of switch(mod)

	return pPdu;
}

// Return:
//		>= 0		Success.
//		-1			ISUP message too short.
//		-2			ISUP message type unrecognized.
//		-3			ISUP message content invalid IE value.
//		-4			ISUP IE unrecognized.
//		-5			ISUP message too long, exceeding data be attached.
int CIsupPdu::DecomposeIsupPdu(char  * ptr, UINT16 len)
{
	int r = 0;
	char *pPdu = ptr;
	// UINT8 noie;
	// UINT16 pos = 0; // Calculate the length of PDU.
    // int isup_header_len;
	char tmpbuf[64];
	char eoop = 0;
	memset(tmpbuf, 0, 64);
	
	LengthOfHeader = (24 == GetSS7Pcf( )) ? sizeof(SIsupHead24bits) : sizeof(SIsupHead14bits);

	if (len < LengthOfHeader)
	{
		// Exception.
		r = -1; // Message data string too short.
	}
	else
	{ // Begin to decompose pdu.
		// Store the ISUP message header.
		memcpy(Header, ptr, LengthOfHeader);

		// pos += LengthOfHeader;
		pPdu += LengthOfHeader;

		uchar vptr; // Variable parameter value.
		uchar vpos; // Variable parameter pointer position. 
		uchar optr; // Optional parameter value.
		uchar opos; // Optional parameter pointer position.
		uchar ieLen, numLen;
		uchar isupIe, joyitIe;
		
		vptr = 0; // Variable pointer not exist.
		optr = 0; // Optional pointer not exist.

		// Gain ISUP message type.
		UINT16 mt = Header[LengthOfHeader-1];

		SetMessageType(CIsupPdu::ToJoyitMsg(mt));

		if (0xFFFF == GetMessageType( ))
		{
			r = -2; // ISUP message type unrecognized.
		}
		else
		{
			// Get FIX and VARIABLE parameter.
			switch (GetMessageType( ))
			{
				case PSG_MSG_ISUP_ACM: // Backward call indicator and optional parameter.
				case PSG_MSG_ISUP_CON:
					PutIE(PSG_IE_BCKCALLIND, sizeof(SBackwardCallIndicators), pPdu);
					pPdu += sizeof(SBackwardCallIndicators);

					optr = *pPdu ++;
				
					break;

				case PSG_MSG_ISUP_ANM: // Only optional parameters.
				case PSG_MSG_ISUP_RLC:
				case PSG_MSG_ISUP_FOT:
				case PSG_MSG_ISUP_UPT:
				case PSG_MSG_ISUP_UPA:
				case PSG_MSG_ISUP_FAC:
				case PSG_MSG_ISUP_NRM:
				case PSG_MSG_ISUP_IDR:
				case PSG_MSG_ISUP_IRS:
				case PSG_MSG_ISUP_SGM:
				case PSG_MSG_ISUP_OPR:
				case PSG_MSG_ISUP_CCL:
					optr = *pPdu ++;
				
					break;

				case PSG_MSG_ISUP_CPG: // Event information and optional parameters.
					PutIE(PSG_IE_EVENTINF, sizeof(SEventInformation), pPdu);
					pPdu += sizeof(SEventInformation);

					opos = pPdu - ptr;
					optr = *pPdu ++;
				
					break;

				case PSG_MSG_ISUP_CQR: // Only variable.
					vpos = pPdu - ptr;
					vptr = *pPdu ++;
				
					ieLen = *pPdu --;
					ieLen = ieLen + 2;

					PutIE(PSG_IE_RNGSTATUS, ieLen, pPdu);

					pPdu += ieLen;
					pPdu ++;
					ieLen = *pPdu --;
					ieLen = ieLen + 2;

					PutIE(PSG_IE_CIRSTA, ieLen , pPdu);

					pPdu += ieLen;
				
					break;

				case PSG_MSG_ISUP_GRA:
					vpos = pPdu - ptr;
					vptr = *pPdu ++;
				
					ieLen = *pPdu ++;
					tmpbuf[0] = CGIND_RESET;
					memcpy(tmpbuf+1, pPdu, ieLen);
					tmpbuf[1] ++; // Range --> Number of circuits.
				
					PutIE(PSG_IE_CG_IND, ieLen+1, tmpbuf);
				
					pPdu += ieLen;

					break;

				case PSG_MSG_ISUP_CFN:
					vpos = pPdu - ptr;
					vptr = *pPdu ++;
					opos = pPdu - ptr;
					optr = *pPdu ++;
				
					ieLen = *pPdu ++;

					PutIE(PSG_IE_CAUSEIND, ieLen, pPdu);
					
					pPdu += ieLen;

					break;

				case PSG_MSG_ISUP_COT:
					PutIE(PSG_IE_COTIND, sizeof(SContinuityIndicators), pPdu);
					pPdu += sizeof(SContinuityIndicators);
				
					break;

				case PSG_MSG_ISUP_FRJ: // Facility indicator and V & O.
					PutIE(PSG_IE_FACIND, sizeof(SFacilityIndicators), pPdu);
					pPdu += sizeof(SFacilityIndicators);

					vpos = pPdu - ptr;
					vptr = *pPdu ++;
					opos = pPdu - ptr;
					optr = *pPdu ++;

					ieLen = *pPdu ++;

					PutIE(PSG_IE_CAUSEIND, ieLen, pPdu);
					pPdu += ieLen;
				
					break;

				case PSG_MSG_ISUP_INF:
					PutIE(PSG_IE_INFIND, sizeof(SInformationIndicators), pPdu);
					pPdu += sizeof(SInformationIndicators);

					opos = pPdu - ptr;
					optr = *pPdu ++;

					break;

				case PSG_MSG_ISUP_INR:
					PutIE(PSG_IE_INFRQSIND, sizeof(SInformationRequestIndicators), pPdu);
					pPdu += sizeof(SInformationRequestIndicators);

					opos = pPdu - ptr;
					optr = *pPdu ++;
				
					break;

				case PSG_MSG_ISUP_IAM:
					PutIE(PSG_IE_NTRCONIND, sizeof(SNatureOfConnection), pPdu);
					pPdu += sizeof(SNatureOfConnection);

					PutIE(PSG_IE_FWDCALLIND, sizeof(SForwardCallIndicators), pPdu);
					pPdu += sizeof(SForwardCallIndicators);

					PutIE(PSG_IE_CLNPRTCTG, sizeof(SCallingPartysCatetgory), pPdu);
					pPdu += sizeof(SCallingPartysCatetgory);

					PutIE(PSG_IE_TRNMDMRQR, sizeof(STransmissionMediumRequirement), pPdu);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -