高通平台 MMS 调试简介

1 发送/接收彩信的步骤

1.1 发送彩信

  1. 应用程序触发彩信发送
  2. 建立MMS PDN
  3. 由应用程序发送 htttp请求(POST)
  4. 彩信传输已完成,并通知应用程序
  5. MMS PDN发布

1.2 接受彩信

  1. 通过传入的短信通知,接收 MMS 
  2. 应用程序触发接收彩信
  3. 建立MMS PDN
  4. 由应用程序发送 htttp请求(POST)
  5. 彩信传输已完成,并通知应用程序
  6. MMS PDN发布。

2 MMS 调试步骤

2.1 MMS APN启动

        检查是否有MMS APN的网络请求,然后显示MMS APN。举例说明

//MMS 启动网络请求
6476 DMmsService:[SendRequest@8f0ce1f] MmsNetworkManager:start newnetwork request

//请求彩信网络
DConnectivityService:requestNetwork for uid/pid:1001/2307 NetworkRequest [ REQUEST id=39, [ Transports:CELLULARCapabilities:MMS&NOT_RESTRICTED&TRUSTED&NOT_VPN Specifier:<3>] ]

//尝试设置MMS apn
D/QtiGsmDCT( 3911):[1]trySetupDatafor type:mms dueto dataEnabled, mIsPsRestricted=false

