?? zcmma_sms_dec.cpp
字號:
void TForm1::cdmasmsDec(void* pInputMsg, SMSElementDef& output_sms)
{
//輸入pInputMsg是結(jié)構(gòu)為L3_SMSDef形式的消息
pDealMsg = (L3_SMSDef*)pInputMsg;
char burst_Type; //突發(fā)消息類型
char num_Datas; //突發(fā)消息包括char的數(shù)目
char smsmsg_Type;
/*SMS data相關(guān)域的定義*/
char paraID;
char paraLength;
char paraData[200];
char numChar_DataField = 0; //作為判斷是否char域結(jié)束的標(biāo)志
int i; //當(dāng)前字節(jié)位置
burst_Type = pDealMsg->smsHeader.burst_Type;
/*如果消息類型不是SMS,則丟棄消息,并退出*/
if((burst_Type!=SHORT_MESSAGE_SERVICES)
&&(pDealMsg->smsHeader.msg_number != 1)
&&(pDealMsg->smsHeader.num_msgs != 1)
&&(pDealMsg->smsHeader.num_fields <= 0))
{
ShowMessage("DBM 包不正確!");
delete pInputMsg;
return;
}
//有效char數(shù)目
num_Datas = pDealMsg->smsHeader.num_Fields;
smsmsg_Type = pDealMsg->l3_data[0];
numChar_DataField = 1; //SMS類型占1 byte
/*判斷SMS消息類型,若不是點(diǎn)到點(diǎn)的SMS,則丟棄消息,并退出*/
if(smsmsg_Type!=SMS_POINT_TO_POINT)
{
ShowMessage("不是點(diǎn)到點(diǎn)的SMS");
delete pInputMsg;
return;
}
while(numChar_DataField<num_Datas)
{
paraID = pDealMsg->l3_data[numChar_DataField];
numChar_DataField++;
paraLength = pDealMsg->l3_data[numChar_DataField];
numChar_DataField++;
//源/目地址參數(shù)的分析 //54頁
if((paraID == Originating_Address)||(paraID == Destination_Address))
{
CDMASMSAddrDec(pDealMsg,numChar_DataField,paraLength,output_sms);
}
if(paraID == Bearer_Data) //61頁
{
CDMASMSBearDataDec(pDealMsg,numChar_DataField,paraLength,output_sms);
}
//更新 numChar_DataField 參數(shù)
numChar_DataField = numChar_DataField+paraLength;
}
SMSDisplay(output_sms);
delete pInputMsg;
ShowMessage("SMS分析結(jié)束,退出");
return;
}
//---------------------------------------------------------------------------
/*********************************************************
函數(shù)說明:
輸入?yún)?shù):pMsg:層三DBM消息
charAddr :BearData起始位置對應(yīng)l3_data[]的下標(biāo)(參數(shù)開始位置,不包括ID和長度)
length:參數(shù)長度
輸出參數(shù):output_sms結(jié)構(gòu)
功能:解析出SMS
*********************************************************/
void TForm1::CDMASMSBearDataDec(L3_SMSDef* pMsg,int charAddr,int length,SMSElementDef& out_sms)
{
int i;
char subParaID;
char subParaLength;
char currCharAddr = charAddr; //當(dāng)前處理字節(jié)位置
while((currCharAddr-charAddr)<length)
{
subParaID = pMsg->l3_data[currCharAddr];
currCharAddr++;
subParaLength = pMsg->l3_data[currCharAddr];
currCharAddr++;
/*消息類型字段的處理*/
if(subParaID == MESSAGE_IDENTIFIER)
{
MsgID_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*用戶數(shù)據(jù)字段的處理*/
if(subParaID == USER_DATA)
{
UserData_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*用戶反應(yīng)碼字段的處理*/
if(subParaID == USER_RESPONSE_CODE)
{
User_RC_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*消息類型字段的處理*/
if(subParaID == MESSAGE_IDENTIFIER)
{
MsgID_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*時間字段的處理*/
if(subParaID == MESSAGE_CENTER_TIME_STAMP)
{
Timer_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*回叫號碼的處理*/
if(subParaID == CALLBACK_NUMBER)
{
CallbackNumber_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
currCharAddr = currCharAddr+ subParaLength;
}
}
//---------------------------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -