Android上的CDMA PDU解析

时间:2012-06-25 01:48:18

标签: android sms cdma pdu

我编写了一个解码CDMA 3GPP2点对点SMS消息的程序。我在互联网上找到的几个CDMA PDU六角形字符串上进行了测试,它运行得很好。但是,当我尝试在Android平台上的所有传入文本消息上实现它时,它总是失败。

我看了一下传入的PDU,它似乎没有遵循我习惯看到的相同模式。任何人都可以解释这个PDU的格式,或者我错过了什么来正确解码这个PDU?我没有考虑额外的标题或字段吗?

从手机上传入的短信中提取的示例PDU:

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000

我发现并测试了我的解析器的所有CDMA pdus看起来更像是:

00000210020207028CE95DCC65800601FC08150003168D3001061024183060800306101004044847

承运人:Verizon 电话:Samsung Galaxy S Fascinate正在运行Android 2.3.3

1 个答案:

答案 0 :(得分:2)

从$ SDK / sources / android-16 / com / android / internal / telephony / cdma / SmsMessage中查看javadoc:

/**
 * Creates byte array (pseudo pdu) from SMS object.
 * Note: Do not call this method more than once per object!
 */

...所以它没有遵循任何特定的CDMA标准。但是你可以解码它;所以在精美的ASCII艺术中: -

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000
--------messageType     --digitMode                   --------bearerReply   ------------------------------------------------------bearer data
        --------teleService --ton --------------------src     --replySeqNo  --messageID --msts          --userdata
                --------serviceCategory                         --errorClass  --len   --XX--len           --len
                          --numberMode                            --causeCode   ------      ------------2012/06/24 20:56:11
                              --npi                                 --------bearerDataLength                ----------------------userdata
                                --len                                           

请注意,我认为您在邮件中出现了剪切/粘贴错误 - 标记为“XX”的00字节我认为不应该存在 - 幸运的是,很容易发现日期并向后工作。所以这是来自6789101674的消息,其中包含userdata:

104C2CF9F3F5EBD73E7000,其前五位表示它是7位编码(0x02)。将剩余的userdata 5位向左移动后,我们只剩下:

09859f3e7ebd7ae7ce00
--len(septets) 9 septets == 63 bits, so we expect 8 bytes of body
  ----------------7bit-body

所以你的7bit体解码是“Bggguuugg”。