//MMS APN信息
D/QtiGsmDCT( 2894):[1]trySetupData:CreatefrommAllApnSettings :[[ApnSettingV3] 中国联通 3G 网络, 1197, 46001, 3gnet, , , , , , -1, default | supl| net,IP, IP, true, 0, 0, 0, false, 0, 0, 0, 0, , , false][[ApnSettingV3] 中国联通 WAP 网络, 1198, 46001, 3gwap, 10.0.0.172, , , , 80, -1, *, IP, IP, true, 0, 0, 0, false, 0,0, 0, 0, , , false][[ApnSettingV3] 中国联通 3G 彩信, 1199, 46001, 3gwap, , http://mmsc.myuni.com.cn, 10.0.0.172, 80, , -1, mms, IP, IP, true, 0, 0, 0, false, 0,0, 0, 0, , , false]

//设置数据呼叫请求
Line 9611: 01-11 19:52:37.069 D/RILJ ( 3911):[4590]>SETUP_DATA_CALL,radioTechnology=0,isRoaming=false,allowRoaming=true,DataProfile=0/3gwap/IP/0///0/0/0/0/true/3/IP/0/0///false[SUB1]

//设置数据呼叫成功响应
Line 10133: 01-11 19:52:46.983 D/RILJ ( 3911):[4590]< SETUP_DATA_CALLDataCallResponse: { status=0 retry=-1 cid=0 active=2 type=IP ifname=rmnet_data3 mtu=1500 addresses=[10.97.84.104/28] dnses=[112.65.184.255,211.95.1.97] gateways=[10.97.84.105] pcscf=[]} [SUB1]

注意:如果默认APN也包括MMS,即APN类型为默认MMS,并且默认APN已连接,则不会建立MMS数据呼叫再一次

2.2 使用MMS服务器进行数据传输

        一旦MMS APN成功启动,数据流量需要与MMS服务器进行检查。可以在AP侧TCP dump或QXDM日志中检查该名称。

        源地址:在MMS APN的设置数据呼叫响应中从网络接收(即10.97.84.04–请参阅第2.1节中的日志片段)

        目标地址:MMSC IP地址,端口-在MMS APN信息中定义(即10.0.0.172,80)

//MMS APN信息
D/QtiGsmDCT( 2894):[1]trySetupData:CreatefrommAllApnSettings :[[ApnSettingV3] 中国联通 3G 网络, 1197, 46001, 3gnet, , , , , , -1, default | supl| net,IP, IP, true, 0, 0, 0, false, 0, 0, 0, 0, , , false][[ApnSettingV3] 中国联通 WAP 网络, 1198, 46001, 3gwap, 10.0.0.172, , , , 80, -1, *, IP, IP, true, 0, 0, 0, false, 0,0, 0, 0, , , false][[ApnSettingV3] 中国联通 3G 彩信, 1199, 46001, 3gwap, , http://mmsc.myuni.com.cn, 10.0.0.172, 80, , -1, mms, IP, IP, true, 0, 0, 0, false, 0,0, 0, 0, , , false]

 ..彩信PDN已设置,彩信应用程序正在尝试发送彩信

//MMS APN相关信息
6476 DMmsService:[SendRequest@8f0ce1f] APN nameisairtelmms.com
6476 I MmsService:[SendRequest@8f0ce1f] LoadingAPN using nameairtelmms.com
6476 I MmsService:[SendRequest@8f0ce1f] UsingAPN [type=mms mmsc=http://100.1.201.171:10021/mmsc mmsproxy=100.1.201.172 mmsport=8799 name=AirtelMMS apn=airtelmms.combearer_bitmask=0 protocol=IP roaming_protocol=IP authtype=-1]

//HTTP请求
6476 DMmsService:[SendRequest@8f0ce1f] HTTP:POST http://100.1.201.171[31], proxy=100.1.201.172:8799, PDUsize=142753
6476 I MmsService:[SendRequest@8f0ce1f] HTTP:IPv4 provisioned
6476 I MmsService:[SendRequest@8f0ce1f] HTTP:User-Agent=Android-Mms/2.0
6476 I MmsService:[SendRequest@8f0ce1f] HTTP:UaProfUrl=http://www.google.com/oha/rdf/ua-profile-kila.xml

  ..可通过TCP dump分析http请求中的MMS数据。tcp dump中的数据单独分析

//MMS传输完成
6476 DMmsService:[SendRequest@8f0ce1f] HTTP: 200 OK
6476 DMmsService:[SendRequest@8f0ce1f] HTTP:responsesize=67

  .. MMS应用程序发布请求

//释放请求
6476 DMmsService:[SendRequest@8f0ce1f] MmsNetworkManager:release,count=0
1641 DConnectivityService:releasingNetworkRequest [ REQUEST id=17, [ Transports:CELLULARCapabilities:MMS&NOT_RESTRICTED&TRUSTED&NOT_VPN Specifier:<19>] ] (CALLBACK_RELEASED)

        TCP  dump数据分析

//与MMS服务器的TCP对话
"10.97.84.104",37355,"10.0.0.172",80,35,23537,21,22347,14,1190,55.312927000000002,2.0178539999999998,88597.093744146012,4717.8834544025485
检查与MMS服务器的InitialTCP 3向握手。成功后,检查MMS发送请求和MMS发送确认消息。

//带MMS服务器的TCP流

//来自设备的SYN
10.97.84.104 10.0.0.172 TCP 76 37355 → 80 [SYN] Seq=0 Win=42340 Len=0 MSS=1460 SACK_PERM=1 TSval=59284 TSecr=0
WS=256

//来自MMS服务器的SYN、ACK
10.0.0.172 10.97.84.104 TCP 80 80 → 37355 [SYN, ACK] Seq=0 Ack=1 Win=4182 Len=0 MSS=1394 WS=1 TSval=3843072654
TSecr=59284 SACK_PERM=1

//来自设备的ACK
10.97.84.104 10.0.0.172 TCP 68 37355 → 80 [ACK] Seq=1 Ack=1 Win=42496 Len=0 TSval=59375 TSecr=3843072654

//彩信发送请求
10.97.84.104 10.0.0.172 MMSE/SMIL 867 MMS m-send-req (JPEGJFIF image) (text/plain)

//MMS发送配置
10.0.0.172 10.97.84.104 MMSE 270 MMS m-send-conf

注意:有时在TCP dump中找不到MMS发送请求和MMS发送确认消息,因为设备和MMS服务器之间的MMS流量已被加密。在这种情况下,请确保已交换TCP“FIN”以确认传输已完成

//通过TCP传输彩信
10.0.0.172 10.97.84.104 HTTP HTTP/1.1 200 OK [Packetsizelimited during capture]
10.0.0.172 10.97.84.104 TCP 9401 → 40611 [FIN, ACK] Seq=383 Ack=9004 Win=13227 Len=0 TSval=3181671942 TSecr=24286
10.97.84.104 10.0.0.172 TCP 40611 → 9401 [FIN, ACK] Seq=9004 Ack=384 Win=65535 Len=0 TSval=24308 TSecr=3181671942

  ..通过TCP MMS应用程序进行的MMS传输收到MMS传输完成的指示

2.3 MMS失败:网络相关问题

        有时MMS服务器没有回复,或者网络中可能存在其他问题,设备和MMS服务器之间的数据连接没有建立。如果发生Connection Timed路由错误。

11:32:27.485 D/MmsService( 3618):[SendRequest@3fc839a] APN nameis mms
11:32:27.485 I/MmsService( 3618):[SendRequest@3fc839a] LoadingAPN using name mms
11:32:27.494 I/MmsService( 3618):[SendRequest@3fc839a] UsingAPN [type=mms mmsc=http://217.31.233.18:6001/MM1Servletmmsproxy=217.31.233.18 mmsport=9401 name=Vodafone MMS apn=mms bearer_bitmask=0 protocol=IP roaming_protocol=IP authtype=-1 user=vodafone password=vodafone]

11:32:27.498 D/MmsService( 3618):[SendRequest@3fc839a] HTTP:POST http://217.31.233.18[36], proxy=217.31.233.18:9401, PDUsize=8610
11:32:27.499 I/MmsService( 3618):[SendRequest@3fc839a] HTTP:IPv4 provisioned
11:32:27.499 I/MmsService( 3618):[SendRequest@3fc839a] HTTP:User-Agent=Android-Mms/2.0
11:32:27.499 I/MmsService( 3618):[SendRequest@3fc839a] HTTP:UaProfUrl=http://www.google.com/oha/rdf/ua-profile-kila.xml

//约30秒后出现连接超时错误
11:32:58.593 E/MmsService( 3618):[SendRequest@3fc839a] HTTP:IO failure
11:32:58.593 E/MmsService( 3618):java.net.ConnectException:Connection timed out
10.0.0.172 10.97.84.104 HTTP HTTP/1.1 408 Request Time-out (text/html)

2.4 通过WiFi发送彩信( MMS over WiFi)

        为了让MM在wifi中工作,操作员mcc mnc应启用“support_send_Mms_over_wifi”。这是QC添加的配置,此配置适用于MMS应用程序。根据OEM需求为相应的MCC和MNC配置配置的路径

        谷歌代码路径:/packages/apps/CarrierConfig/assets/carrier_config_MCCMNC.xml

        供应商代码路径:/vendor/qcom/proprietary/resource-overlay/common/CarrierConfig/res/xml/vendor.xml

  1. 应该有一个有效的mms APN,配置了mmsc url、mms代理和端口。
  2. 运营商应支持IWLAN。
  3. MMS PDN在modemDS级别上通过iwlan引入检查点。
  4. 错误:PS_NET_DOWN_RESON_UPREFERRED_RAT
  5. 如果WLAN不是MMS配置文件的首选项,则此错误将在呼叫启动阶段恢复。

    日志片段:

//具有profileid 3和APN的AP MMS呼叫
MSG[05000/01] Data Services/Medium15:35:08.327 ds_qmi_fw_common.c 00970 Handling (qmi_svc_hdlr_ftype) qmi_wdsi_start_network_interface
MSG[05022/01] DS ACL Policy/Medium15:35:08.329 ps_route.c 00310 3GPP APN Len 3, 3GPP APN mms
MSG[05000/02] Data Services/High 15:35:08.342 ds_iwlan_s2b_rt_acl.c 00489 ds_iwlan_s2b_rt_acl_is_cfg_supported. WLAN not preffor profile 7.Return FALSE.
// 0x200d6=PS_NET_DOWN_REASON_UNPREFERRED_RAT and ACL_DENY_REASON_UNPREFERRED_RAT =106
MSG [05000/03] Data Services/Error 15:35:08.350 ps_route.c 01616 ps_route_network_selection_by_policy():Routing failed net_down_reason:0x200d6 acl_deny_reason:-106

//检查点:请检查dsfconfig文件并相应地更改MMS APN的prefRAT,如下所示
andsf.xml file
<Node>
  <APN>MMS</APN>
  <RoutingRule>
    <Node>
      <AccessTechnology>3</AccessTechnology> -->Ilwan is the 1st priority.
      <AccessNetworkPriority>1</AccessNetworkPriority>
    </Node>
    <Node>
      <AccessTechnology>1</AccessTechnology>
      <AccessNetworkPriority>2</AccessNetworkPriority>
    </Node>
  </RoutingRule>
  <IsAPIOverride>0</IsAPIOverride>
  <RulePriority>1</RulePriority>

注意:对于所有其他原因代码故障,请参阅文档80-P8754-84,因为通过wifi和vowifi发送MMS会导致代码不稳定。

3 已知问题及其解决方案

3.1 在 Android N 中,用户在发送彩信后手机数据关闭

【背景】

        当移动数据关闭时,应可发送MMS,发送MMS后,应自动禁用移动数据。

【解决方案】

        当数据未启用且mms apn处于断开状态时,清除MMS apn连接

对于Android N:

//telephony/java/android/telephony/CarrierConfigManager.java
public class CarrierConfigManager {
*/
publicstaticfinalStringKEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL = "allow_non_emergency_calls_in_ecm_bool";
-
+
+ publicstaticfinalStringKEY_ENABLE_MMS_WITH_MOBILE_DATA_OFF =
+ "config_enable_mms_with_mobile_data_off";
+
/** The default valueforevery variable. */
privatefinalstatic PersistableBundlesDefaults;

public class CarrierConfigManager { sDefaults.putString(KEY_MMS_UA_PROF_URL_STRING, "");
sDefaults.putString(KEY_MMS_USER_AGENT_STRING, "");sDefaults.putBoolean(KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL, true);
+ sDefaults.putBoolean(KEY_ENABLE_MMS_WITH_MOBILE_DATA_OFF, true);
+
}

//src/java/com/android/internal/telephony/dataconnection/DcTracker.java
publicclass DcTrackerextends DcTrackerBase {
// request goesaway. Thisapplies to bothCDMAand GSMbecausethey both
//can declarethe DUN APN sharable by default traffic, thus stillsatisfying
// thoserequestsand not torn down organically.
- if(apnContext.getApnType() == PhoneConstants.APN_TYPE_DUN &&teardownForDun()) {
+ if(apnContext.getApnType() == PhoneConstants.APN_TYPE_DUN &&teardownForDun()
+ ||apnContext.getState() != DctConstants.State.CONNECTED
+ || (!getDataEnabled() &&apnContext.getApnType() == PhoneConstants.APN_TYPE_MMS
+ &&apnContext.getState() == DctConstants.State.CONNECTED)) {//add condition if dataenableis false &&apn is mms &&mms stateisconnected, set
cleanup = true.
+
cleanup = true;
} else {
cleanup = false;

3.2 即使Android O中的移动数据关闭,也应该发送MMS

【背景】

        除了安卓O上的手机卡,当数据开关关闭时,我们默认无法正常发送和接收彩信。

【解决方案】

        若需要其他操作员支持此功能,则可以配置相应载波的carrier_metered_apn_types_string

代码修改:

//Device/qcom/common/device/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml
<string-array name="carrier_metered_apn_types_strings"num="4">
<itemvalue="default"/>
<itemvalue="dun"/>
<itemvalue="supl"/>
<itemvalue="fota"/>

删除CarrierConfigManager.java中的 KEY_CARRIER_METERED_APN_TYPES_STRINGS 字符串中删除mms,然后重新测试。

publicstaticfinalStringKEY_CARRIER_METERED_APN_TYPES_STRINGS = "carrier_metered_apn_types_strings";
sDefaults.putStringArray(KEY_CARRIER_METERED_APN_TYPES_STRINGS, newString[]{"default", "mms", "dun", "supl"});

4 log 收集

1. ADB logs

  1. adb shell logcat -v time-b radio > logcat_radio.txt
  2. adb shell logcat -v time > logcat.txt

2. 使用默认QXDM logmask

3. 要在所有接口上收集的TCP DUMP命令

  1. adb shelltcpdump -iany -s 0 -w/data/tcpdump.pcap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值