彩信MMS PDU 的解碼

2021-05-24 03:17:33 字數 4734 閱讀 9714

前一時間折騰了一下手機方面的開發,用的是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

bcc0x01

cc0x02

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

to0x17

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,從2023年開始到現在的秒數

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文件說明,很輕鬆的就解碼了

如何監聽彩信的傳送

簡訊的接收和傳送,有broadcast傳送出來。而對於彩信,接收時有broadcast,但是傳送時卻沒有。並且對於彩信,也沒有合適的uri可以實現對資料庫的監聽。大概看了下彩信mms的傳送流程,發現可以通過監聽android.net.conn.connectivity change這個廣播來監聽彩信...

彩信的基本原理

1 基本概念 8613 mmsc bj rsv.monternet.com 最新更新若干問題 彩信常見問題簡答 手機關機或不在服務區影響彩信的接收嗎?答 手機關機或不在服務區時是無法接收彩信的,但彩信會在系統中保留24小時,一旦開機或進入網路服務區,彩信手機仍然可以正常接收到彩信。如果手機在10分鐘...

WAP協議研究筆記 彩信的傳輸

彩信 mms 和wap瀏覽器是wap協議的兩大主要應用。wap協議有點複雜,也算是smartphone中的 核心技術之一吧,它包括wdp wtp wsp這一套傳輸協議,也包括wml 和smil這樣的內容表示協議。去年花了一點時間去研究它,後來該任務取消 了,所以沒有搞得太透徹。今年要真正使用了,現在...