前一時間折騰了一下手機方面的開發,用的是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這樣的內容表示協議。去年花了一點時間去研究它,後來該任務取消 了,所以沒有搞得太透徹。今年要真正使用了,現在...