日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WAP PUSH解析(2)——WSP以及WBXML编码

發布時間:2023/12/10 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WAP PUSH解析(2)——WSP以及WBXML编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
WAP PUSH業務是承載在SMS業務之上的,亦即WAP PUSH數據封裝在SMS PDU的UserData中。本文分析PDU的UserData中WAP PUSH的WSP和WBXML的編碼。

?

本文以《WAP PUSH解析(1)——SMS PDU編碼》中已經講解了SMS PDU封裝的WAP PUSH數據為例來講解WSP和WBXML的編碼。SMS PDU封裝在WSP和WBXML外面,所以WSP和WBXML的編碼是不考慮數據是否是拼接的長短信的,WSP和WBXML要解析的是SMS PDU(如果分多個SMS發送,這里是拼接后的)的完整UserData。

[plain] view plaincopy
  • 79?06?01?ae?02056a0045c6080c03662e31303038362e636e2f662f736a6678000103e689bee69c8be5??
  • 8f8be38081e69fa5e5a4a9e6b094e38081e79c8be5b08fe8afb4e38081e79c8be696b0e997bbe280??
  • a6e6898be69cbae9a39ee4bfa1efbc8ce7ae80e58d95e4bda0e79a84e7949fe6b4bbefbc81e8b5b6??
  • e5bfabe4b88be8bdbde4bd93e9aa8ce6898be69cbae9a39ee4bfa1000101??

  • 一、WSP


    下面是按次解析的WSP封裝

    [plain] view plaincopy
  • 1.?transactionId:??
  • ?????0x79??
  • 2.?pduType:?06??
  • ?????06?PDU_TYPE_PUSH??
  • ?????07?PDU_TYPE_CONFIRMED_PUSH??
  • 3.?headerLength:???
  • ?????頭長度是變長的:32bits標示的7位編碼,最多用5個octets編碼??
  • ?????octet的bit7為1標識后續octet仍為長度數據;為0標識長度結束??
  • ???所以,這里01也就是頭的長度。??
  • ??
  • 4.?ContentType:???
  • ?????(wap-230-wsp-20010705-a?section?8.4.2.24)??
  • ?????WAP?PUSH是通常的說法,其實WAP?PUSH并不是最終的業務,最終業務是ContentType中標識的業務。??
  • ??
  • ?????ae?&?0x80?->?2E??
  • ?????0x2e?CONTENT_TYPE_B_PUSH_SI??????????"application/vnd.wap.sic"??
  • ?????0x30?CONTENT_TYPE_B_PUSH_SL??????????"application/vnd.wap.slc"??
  • ?????0x32?CONTENT_TYPE_B_PUSH_CO??????????"application/vnd.wap.coc"??
  • ?????0x3e?CONTENT_TYPE_B_MMS??????????????"application/vnd.wap.mms-message"??
  • ?????0x44?CONTENT_TYPE_B_PUSH_SYNCML_NOTI?"application/vnd.syncml.notification"??
  • ??
  • ?????可以看到,PUSH?Service?Indication(SI)?/?PUSH?Sservice?Load(SL)?/?MMS都是WAP?PUSH?over?SMS中的業務,而通常說的WAP?PUSH業務指的是SI/SL。??
  • ?????這里封裝的是SI。??

  • 接下來是WBXML封裝的SI數據。

    [plain] view plaincopy
  • 02056a?00?45c6?08?0c?03662e31303038362e636e2f662f736a6678000103e689bee69c8be58f8be380??
  • 81e69fa5e5a4a9e6b094e38081e79c8be5b08fe8afb4e38081e79c8be696b0e997bbe280a6e6898b??
  • e69cbae9a39ee4bfa1efbc8ce7ae80e58d95e4bda0e79a84e7949fe6b4bbefbc81e8b5b6e5bfabe4??
  • b88be8bdbde4bd93e9aa8ce6898be69cbae9a39ee4bfa100?0101??

  • 二、PUSH SI的封裝WBXML


    WAP PUSH SI是封裝在XML格式中的,但是XML不適合在SMS這種長度極度受限的傳輸手段,所以采用PUSH采用WBXML(WAP Binary XML)封裝。WBXML用一個字節代替常用的TAG和Attribute,所以能極大的節約傳輸數據量。

    ?

    下面是WBXML到XML的解析:

    [plain] view plaincopy
  • 02?<?xml?version="1.0"?encoding="UTF-8"?>??
  • 05?<!DOCTYPE?si?PUBLIC?"-//WAPFORUM//DTD?SI?1.0//EN"??
  • ?????????????????????"http://www.wapforum.org/DTD/si.dtd">??
  • 6A?IANACharset??
  • ???04?iso-8859-1??
  • ???17?shift_JIS??
  • ???6A?UTF-8??
  • ???03?US-ASCII??
  • 00?String?table?Length??
  • 45?<si>??
  • C6?<indication??
  • 08?action="signal-high"??
  • ????06?action="signal-low"??
  • ????07?action="signal-medium"??
  • 0C?href="http://??
  • ????0D?href="http://www.??
  • ????0E?href="https://??
  • ????0F?href="https://www.??
  • 03?start?of?inline?string?value??
  • 662e31303038362e636e2f662f736a6678??
  • f?.?1?0?0?8?6?.?c?n?/?f?/?s?j?f?x??
  • 00?end?of?inline?string?value??
  • 01?'>'?end?of?attributes??
  • ????>??
  • 03?start?of?inline?string?value??
  • e689bee69c8be58f8be38081e69fa5e5a4a9??找朋友、查天??
  • e6b094e38081e79c8be5b08fe8afb4e38081??氣、看小說、??
  • e79c8be696b0e997bbe280a6e6898be69cba??看新聞…手機??
  • e9a39ee4bfa1efbc8ce7ae80e58d95e4bda0??飛信,簡單你??
  • e79a84e7949fe6b4bbefbc81e8b5b6e5bfab??的生活!趕快??
  • e4b88be8bdbde4bd93e9aa8ce6898be69cba??下載體驗手機??
  • e9a39ee4bfa1??????????????????????????飛信??
  • 00?end?of?inline?string?value??
  • 01??</indication>??
  • 01??</si>??

  • 最終解析得到的XML為: [html] view plaincopy
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <!DOCTYPE?si?PUBLIC?"-//WAPFORUM//DTD?SI?1.0//EN"??
  • ?????????????????????"http://www.wapforum.org/DTD/si.dtd">??
  • <si>??
  • ??<indication?action="signal-high"?href="http://f.10086.cn%2Ff%2Fsjfx">??
  • ????找朋友、查天氣、看小說、看新聞…手機飛信,簡單你的生活!趕快下載體驗手機飛信??
  • ??</indication>??
  • </si>??

  • 三、帶有string table的WBXML

    WBXML封裝的字符串有inline string和string table兩種,這兩種字串都以’\0’結束。String table中可以由’\0’結束的多個字符串,stringtable的長度把結束符’\0’計算在內,是所有字串的總長度。

    139郵箱的WAP PUSH提醒通知采用了String tables。很多手機終端雖然能收到通常的PUSH消息,但是卻接收不到139郵箱的WAP PUSH通知,原因就是不支持帶stringtable的WBXML的解析,而忽略了這樣的PUSH消息。

    下面是帶有String table的WAP PUSH SI數據

    [plain] view plaincopy
  • 02056a0fe982aee4bbb63a52653a507573680045c60c03792e31303038362e636e2f693f663d3430??
  • 26693d313039383830393834303100080183000101??

  • 下面是WBXML到XML的解析:

    [plain] view plaincopy
  • 02?<?xml?version="1.0"?encoding="UTF-8"?>??
  • 05?<!DOCTYPE?si?PUBLIC?"-//WAPFORUM//DTD?SI?1.0//EN"??
  • ?????????????????????"http://www.wapforum.org/DTD/si.dtd">??
  • 6A?IANACharset??
  • ???04?iso-8859-1??
  • ???17?shift_JIS??
  • ???6A?UTF-8??
  • ???03?US-ASCII??
  • ?????
  • 0f?String?Table?Length??
  • ???長度是string?table中所有string的長度,長度包含結束符’\0’。??
  • e982aee4bbb63a52653a50757368??
  • ???郵件:Re:Push??
  • 00?end?of?string?table?value??
  • ??
  • 45?<si>??
  • C6?<indication??
  • 0C?href="http://??
  • 03?start?of?inline?string?value??
  • 792e31303038362e636e2f693f663d343026693d3130393838303938343031??
  • ???y.10086.cn/i?f=40&i=10988098401??
  • 00?end?of?inline?string?value??
  • 08?action?attribute?-?signal?high??
  • ???action="signal-high"??
  • 01?'>'?end?of?attributes??
  • ????>??
  • 83?String?table?reference?below??
  • 00?String?table?index??
  • 01??</indication>??
  • 01??</si>??

  • 把String Table中的內容替換,得到最終解析出的XML: [html] view plaincopy
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <!DOCTYPE?si?PUBLIC?"-//WAPFORUM//DTD?SI?1.0//EN"??
  • ?????????????????????"http://www.wapforum.org/DTD/si.dtd">??
  • <si>??
  • ??<indication?href="http://y.10086.cn/i?f=40&i=10988098401"?action="signal-high">郵件:Re:Push??
  • ??</indication>??
  • </si>??

  • 四、小結


    本文以WAP PUSH Service Indication為例,講解WAP PUSH的WSP編碼和WBXML編碼。并對WBXML的兩種string——inline string和string table進行了詳細闡述。

    ?

    參考資料

    1. WAP Binary XMLContent Format

    ??? WBXML標準,必看!

    2. MIUI ROM接收WAP PUSH短信的補丁

    ??? Android上的WAP PUSH解析實現,有源代碼,但是解析不全。

    3. WAP Push over SMS

    ??? WAP PUSH over SMS的大致介紹(英文)

    4. WAP Push SMS encoding

    ??? WAP PUSH Service Indication封裝實例(英文)

    5. Sending SMS WAP Push messages using the ActiveXperts SMS and MMS Toolkit

    ??? 發送WAP PUSH的工具。是使用說明,雖然沒實現細節,但可參考WBXML的Token和Attribute對照。(英文)

    6. android wap push功能實現

    ??? 反面教材。用固定位置解析,以及固定用000103標識URL結束,固定用000101標識內容結束,簡直是胡扯!


    ??? 關于協議的解析還是要依據標準!用自己遇到的情況可以幫助理解協議,但是據此來做實現的話,只能解析一種情況,被解析內容或格式有少許變化,所做的實現就沒用了,到處是BUG。


    【修改歷史記錄】

    2012/07/02 對頁面布局做了修改

  • 把PDU數據和編碼解析部分放在了CSDN編輯工具“編程語言(其他)”里,這樣看起來段落上好多了,不過損失了顏色標注!
  • 把解析后的XML放在CSDN編輯工具“編程語言(HTML/XML)”里。

  • 總結

    以上是生活随笔為你收集整理的WAP PUSH解析(2)——WSP以及WBXML编码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。