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

📄 zcmma_sms_dec.cpp

📁 针对CDMA2000层3信令的SMS的unicode ,解析出文本格式的SMS的源码,在c++builder环境下开发
💻 CPP
字号:
void  TForm1::cdmasmsDec(void* pInputMsg, SMSElementDef& output_sms)
{
	//输入pInputMsg是结构为L3_SMSDef形式的消息
	pDealMsg = (L3_SMSDef*)pInputMsg;
	char burst_Type;  //突发消息类型
	char num_Datas;   //突发消息包括char的数目
	char smsmsg_Type;
	/*SMS data相关域的定义*/
	char paraID;
	char paraLength;
	char paraData[200];
	char numChar_DataField = 0;  //作为判断是否char域结束的标志
        int i;  //当前字节位置

	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数目
	num_Datas = pDealMsg->smsHeader.num_Fields;
	smsmsg_Type = pDealMsg->l3_data[0];
	numChar_DataField = 1;  //SMS类型占1 byte

	/*判断SMS消息类型,若不是点到点的SMS,则丢弃消息,并退出*/
	if(smsmsg_Type!=SMS_POINT_TO_POINT)
	{
		ShowMessage("不是点到点的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++;

                //源/目地址参数的分析   //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 参数
                numChar_DataField = numChar_DataField+paraLength;
        }


        SMSDisplay(output_sms);
        delete   pInputMsg;
        ShowMessage("SMS分析结束,退出");
        return;
}







//---------------------------------------------------------------------------
/*********************************************************
函数说明:
      输入参数:pMsg:层三DBM消息
                charAddr :BearData起始位置对应l3_data[]的下标(参数开始位置,不包括ID和长度)
                length:参数长度
      输出参数:output_sms结构
      功能:解析出SMS
*********************************************************/
void  TForm1::CDMASMSBearDataDec(L3_SMSDef* pMsg,int charAddr,int length,SMSElementDef& out_sms)
{
        int i;
        char  subParaID;
        char  subParaLength;
        char  currCharAddr = charAddr;  //当前处理字节位置

        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);
		  }

                /*用户数据字段的处理*/
                if(subParaID == USER_DATA)
                {
                        UserData_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
                }
                /*用户反应码字段的处理*/
		  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;
        }
}

//---------------------------------------------------------------------------

⌨️ 快捷键说明

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