彩信MMS PDU 的解碼


      前一時間折騰了一下手機方面的開發,用的是NOKIA智能手機,NOKIA網站有一個很方便的開發包Nokia_PC_Connectivity_API_3.2。

這個開發包帶有VB.NET,C#,VC的文件系統,設備管理,內容存取的開發例子。試了試可以正常收發短信,但彩信只可以看到條目標題,時間,看不了內容,了解一下,在Content Access API 3.2里的CA_MMS_DATA。這個結構體中,重要的BYTE* pbData 沒有相關說明,例子里也沒有解析。

      這幾天把手機的pbData數據異了一些出來,網上查了一下,發現是彩信的PDU編碼格式就到網上找了一下,相關開發入門的例子和協議,竟發現不好找。亂七八糟的。說什么的都有。因為自已的手機碼是使用移動的就找了一下關於移動的相關文件,很快就找到《中國移動多媒體消息系統(MMS)接口規范》。了解一下整個MMS流程。

 

多媒體消息業務涉及的系統接口

整個MMS業務環境通過WAP網關與移動網相連,各接口協議都是HTTP或SMTP等通用的Internet協議。其中: 
   MM1:MMS用戶代理(MMS手機上的應用程序,如瀏覽器)和MMS代理/服務器(MMSC)之間的參考點,基於WAP和HTTP實現;
   MM2:MMS中繼和MMS服務器之間的參考點,一般是MMSC內部的接口;
   MM3:MMS服務中心和外部消息系統間的參考點,基於IP實現,如與Email服務器相連,則采用SMTP協議;
   MM4:MMS服務中心和另一個MMSE中的MMS服務中心間的參考點,基於SMTP實現;
   MM5:MMS服務中心和HLR間的參考點,非必須;
   MM6:MMS服務中心和MMS用戶數據庫間的參考點,可以是內部接口或外部接口;
   MM7:MMS服務中心和MMS增值業務應用之間的參考點,基於IP實現;
   MM8:MMS服務中心和計費系統間的參考點。

 

看了一下,再加之前面找的一些亂七八糟的資料,了解到開發彩信有兩個種要的開發接口,一個是MM1接口,和MM7接口。

MM1是以終端設備方式(手機終端、GPRS modem),MM7是以SP增值業務方式接入.

說明自已手機異出的數據是MM1接口的協議上的mms pdu數據。

 

MMS PDU 的解碼

 

    MMS PDU 的具體編碼規則在:WAP-209-MMSEncapsulation-20020105-a.pdf或在OMA-MMS-ENC-V1_2-20050301-A.pdf上有介紹。

   MMS PDU被封裝在WSP/PDU之中 作為WSP的消息體進行傳輸,並采用WAP/WSP協議作為傳輸內容的二進制編碼(binary encoding)機制,進行消息的封裝(Encapsulation)。
在OMA-TS-MMS-ENC-V1_3-20080128-C.pdf文檔所在規范中,詳細定義了每個PDU所涉及的Header域和值,以及為它們分配的二進制碼的一一對應關系。采用此二進制編碼規范,節約了無線領域的帶寬資源,並最優化其在空中傳播的數據量。
具體對應關系請參閱相關文檔。
MMS 編碼必須遵循無線會話協議( Wireless Session Protocol,以下簡稱 WSP)。
WSP使用一種與 HTTP/1.1相同的語法描述數據的組織結構,具體可參考 RFC[2068]。
HTTP/1.1使用 ASCII字符編碼來傳輸數據,而 WSP為降低傳輸帶寬,將 HTTP/1.1中的一些著名域對應的字符串定義為一個字節,並在對這些緊湊格式編碼時加上 0x80,使著名域的編碼大於 127(擴展 ASCII字符),從而將它們與普通 ASCII字符區別開。因此 MMS信息頭的基本編碼格式為:“域編碼”+“內容”,詳情請參考表 1。編碼順序如下:消息類型、事務 ID、版本號必須依次排在最前面,而 MMS信息體內容類型則應該排在 MMS信息頭的最后。

 

