2010年10月24日

[android] iモードとSPモードのWAP PUSH信号(PDU)をデコードしてみた

WAP_PUSH信号を受信した時、WapPushOverSmsクラスが
10-23 13:10:27.779: DEBUG/WAP PUSH(1015): Rx: 000605b0af02800202066a00850903646f636f6d6f2e6e652e6a703f50493d30360001
のようなログを出力します。Rx: 以降に出力されているのが受信したWAP PUSHのPDU(Protocol Data Unit)です。このログを使って、iモードとSPモードのメール受信時のWAP PUSH信号(PDU)をデコードしてみます。

WiFi接続時のiモードメール受信時のPDU
さきほどのログがWiFi接続時のiモードメール受信時のログです。このPDUをデコードしてみます
// WSP header
0x00 - transaction ID
0x06 - pdu type(0x06: push)
0x05 - header length: 0x05
0xb0 - content-type: application/vnd.wap.slc
0xaf - X-Wap-Application-Id
0x02 - length of the Multi-octet-integer
0x80 0x02 - x-wap-docomo:imode.mail.ua

// push data
0x02 - WBXML Version 1.2
0x06 - "-//WAPFORUM//DTD SL 1.0//EN" (Service Loading 1.0)
0x6a - Charset UTF-8
0x00 - String Table Length ( = 0 )
0x85 - <sl>
0x09 - href
0x03 - start of string
0x64 6f 63 6f 6d 6f 2e 6e 65 2e 6a 70 3f 50 49 3d 30 36 - "docomo.ne.jp?PI=06"
0x00 - end of string
0x01 - </sl>
WAP PUSHのSL(service loading)データのhrefに"docomo.ne.jp?PI=06"が設定されるようです。次にSPモードメール着信のケースでデコードしてみます

SPモードメールのメール受信時のPDU
SPモードメールを受信した時のログです。
10-23 23:29:27.823: DEBUG/WAP PUSH(1016): Rx: 0006080302030aaf02905c030d6a008507036d656c6f6e63616b6540******************2e6a700005c3072010102314293001
10-23 23:29:28.116: DEBUG/WAP PUSH(1016): dispatchWapPdu_MailPush Start : appId = 36956
10-23 23:29:28.232: DEBUG/WAP PUSH(1016): call startService : Intent { act=android.provider.Telephony.WAP_PUSH_RECEIVED typ=application/vnd.wap.emn+wbxml cmp=jp.co.nttdocomo.carriermail/.SMSService (has extras) }
SPモードメールのPDUをデコードしてみます(不明点が多くデコードできていない箇所が残っています・・・)。
// WSP header
0x00 - transaction ID
0x06 - pdu type(0x06: push)
0x08 - header length: 0x08
0x03 - length of content-type
0x02 - length of the Multi-octet-integer
0x03 0x0a - application/vnd.wap.emn+wbxml
0xaf - X-Wap-Application-Id
0x02 - length of the Multi-octet-integer
0x90 0x5c - x-oma-docomo:xmd.mail.ua

// push data
0x03 - WBXML Version 1.3
0x0d - "-//WAPFORUM//DTD CHANNEL 1.2//EN" (Channel 1.2)
0x6a - Charset UTF-8
0x00 - String Table Length ( = 0 )
0x85 - <channel>
0x07 - href
0x03 - start of string
** ** ** ** ** ** ** ** ** 40 64 6f 63 6f 6d 6f 2e 6e 65 2e 6a 70: *********@docomo.ne.jp(SPモードメールのメールアドレスのようです)
0x00 - end of string
0x05 - 不明
0xc3 - 不明
0x07 - 不明
0x20 - 不明
0x10 - 不明
0x10 - 不明
0x23 - 不明
0x14 - 不明
0x29 - 不明
0x30 - 不明
0x01 - </channel>
残念ながら、SPモードメールのメール受信時のWAP_PUSHは前回記事のコードでは受信できません。

content-type: application/vnd.wap.emn+wbxml 且つ X-Wap-Application-Id:x-oma-docomo:xmd.mail.uaの WAP PUSHメッセージは明示的にjp.co.nttdocomo.carriermail/.SMSServiceサービスのインテントを呼び出すよう WapPushOverSmsがカスタマイズされているからと思われます。

WAPの技術資料はOMA(OpenMobileAlliance)に掲載されています。
WAPのネーミング規則はOMNA(Open Mobile Naming Authority)にて定義されています。
続きを読む
posted by meloncake at 04:42| Comment(1) | TrackBack(0) | Android