mt2503如何拦截短消息
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
对某些特定的短信,如特定号码,特定内容等进行拦截后删除
[SOLUTION]
SMS部分分为了UI和service两个部分,在service部分拦截就OK。sms的架构图如下:
从上图中可以看到service部分中包含了Reciever,这部分就是用来处理接收短信的所有的流程的。
当收到一条短信后会首先进入函数srv_sms_new_sms_ind,最后会进入函数srv_sms_handle_new_msg进行处理,在该函数中会针对不同类型的sms进行
处理,保存sms也是在这个函数里处理的。所以拦截短信只要在这个函数里进行拦截就OK了。
srv_sms_handle_new_msg会调用smslib_decode_pdu和smslib_get_msg_content解析msg,解析完成后信息存储在app_lib_data中,然后使用需要的条
件来判断拦截短信就OK了。
结构体介绍如下:(可以使用这些值设定条件做判断)
smslib_general_struct*app_lib_data
typedefstruct
{
smslib_SIM_status_enumstatus;
l4_addr_bcd_structsca;
smslib_tpdu_decode_structtpdu;
kal_uint8pdu_len;/*lengthofPDU*/
kal_uint8tpdu_len;/*lengthofTPDU*/
l4c_number_structforMMI_SCAAddr;
l4c_number_structforMMI_TPAddr;
kal_uint16forMMI_UserData_length;/*unitctet*/
kal_uint8forMMI_UserData[170];
}smslib_general_struct;
typedefstruct
{
union
{
smslib_deliver_peer_structdeliver_tpdu;
smslib_submit_peer_structsubmit_tpdu;
smslib_status_report_peer_structreport_tpdu;
}data;
smslib_mti_enummti;
//
kal_uint8fo;/*firstoctet*/
kal_uint8offset;/*offsettomessagecontent*/
/*initaddressofUserDataHeader*/
kal_uint8msg_len;/*lengthofuserdata*/
/*UserDataHeader+UserData*/
kal_uint8udhl;/*forcalculatingoffsettounpack*/
/*udhl+udh*/
smslib_concat_structconcat_info;
/*fordecodingDCS*/
smslib_msg_class_enuMMSg_class;
smslib_alphabet_enumalphabet_type;
kal_uint8is_compress;
smslib_msg_waiting_structmsg_wait;
/*UserDataHeader*/
smslib_port_structport;
}smslib_tpdu_decode_struct;
typedefstruct
{
kal_uint8reply_flag;/*whetherreplyissought*/
kal_uint8udh_p;/*indicatespresenceof
userdataheader*/
kal_uint8status_rep_flag;/*whetherstatusreports
aresought*/
kal_uint8fill_bits;/*tobeignored*/
kal_uint8mms;/*moremessagetosend*/
kal_uint8msg_type;/*smsdeliver*/
kal_uint8no_orig_addr;
kal_uint8orig_addr_size;/*themaxsizeof*orig_addrinoctet*/
kal_uint8*orig_addr;/*assumedtobe
byte-packed*/
kal_uint8pid;/*tobebit-wisedecoded*/
kal_uint8dcs;/*tobebit-wisedecoded*/
kal_uint8scts[7];
kal_uint8user_data_len;
kal_uint8no_user_data;/*7-bittooctet*/
kal_uint8user_data_size;/*themaxsizeof*user_datainoctet*/
kal_uint8*user_data;/*canhaveuserdataheaderalso*/
}smslib_deliver_peer_struct;
typedefstruct
{
kal_uint8type_of_info;
kal_boolneed_store;
kal_boolis_msg_wait;
kal_boolis_show_num[SMSLIB_NUM_OF_MSG_WAITING_TYPE];
kal_boolis_clear[SMSLIB_NUM_OF_MSG_WAITING_TYPE];
kal_boolind_flag[SMSLIB_NUM_OF_MSG_WAITING_TYPE];
smslib_mwis_structmwis;
kal_uint8msp;
#ifdef__SMS_R6_ENHANCED_VOICE_MAIL__
smsal_evmi_structevmi;//shouldfreethisafterprocessing
#endif
}smslib_msg_waiting_struct;//waitingmessageind相关
typedefstruct
{
kal_int32dest_port;/*-1:invalidport*/
kal_int32src_port;
}smslib_port_struct;//=smsal_port_struct
对某些特定的短信,如特定号码,特定内容等进行拦截后删除
[SOLUTION]
SMS部分分为了UI和service两个部分,在service部分拦截就OK。sms的架构图如下:
从上图中可以看到service部分中包含了Reciever,这部分就是用来处理接收短信的所有的流程的。
当收到一条短信后会首先进入函数srv_sms_new_sms_ind,最后会进入函数srv_sms_handle_new_msg进行处理,在该函数中会针对不同类型的sms进行
处理,保存sms也是在这个函数里处理的。所以拦截短信只要在这个函数里进行拦截就OK了。
srv_sms_handle_new_msg会调用smslib_decode_pdu和smslib_get_msg_content解析msg,解析完成后信息存储在app_lib_data中,然后使用需要的条
件来判断拦截短信就OK了。
结构体介绍如下:(可以使用这些值设定条件做判断)
smslib_general_struct*app_lib_data
typedefstruct
{
smslib_SIM_status_enumstatus;
l4_addr_bcd_structsca;
smslib_tpdu_decode_structtpdu;
kal_uint8pdu_len;/*lengthofPDU*/
kal_uint8tpdu_len;/*lengthofTPDU*/
l4c_number_structforMMI_SCAAddr;
l4c_number_structforMMI_TPAddr;
kal_uint16forMMI_UserData_length;/*unitctet*/
kal_uint8forMMI_UserData[170];
}smslib_general_struct;
typedefstruct
{
union
{
smslib_deliver_peer_structdeliver_tpdu;
smslib_submit_peer_structsubmit_tpdu;
smslib_status_report_peer_structreport_tpdu;
}data;
smslib_mti_enummti;
//
kal_uint8fo;/*firstoctet*/
kal_uint8offset;/*offsettomessagecontent*/
/*initaddressofUserDataHeader*/
kal_uint8msg_len;/*lengthofuserdata*/
/*UserDataHeader+UserData*/
kal_uint8udhl;/*forcalculatingoffsettounpack*/
/*udhl+udh*/
smslib_concat_structconcat_info;
/*fordecodingDCS*/
smslib_msg_class_enuMMSg_class;
smslib_alphabet_enumalphabet_type;
kal_uint8is_compress;
smslib_msg_waiting_structmsg_wait;
/*UserDataHeader*/
smslib_port_structport;
}smslib_tpdu_decode_struct;
typedefstruct
{
kal_uint8reply_flag;/*whetherreplyissought*/
kal_uint8udh_p;/*indicatespresenceof
userdataheader*/
kal_uint8status_rep_flag;/*whetherstatusreports
aresought*/
kal_uint8fill_bits;/*tobeignored*/
kal_uint8mms;/*moremessagetosend*/
kal_uint8msg_type;/*smsdeliver*/
kal_uint8no_orig_addr;
kal_uint8orig_addr_size;/*themaxsizeof*orig_addrinoctet*/
kal_uint8*orig_addr;/*assumedtobe
byte-packed*/
kal_uint8pid;/*tobebit-wisedecoded*/
kal_uint8dcs;/*tobebit-wisedecoded*/
kal_uint8scts[7];
kal_uint8user_data_len;
kal_uint8no_user_data;/*7-bittooctet*/
kal_uint8user_data_size;/*themaxsizeof*user_datainoctet*/
kal_uint8*user_data;/*canhaveuserdataheaderalso*/
}smslib_deliver_peer_struct;
typedefstruct
{
kal_uint8type_of_info;
kal_boolneed_store;
kal_boolis_msg_wait;
kal_boolis_show_num[SMSLIB_NUM_OF_MSG_WAITING_TYPE];
kal_boolis_clear[SMSLIB_NUM_OF_MSG_WAITING_TYPE];
kal_boolind_flag[SMSLIB_NUM_OF_MSG_WAITING_TYPE];
smslib_mwis_structmwis;
kal_uint8msp;
#ifdef__SMS_R6_ENHANCED_VOICE_MAIL__
smsal_evmi_structevmi;//shouldfreethisafterprocessing
#endif
}smslib_msg_waiting_struct;//waitingmessageind相关
typedefstruct
{
kal_int32dest_port;/*-1:invalidport*/
kal_int32src_port;
}smslib_port_struct;//=smsal_port_struct