📄 tupptl.cpp
字号:
/* ======================================================================== *\
|
|
| JOYIT Communication Technology
| Copyright (C) 2003~2006, All Right Reserved.
|
| System: Programmable Signaling Gateway
| Sub-system:
| Filename: tupptl.cpp
| Environment: Red Hat Linux 7.2 & GNU C/C++ Compiler 2.96
| Function description: Tup Protocol class
|
\* ======================================================================== */
#ifndef _TUPPTL_HPP
#include "tupptl.hpp"
#endif
#ifndef _TUPFMT_HPP
#include "tupfmt.hpp"
#endif
#ifndef _JOYITIEFMT_HPP
#include "joyitiefmt.hpp"
#endif
UINT16 CTupPdu::TupMsg2JoyitMsg[MAX_MSG];
UINT8 CTupPdu::JoyitMsg2TupMsg[MAX_MSG];
CTupPdu::CTupPdu( ) : CPduBase(0, TUP_VAR_CHINA, 24, 0)
{
ownedPcmId = 0;
ownedTsId = 0;
}
CTupPdu::CTupPdu(CTupPdu& s) : CPduBase(s) // Copy construction function. Add 2005-11-19, by Wujianjin.
{
ownedPcmId = s.ownedPcmId;
ownedTsId = s.ownedTsId;
}
CTupPdu::CTupPdu(UINT8 pt, UINT8 pv, UINT8 pcf, UINT16 mt) : CPduBase(pt, pv, pcf, mt)
{
}
CTupPdu::~CTupPdu( )
{
}
void CTupPdu::InitStaticData( ) // Initialize static data member.
{
InitTupMsg( );
InitJoyitMsg( );
}
void CTupPdu::InitTupMsg( ) // Initialize TupMsg2JoyitMsg array.
{
memset(TupMsg2JoyitMsg, 0xff, sizeof(UINT16)*MAX_MSG);
TupMsg2JoyitMsg[TUP_IAM] = PSG_MSG_TUP_IAM;
TupMsg2JoyitMsg[TUP_IAI] = PSG_MSG_TUP_IAI;
TupMsg2JoyitMsg[TUP_SAM] = PSG_MSG_TUP_SAM;
TupMsg2JoyitMsg[TUP_SAO] = PSG_MSG_TUP_SAO;
TupMsg2JoyitMsg[TUP_GSM] = PSG_MSG_TUP_GSM;
TupMsg2JoyitMsg[TUP_COT] = PSG_MSG_TUP_COT;
TupMsg2JoyitMsg[TUP_CCF] = PSG_MSG_TUP_CCF;
TupMsg2JoyitMsg[TUP_GRQ] = PSG_MSG_TUP_GRQ;
TupMsg2JoyitMsg[TUP_ACM] = PSG_MSG_TUP_ACM;
TupMsg2JoyitMsg[TUP_CHG] = PSG_MSG_TUP_CHG;
TupMsg2JoyitMsg[TUP_SEC] = PSG_MSG_TUP_SEC;
TupMsg2JoyitMsg[TUP_CGC] = PSG_MSG_TUP_CGC;
TupMsg2JoyitMsg[TUP_NNC] = PSG_MSG_TUP_NNC;
TupMsg2JoyitMsg[TUP_ADI] = PSG_MSG_TUP_ADI;
TupMsg2JoyitMsg[TUP_CFL] = PSG_MSG_TUP_CFL;
TupMsg2JoyitMsg[TUP_SSB] = PSG_MSG_TUP_SSB;
TupMsg2JoyitMsg[TUP_UNN] = PSG_MSG_TUP_UNN;
TupMsg2JoyitMsg[TUP_LOS] = PSG_MSG_TUP_LOS;
TupMsg2JoyitMsg[TUP_SST] = PSG_MSG_TUP_SST;
TupMsg2JoyitMsg[TUP_ACB] = PSG_MSG_TUP_ACB;
TupMsg2JoyitMsg[TUP_DPN] = PSG_MSG_TUP_DPN;
TupMsg2JoyitMsg[TUP_EUM] = PSG_MSG_TUP_EUM;
TupMsg2JoyitMsg[TUP_ANU] = PSG_MSG_TUP_ANU;
TupMsg2JoyitMsg[TUP_ANC] = PSG_MSG_TUP_ANC;
TupMsg2JoyitMsg[TUP_ANN] = PSG_MSG_TUP_ANN;
TupMsg2JoyitMsg[TUP_CBK] = PSG_MSG_TUP_CBK;
TupMsg2JoyitMsg[TUP_IAM] = PSG_MSG_TUP_IAM;
TupMsg2JoyitMsg[TUP_CLF] = PSG_MSG_TUP_CLF;
TupMsg2JoyitMsg[TUP_RAN] = PSG_MSG_TUP_RAN;
TupMsg2JoyitMsg[TUP_FOT] = PSG_MSG_TUP_FOT;
TupMsg2JoyitMsg[TUP_CCL] = PSG_MSG_TUP_CCL;
TupMsg2JoyitMsg[TUP_RLG] = PSG_MSG_TUP_RLG;
TupMsg2JoyitMsg[TUP_BLO] = PSG_MSG_TUP_BLO;
TupMsg2JoyitMsg[TUP_BLA] = PSG_MSG_TUP_BLA;
TupMsg2JoyitMsg[TUP_UBL] = PSG_MSG_TUP_UBL;
TupMsg2JoyitMsg[TUP_UBA] = PSG_MSG_TUP_UBA;
TupMsg2JoyitMsg[TUP_CCR] = PSG_MSG_TUP_CCR;
TupMsg2JoyitMsg[TUP_RSC] = PSG_MSG_TUP_RSC;
TupMsg2JoyitMsg[TUP_MGB] = PSG_MSG_TUP_MGB;
TupMsg2JoyitMsg[TUP_MBA] = PSG_MSG_TUP_MBA;
TupMsg2JoyitMsg[TUP_MGU] = PSG_MSG_TUP_MGU;
TupMsg2JoyitMsg[TUP_MUA] = PSG_MSG_TUP_MUA;
TupMsg2JoyitMsg[TUP_HGB] = PSG_MSG_TUP_HGB;
TupMsg2JoyitMsg[TUP_HBA] = PSG_MSG_TUP_HBA;
TupMsg2JoyitMsg[TUP_HGU] = PSG_MSG_TUP_HGU;
TupMsg2JoyitMsg[TUP_HUA] = PSG_MSG_TUP_HUA;
TupMsg2JoyitMsg[TUP_GRS] = PSG_MSG_TUP_GRS;
TupMsg2JoyitMsg[TUP_GRA] = PSG_MSG_TUP_GRA;
TupMsg2JoyitMsg[TUP_SGB] = PSG_MSG_TUP_SGB;
TupMsg2JoyitMsg[TUP_SBA] = PSG_MSG_TUP_SBA;
TupMsg2JoyitMsg[TUP_SGU] = PSG_MSG_TUP_SGU;
TupMsg2JoyitMsg[TUP_SUA] = PSG_MSG_TUP_SUA;
TupMsg2JoyitMsg[TUP_ACC] = PSG_MSG_TUP_ACC;
TupMsg2JoyitMsg[TUP_MPM] = PSG_MSG_TUP_MPM;
TupMsg2JoyitMsg[TUP_OPR] = PSG_MSG_TUP_OPR;
TupMsg2JoyitMsg[TUP_SLB] = PSG_MSG_TUP_SLB;
TupMsg2JoyitMsg[TUP_STB] = PSG_MSG_TUP_STB;
TupMsg2JoyitMsg[TUP_MAL] = PSG_MSG_TUP_MAL;
}
void CTupPdu::InitJoyitMsg( ) // Initialize JoyitMsg2TupMsg array.
{
memset(JoyitMsg2TupMsg, 0xff, MAX_MSG);
JoyitMsg2TupMsg[PSG_MSG_TUP_IAM-0x100] = TUP_IAM;
JoyitMsg2TupMsg[PSG_MSG_TUP_IAI-0x100] = TUP_IAI;
JoyitMsg2TupMsg[PSG_MSG_TUP_SAM-0x100] = TUP_SAM;
JoyitMsg2TupMsg[PSG_MSG_TUP_SAO-0x100] = TUP_SAO;
JoyitMsg2TupMsg[PSG_MSG_TUP_GSM-0x100] = TUP_GSM;
JoyitMsg2TupMsg[PSG_MSG_TUP_COT-0x100] = TUP_COT;
JoyitMsg2TupMsg[PSG_MSG_TUP_CCF-0x100] = TUP_CCF;
JoyitMsg2TupMsg[PSG_MSG_TUP_GRQ-0x100] = TUP_GRQ;
JoyitMsg2TupMsg[PSG_MSG_TUP_ACM-0x100] = TUP_ACM;
JoyitMsg2TupMsg[PSG_MSG_TUP_CHG-0x100] = TUP_CHG;
JoyitMsg2TupMsg[PSG_MSG_TUP_SEC-0x100] = TUP_SEC;
JoyitMsg2TupMsg[PSG_MSG_TUP_CGC-0x100] = TUP_CGC;
JoyitMsg2TupMsg[PSG_MSG_TUP_NNC-0x100] = TUP_NNC;
JoyitMsg2TupMsg[PSG_MSG_TUP_ADI-0x100] = TUP_ADI;
JoyitMsg2TupMsg[PSG_MSG_TUP_CFL-0x100] = TUP_CFL;
JoyitMsg2TupMsg[PSG_MSG_TUP_SSB-0x100] = TUP_SSB;
JoyitMsg2TupMsg[PSG_MSG_TUP_UNN-0x100] = TUP_UNN;
JoyitMsg2TupMsg[PSG_MSG_TUP_LOS-0x100] = TUP_LOS;
JoyitMsg2TupMsg[PSG_MSG_TUP_SST-0x100] = TUP_SST;
JoyitMsg2TupMsg[PSG_MSG_TUP_ACB-0x100] = TUP_ACB;
JoyitMsg2TupMsg[PSG_MSG_TUP_DPN-0x100] = TUP_DPN;
JoyitMsg2TupMsg[PSG_MSG_TUP_EUM-0x100] = TUP_EUM;
JoyitMsg2TupMsg[PSG_MSG_TUP_ANU-0x100] = TUP_ANU;
JoyitMsg2TupMsg[PSG_MSG_TUP_ANC-0x100] = TUP_ANC;
JoyitMsg2TupMsg[PSG_MSG_TUP_ANN-0x100] = TUP_ANN;
JoyitMsg2TupMsg[PSG_MSG_TUP_CBK-0x100] = TUP_CBK;
JoyitMsg2TupMsg[PSG_MSG_TUP_IAM-0x100] = TUP_IAM;
JoyitMsg2TupMsg[PSG_MSG_TUP_CLF-0x100] = TUP_CLF;
JoyitMsg2TupMsg[PSG_MSG_TUP_RAN-0x100] = TUP_RAN;
JoyitMsg2TupMsg[PSG_MSG_TUP_FOT-0x100] = TUP_FOT;
JoyitMsg2TupMsg[PSG_MSG_TUP_CCL-0x100] = TUP_CCL;
JoyitMsg2TupMsg[PSG_MSG_TUP_RLG-0x100] = TUP_RLG;
JoyitMsg2TupMsg[PSG_MSG_TUP_BLO-0x100] = TUP_BLO;
JoyitMsg2TupMsg[PSG_MSG_TUP_BLA-0x100] = TUP_BLA;
JoyitMsg2TupMsg[PSG_MSG_TUP_UBL-0x100] = TUP_UBL;
JoyitMsg2TupMsg[PSG_MSG_TUP_UBA-0x100] = TUP_UBA;
JoyitMsg2TupMsg[PSG_MSG_TUP_CCR-0x100] = TUP_CCR;
JoyitMsg2TupMsg[PSG_MSG_TUP_RSC-0x100] = TUP_RSC;
JoyitMsg2TupMsg[PSG_MSG_TUP_MGB-0x100] = TUP_MGB;
JoyitMsg2TupMsg[PSG_MSG_TUP_MBA-0x100] = TUP_MBA;
JoyitMsg2TupMsg[PSG_MSG_TUP_MGU-0x100] = TUP_MGU;
JoyitMsg2TupMsg[PSG_MSG_TUP_MUA-0x100] = TUP_MUA;
JoyitMsg2TupMsg[PSG_MSG_TUP_HGB-0x100] = TUP_HGB;
JoyitMsg2TupMsg[PSG_MSG_TUP_HBA-0x100] = TUP_HBA;
JoyitMsg2TupMsg[PSG_MSG_TUP_HGU-0x100] = TUP_HGU;
JoyitMsg2TupMsg[PSG_MSG_TUP_HUA-0x100] = TUP_HUA;
JoyitMsg2TupMsg[PSG_MSG_TUP_GRS-0x100] = TUP_GRS;
JoyitMsg2TupMsg[PSG_MSG_TUP_GRA-0x100] = TUP_GRA;
JoyitMsg2TupMsg[PSG_MSG_TUP_SGB-0x100] = TUP_SGB;
JoyitMsg2TupMsg[PSG_MSG_TUP_SBA-0x100] = TUP_SBA;
JoyitMsg2TupMsg[PSG_MSG_TUP_SGU-0x100] = TUP_SGU;
JoyitMsg2TupMsg[PSG_MSG_TUP_SUA-0x100] = TUP_SUA;
JoyitMsg2TupMsg[PSG_MSG_TUP_ACC-0x100] = TUP_ACC;
JoyitMsg2TupMsg[PSG_MSG_TUP_MPM-0x100] = TUP_MPM;
JoyitMsg2TupMsg[PSG_MSG_TUP_OPR-0x100] = TUP_OPR;
JoyitMsg2TupMsg[PSG_MSG_TUP_SLB-0x100] = TUP_SLB;
JoyitMsg2TupMsg[PSG_MSG_TUP_STB-0x100] = TUP_STB;
JoyitMsg2TupMsg[PSG_MSG_TUP_MAL-0x100] = TUP_MAL;
}
UINT16 CTupPdu::ToJoyitMsg(UINT8 id) // ISUP message type to TUP API message index.
{
return (id < MAX_MSG) ? TupMsg2JoyitMsg[id] : 0xFFFF;
}
uchar CTupPdu::ToTupMsg(UINT16 id) // ISUP API message index to TUP message type.
{
UINT8 msgindex = id - 0x100;
return (msgindex < MAX_MSG) ? JoyitMsg2TupMsg[msgindex] : 0xFF;
}
int CTupPdu::Unpacked(char * ptr, UINT16 len, UINT8 mod)
{
int r = 0;
switch (mod)
{
case MOD_JOYIT:
r = DecomposeJoyitApi(ptr, len);
break;
case MOD_TUP:
r = DecomposeTupPdu(ptr, len);
break;
default:
break;
} // End of switch(mod)
return r;
}
//===================================================================================
char * CTupPdu::OutPut(UINT16& len, UINT8 mod)
{
char * pPdu = NULL;
len = 0;
switch (mod)
{
case MOD_JOYIT:
case MOD_TUPAPI:
case MOD_ISUPAPI:
case MOD_Q931API:
pPdu = ComposeJoyitApi(len);
break;
case MOD_TUP:
pPdu = ComposeTupPdu(len);
break;
default:
break;
} // End of switch(mod)
return pPdu;
}
//==============================================================================
int CTupPdu::DecomposeTupPdu(char * ptr, UINT16 len)
{
int r = 0;
char *pPdu = ptr;
char tmpbuf[64];
memset(tmpbuf, 0, 64);
LengthOfHeader = (24 == GetSS7Pcf( )) ? sizeof(STupHead24bits) : sizeof(STupHead14bits);
if (len < LengthOfHeader)
{
// Exception.
r = -1; // Message data string too short.
}
else
{ // Begin to decompose pdu,Store the TUP message header.
memcpy(Header, pPdu, LengthOfHeader);
pPdu += LengthOfHeader;
uchar ieLen = 0, numLen = 0;
unsigned char msgtype = Header[LengthOfHeader-1];
SetMessageType(CTupPdu::ToJoyitMsg(msgtype));
if (0xFFFF == GetMessageType( ))
{
r = -2; // ISUP message type unrecognized.
}
else
{
// Get parameters.
switch (GetMessageType( ))
{
case PSG_MSG_TUP_IAM:
{
PutIE(PSG_IE_CLNPRTCTG, sizeof(STupCallingPartysCatetgory), pPdu);
pPdu += sizeof(STupCallingPartysCatetgory);
//---------------------------------------------------------------
// Need to get the address signal numbers here to server the
// function of unwrapcalledpartynumber().
//---------------------------------------------------------------
char * tmp = pPdu;
STupIaMessageIndicators tmpt;
memcpy(&tmpt, (void*)tmp, sizeof(STupIaMessageIndicators));
numLen = tmpt.noas;
tmpt.noas = 0;
//----------------------------------------------------------------
PutIE(PSG_IE_WMSGIND, sizeof(STupIaMessageIndicators), pPdu);
pPdu += sizeof(STupIaMessageIndicators);
//Unwrap Called address.
ieLen = UnwrapCalledPartyNumber((unsigned char *)pPdu, numLen, (unsigned char *)tmpbuf);
PutIE(PSG_IE_CLDPRTNUM, numLen, tmpbuf);
pPdu += ieLen;
}
break;
case PSG_MSG_TUP_IAI:
{
PutIE(PSG_IE_CLNPRTCTG, sizeof(STupCallingPartysCatetgory), pPdu);
pPdu += sizeof(STupCallingPartysCatetgory);
//---------------------------------------------------------------
// Need to get the address signal numbers here to server the
// function of unwrapcalledpartynumber.
//---------------------------------------------------------------
char * tmp = pPdu;
STupIaMessageIndicators tmpt; // = new SNatureOfConnection;
memcpy(&tmpt, (void*)tmp, sizeof(STupIaMessageIndicators));
numLen = tmpt.noas;
tmpt.noas = 0;
PutIE(PSG_IE_WMSGIND, sizeof(STupIaMessageIndicators), pPdu);
pPdu += sizeof(STupIaMessageIndicators);
//Unwrap Called address.
ieLen = UnwrapCalledPartyNumber((unsigned char *)pPdu, numLen, (unsigned char *)tmpbuf);
PutIE(PSG_IE_CLDPRTNUM, numLen, tmpbuf);
pPdu += ieLen;
//-------------------------------------------------------------------------
// In order to getting the optional IE flags in IAI message,as the judge of
// the packet of the optional IE.
//---------------------------------------------------------------
tmp = pPdu;
STupFirstIndicator pt; // = new STupMessageCompatibilityInformation;
memcpy((char *)&pt, (char *)tmp, sizeof(STupFirstIndicator));
unsigned char cllf = pt.cli; // Calling line identity indicator.
unsigned char orgf = pt.oca; // Original called address indicator.
//----------------------------------------------------------------------------
PutIE(PSG_IE_FSTIND, sizeof(STupFirstIndicator), pPdu);
pPdu += sizeof(STupFirstIndicator);
// block usregroup.UNUSED.
// append calling user information.UNUSED.
// append route .UNUSED.
// calling party numbers.
if (cllf)
{
char para[2];
// unsigned char flg = 0;
//Calling address Unwrap and get the address length.
memset(tmpbuf, 0, 64);
UnwrapCallingPartyNumber((unsigned char *)pPdu, (unsigned char*)¶, (unsigned char *)tmpbuf);
numLen = para[0];
ieLen = para[1];
PutIE(PSG_IE_CLNLINEID, numLen, tmpbuf);
pPdu += ieLen;
}
// Original called party numbers.
if (orgf)
{
char para[2];
// unsigned char flg = 1;
// Original Called address Unwrap.
memset(tmpbuf, 0, 64);
UnwrapOriginalCalledPartyNumber((unsigned char *)pPdu, (unsigned char*)¶,
(unsigned char *)tmpbuf);
numLen = para[0];
ieLen = para[1];
PutIE(PSG_IE_ORGCLDNUM, numLen, tmpbuf);
pPdu += ieLen;
}
}
break;
case PSG_MSG_TUP_SAM:
{
/*
char * tmp = pPdu;
STupSamAddressNumber tmpt; // = new SNatureOfConnection;
memcpy(&tmpt, (void*)tmp, sizeof (STupSamAddressNumber));
numLen = tmpt.num;
tmpt.num = 0;
PutIE(PSG_IE_ADDRCNT, sizeof(STupSamAddressNumber), pPdu);
pPdu += sizeof(STupSamAddressNumber);
*/
//Unwrap Called address.
tmpbuf[0] = *pPdu;
ieLen = UnwrapCalledPartyNumber((unsigned char *)pPdu+1, numLen, (unsigned char *)tmpbuf+1);
PutIE(PSG_IE_SUBNUM, numLen+1, tmpbuf);
pPdu += (ieLen+1);
}
break;
case PSG_MSG_TUP_SAO:
{
/*
char * tmp = pPdu;
STupSaoAddressNumber tmpt;
memcpy(&tmpt, (void*)tmp, sizeof (STupSaoAddressNumber));
tmpt.prs = 0;
*/
STupSubsequentNumber_H * snh = (STupSubsequentNumber_H *)tmpbuf;
snh->noas = 1;
snh->spare = 0;
tmpbuf[1] = ((STupSaoAddressNumber *)pPdu)->digit;
// PutIE(PSG_IE_ADDRSGN, sizeof(STupSaoAddressNumber), pPdu);
PutIE(PSG_IE_SUBNUM, 2, tmpbuf);
pPdu += sizeof(STupSaoAddressNumber);
}
break;
case PSG_MSG_TUP_GSM:
{
/////////////////////////////////////////////////////////////////////
// Keep the respone information flag_value.
unsigned char cll;
unsigned char cci;
// unsigned char swt; // Not used in CHINA TUP.
unsigned char ocl;
// char * tmp = pPdu;
STupResponseTypeIndicator tmpt;
memcpy(&tmpt, pPdu, sizeof (STupResponseTypeIndicator));
cll = tmpt.cpc; // Calling party category indicator.
cci = tmpt.cli; // Calling line identity indicator.
// swt = tmpt.swt; // Not used in CHINA TUP.
ocl = tmpt.oca; // Original called address indicator.
///////////////////////////////////////////////////////////////////////
PutIE(PSG_IE_RSPTYPEIND, sizeof(STupResponseTypeIndicator), pPdu);
pPdu += sizeof(STupResponseTypeIndicator);
if (cll)
{
PutIE(PSG_IE_CLNPRTCTG, sizeof(STupCallingPartysCatetgory), pPdu);
pPdu += sizeof(STupCallingPartysCatetgory);
}
if (cci)
{
char para[2];
// unsigned char flg = 0;
//Calling address Unwrap and get the address length.
UnwrapCallingPartyNumber((unsigned char *)pPdu,(unsigned char*)¶,
(unsigned char *)tmpbuf);
numLen = para[0];
ieLen = para[1];
PutIE(PSG_IE_CLNLINEID, numLen, tmpbuf); // In TUP use PSG_IE_CLNLINEID, and in ISUP use PSG_IE_CLNPRTNUM instead.
pPdu += ieLen;
}
/*
if (swt)
{
PutIE(PSG_IE_TRNNTWSLC, sizeof(STupSwitchingCallingSignalInformation), pPdu);
pPdu += sizeof(STupSwitchingCallingSignalInformation);
}
*/
if (ocl)
{
char para[2];
// unsigned char flg = 1;
// Original Called address Unwrap.
UnwrapOriginalCalledPartyNumber((unsigned char *)pPdu,
(unsigned char*)¶, (unsigned char *)tmpbuf);
numLen = para[0];
ieLen = para[1];
PutIE(PSG_IE_ORGCLDNUM, numLen, tmpbuf);
pPdu += ieLen;
}
}
break;
case PSG_MSG_TUP_COT:
case PSG_MSG_TUP_CCF:
break;
case PSG_MSG_TUP_GRQ:
{
PutIE(PSG_IE_REQTYPEIND, sizeof(STupRequestTypeIndicator), pPdu);
pPdu += sizeof(STupRequestTypeIndicator);
}
break;
case PSG_MSG_TUP_ACM:
{
PutIE(PSG_IE_WMSGIND, sizeof(STupAcmMessageIndicator), pPdu);
pPdu += sizeof(STupAcmMessageIndicator);
}
break;
case PSG_MSG_TUP_SEC:
case PSG_MSG_TUP_CGC:
case PSG_MSG_TUP_NNC:
case PSG_MSG_TUP_ADI:
case PSG_MSG_TUP_CFL:
case PSG_MSG_TUP_UNN:
case PSG_MSG_TUP_LOS:
case PSG_MSG_TUP_SST:
case PSG_MSG_TUP_ACB:
case PSG_MSG_TUP_DPN:
break;
case PSG_MSG_TUP_EUM: // Not used in CHINA TUP.
/*
{
PutIE(PSG_IE_USRSRVINF, sizeof(STupUserBusyIndicator), pPdu);
pPdu += sizeof(STupUserBusyIndicator);
PutIE(PSG_IE_SPC, sizeof(STupSignalPoitCode), pPdu);
pPdu += sizeof(STupSignalPoitCode);
}
*/
break;
case PSG_MSG_TUP_ANC:
case PSG_MSG_TUP_ANN:
case PSG_MSG_TUP_CBK:
case PSG_MSG_TUP_CLF:
case PSG_MSG_TUP_RAN:
case PSG_MSG_TUP_FOT:
case PSG_MSG_TUP_CCL:
break;
case PSG_MSG_TUP_RLG:
case PSG_MSG_TUP_BLO:
case PSG_MSG_TUP_BLA:
case PSG_MSG_TUP_UBL:
case PSG_MSG_TUP_UBA:
case PSG_MSG_TUP_CCR:
case PSG_MSG_TUP_RSC:
break;
case PSG_MSG_TUP_ACC: // Not used in CHINA TUP.
/*
{
PutIE(PSG_IE_BMSGIND, sizeof(STupMessageCongestionInformation), pPdu);
pPdu += sizeof(STupMessageCongestionInformation);
}
*/
break;
case PSG_MSG_TUP_MPM:
{
PutIE(PSG_IE_CRGINF, sizeof(STupChargeInformation), pPdu);
pPdu += sizeof(STupChargeInformation);
}
break;
case PSG_MSG_TUP_OPR:
break;
case PSG_MSG_TUP_SLB:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -