mt2503接收到Voicemail的时候会同时收到一条发送人为”_@”的短信
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
接收到Voicemail的时候会同时收到一条发送人为”_@”的短信
[SOLUTION]
因为该条Voicemail是通过CPHS规范定义的。CPHS主要是使用TP_OA(发送人地址)来定义信息是Watingmessageindication。如果该信息中含有用户
数据,则我司的处理方法就是将该信息以短信的方式存储。因为CPHS对TP_OA有特殊定义,因此收到的普通短信的地址为_@(详细介绍见CPHS节选)
如果需要更改该方案,贵司可以参考的修改有下述三种;
1)将发送人改成”Voicemail”字符串,因此看到信息,发送人显示为Voicemail。参考如下:
U16srv_SMS_add_msg_node(srv_sms_msg_node_struct*msg_node)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
U16unused_msg_id;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
MMI_TRACE(MMI_COMMON_TRC_G6_MSG,TRC_SRV_SMS_ADD_MSG_NODE);
unused_msg_id=srv_sms_get_unused_msg_id();
if(unused_msg_id!=SRV_SMS_INVALID_MSG_ID)
{
chARMaskset[]={0x5f,0x40,'\0'};//add
charmaskclear[]={0x10,0x40,'\0'};//add
meMCPy(&srv_sms_msg_list[unused_msg_id],msg_node,sizeof(srv_sms_msg_node_struct));
if(strcmp(srv_sms_msg_list[unused_msg_id].number,maskset)==0||strcmp(srv_sms_msg_list[unused_msg_id].number,maskclear)==0)//add
{
mEMSet(srv_sms_msg_list[unused_msg_id].number,0,SRV_SMS_MAX_ADDR_LEN);
strcpy(srv_sms_msg_list[unused_msg_id].number,"VoiceMail");//add
}
MMI_TRACE(MMI_COMMON_TRC_G6_MSG,TRC_SRV_SMS_ADD_MSG_NODE_1,storage_cntx.total_msg_num);
storage_cntx.total_msg_num++;
………………………………………
}
2)从MMI不存储该Waittingmessage携带的文本信息;
staticvoidsrv_sms_handle_new_msg(srv_sms_SIM_enumsim_id,mmi_sms_new_msg_pdu_ind_struct*data)
{
smslib_decode_pdu(data->pdu,(kal_uint8)data->pdu_length,app_lib_data);
smslib_get_msg_content(KAL_FALSE,app_lib_data,NULL);
if((app_lib_data->tpdu.msg_wait.is_msg_wait)||
app_lib_data->tpdu.data.deliver_tpdu.pid==SRV_SMS_PID_TYPE_0)
//去掉对app_lib_data->tpdu.msg_wait.need_store的判断即可
{
srv_sms_send_sms_ack(
MMI_TRUE,
SRV_SMS_FCS_NO_ERR,
sim_id,
SRV_SMS_INVALID_PDU_ID,
(U8)app_lib_data->tpdu.msg_class,
MMI_TRUE,
MMI_FALSE);
smslib_dealloc_sms_struct(app_lib_data);
OslMfree(app_lib_data);
return;
}
……………………..
}
3)从L4设定不存储Waittingmessage携带的文本信息。
需向我司申请Patch。
CPHS节选
CPHS主要是使用TP_OA(发送人地址)来定义信息是Watingmessageindication。
其要求
TheoriginatinGSMEaddressfieldshallbecodedasfollows:
Octet1Address-Length(codedinbinary)
constantvalue00000100(note1)
Octet2Type-of-Address
bit8alwayssetto11
bits7..5typeofnumber:101(alphanumeric)
bits4..1numberingplanid:0000
Octets3-4AddressValue(note2)
Character1
bit1set/clearindicator
0clear10
1set11
bits4..2typeofindicator
000voicemessagewaitingindicator
bits7..5
001constantvalue
Character2
bit1indicatoridentifier
0indicator100
1indicator2
bits7..2
00antvalue
接收到Voicemail的时候会同时收到一条发送人为”_@”的短信
[SOLUTION]
因为该条Voicemail是通过CPHS规范定义的。CPHS主要是使用TP_OA(发送人地址)来定义信息是Watingmessageindication。如果该信息中含有用户
数据,则我司的处理方法就是将该信息以短信的方式存储。因为CPHS对TP_OA有特殊定义,因此收到的普通短信的地址为_@(详细介绍见CPHS节选)
如果需要更改该方案,贵司可以参考的修改有下述三种;
1)将发送人改成”Voicemail”字符串,因此看到信息,发送人显示为Voicemail。参考如下:
U16srv_SMS_add_msg_node(srv_sms_msg_node_struct*msg_node)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
U16unused_msg_id;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
MMI_TRACE(MMI_COMMON_TRC_G6_MSG,TRC_SRV_SMS_ADD_MSG_NODE);
unused_msg_id=srv_sms_get_unused_msg_id();
if(unused_msg_id!=SRV_SMS_INVALID_MSG_ID)
{
chARMaskset[]={0x5f,0x40,'\0'};//add
charmaskclear[]={0x10,0x40,'\0'};//add
meMCPy(&srv_sms_msg_list[unused_msg_id],msg_node,sizeof(srv_sms_msg_node_struct));
if(strcmp(srv_sms_msg_list[unused_msg_id].number,maskset)==0||strcmp(srv_sms_msg_list[unused_msg_id].number,maskclear)==0)//add
{
mEMSet(srv_sms_msg_list[unused_msg_id].number,0,SRV_SMS_MAX_ADDR_LEN);
strcpy(srv_sms_msg_list[unused_msg_id].number,"VoiceMail");//add
}
MMI_TRACE(MMI_COMMON_TRC_G6_MSG,TRC_SRV_SMS_ADD_MSG_NODE_1,storage_cntx.total_msg_num);
storage_cntx.total_msg_num++;
………………………………………
}
2)从MMI不存储该Waittingmessage携带的文本信息;
staticvoidsrv_sms_handle_new_msg(srv_sms_SIM_enumsim_id,mmi_sms_new_msg_pdu_ind_struct*data)
{
smslib_decode_pdu(data->pdu,(kal_uint8)data->pdu_length,app_lib_data);
smslib_get_msg_content(KAL_FALSE,app_lib_data,NULL);
if((app_lib_data->tpdu.msg_wait.is_msg_wait)||
app_lib_data->tpdu.data.deliver_tpdu.pid==SRV_SMS_PID_TYPE_0)
//去掉对app_lib_data->tpdu.msg_wait.need_store的判断即可
{
srv_sms_send_sms_ack(
MMI_TRUE,
SRV_SMS_FCS_NO_ERR,
sim_id,
SRV_SMS_INVALID_PDU_ID,
(U8)app_lib_data->tpdu.msg_class,
MMI_TRUE,
MMI_FALSE);
smslib_dealloc_sms_struct(app_lib_data);
OslMfree(app_lib_data);
return;
}
……………………..
}
3)从L4设定不存储Waittingmessage携带的文本信息。
需向我司申请Patch。
CPHS节选
CPHS主要是使用TP_OA(发送人地址)来定义信息是Watingmessageindication。
其要求
TheoriginatinGSMEaddressfieldshallbecodedasfollows:
Octet1Address-Length(codedinbinary)
constantvalue00000100(note1)
Octet2Type-of-Address
bit8alwayssetto11
bits7..5typeofnumber:101(alphanumeric)
bits4..1numberingplanid:0000
Octets3-4AddressValue(note2)
Character1
bit1set/clearindicator
0clear10
1set11
bits4..2typeofindicator
000voicemessagewaitingindicator
bits7..5
001constantvalue
Character2
bit1indicatoridentifier
0indicator100
1indicator2
bits7..2
00antvalue