MMS PDU頭域分析和頭域編碼
    每個MMS PDU都是由MMS頭域和MMS消息體組成,MMS PDU中的頭域由客戶端指定,一些頭域也可以被分發代理修改或補充,分發代理使用這些頭域信息生成MM通知以及構造接收MM的PDU中的相關頭域,連同消息實體一同送往接收方,消息體跟在頭域之后。大多數MMS PDU只含有頭域,它們起到建立和維持通信的作用,消息體只用在M-Send.req和M-Retrieve.conf PDU中。
    MMS頭域根據WAP-209協議和RFC2387的規定,由一系列的域組成,這些域定義了PDU的各種屬性,包括PDU類型,接受方,發送方,發送時間等,頭域中的域名分為可選項和必選項。在編碼MMS頭域時,X-Mms-Message-Type ,X-Mms-Transaction-ID和X-Mms-MMS-Version必須位於MMS頭的開始,並且按照前面所列的順序。Content-Type必須在MMS頭域的最后,其后為消息體,其它域的順序可以隨意安排。

 

參考表 1

Name  Assigned Number 
Bcc  0x01 
Cc  0x02 
X-Mms-Content-Location  0x03 
Content-Type  0x04 
Date  0x05 
X-Mms-Delivery-Report  0x06 
X-Mms-Delivery-Time  0x07 
X-Mms-Expiry  0x08 
From  0x09 
X-Mms-Message-Class  0x0A 
Message-ID  0x0B 
X-Mms-Message-Type  0x0C 
X-Mms-MMS-Version  0x0D 
X-Mms-Message-Size  0x0E 
X-Mms-Priority  0x0F 
X-Mms-Read-Report  0x10 
X-Mms-Report-Allowed  0x11 
X-Mms-Response-Status  0x12 
X-Mms-Response-Text  0x13 
X-Mms-Sender-Visibility  0x14 
X-Mms-Status  0x15 
Subject  0x16 
To  0x17 
X-Mms-Transaction-Id  0x18 
X-Mms-Retrieve-Status  0x19 
X-Mms-Retrieve-Text  0x1A 
X-Mms-Read-Status  0x1B 
X-Mms-Reply-Charging  0x1C 
X-Mms-Reply-Charging-Deadline  0x1D 
X-Mms-Reply-Charging-ID  0x1E 
X-Mms-Reply-Charging-Size  0x1F 
X-Mms-Previously-Sent-By  0x20 
X-Mms-Previously-Sent-Date  0x21 
X-Mms-Store  0x22 
X-Mms-MM-State  0x23 
X-Mms-MM-Flags  0x24 
X-Mms-Store-Status  0x25 
X-Mms-Store-Status-Text  0x26 
X-Mms-Stored  0x27 
X-Mms-Attributes  0x28 
X-Mms-Totals  0x29 
X-Mms-Mbox-Totals  0x2A 
X-Mms-Quotas  0x2B 
X-Mms-Mbox-Quotas  0x2C 
X-Mms-Message-Count  0x2D 
Content  0x2E 
X-Mms-Start  0x2F 
Additional-headers  0x30 
X-Mms-Distribution-Indicator  0x31 
X-Mms-Element-Descriptor  0x32 
X-Mms-Limit  0x33 

 

 

如HEX數據:8C 80 8D 90 85 04 4CA72474
8C—表示X-Mms-Message-Type
80— m-send-req
8D— X-Mms-Version
90— MMS Version值1.0
85— 表示date
04— 表示date的數據長度
4CA72474 -表示date的數據Little-endian,從1970年開始到現在的秒數
96—subject主題
89— 表示From
97— 表示From
From=0x89+長度+ 0x80+地址+0x00(收到時解碼用) 還有發送時用的格式:0x89, 0x01, 0x81 以0x81為標記的占位符,發送時自動插入發送號碼From=0x97+內容+0x00
CC =0x82+號碼+0x00
subject=0x98+長度+字符集+字符串+0x00;//(常為用Utf8長度+2)+0xEA+內容+0x00
...
以上分析的就是一個典型的MMS PDU消息格式,按上面參考表 1配合WAP-209文檔說明,很輕松的就解碼了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM