8 : SyncML dm package
? SyncML dm 協議包括 2 個階段 初始化階段(認證和終端信息交換的階段)和管理階段,管理階段服務器希望進行重復多次進行管理。 Manage 周期的開始以 package0 開始,本次出發依賴于不可更改的環境,在 SyncML Notifaction 開始的周期里面被指定
下圖是描繪了 2 個階段
?Management 階段包括了幾個協議的交互,從 server 發送到 client 的包的內容決定了這個周期是否進行下去,如果從 server 發送出來的包的管理指令需要得到 client 的回復, client 將會返回針對這些操作指令的回復。這些回復的包開始了新的協議的交互,服務器將發送一個新的管理指令的包并且開始一個新的協議交互的的過程。
???? 當 server 的 package 里面不包含 management operation 的時候, client 將根據服務器發送過來的包回復一個新的包,這個包里面只包含了 status 和 Synchr ,在這種情況下,真個回復的包不能被發送,協議中止。 Server 必須給任何 client 的包進行回復
???? 包的處理可能花費的時間是不可預知的,因此在 SyncML dm 協議中沒有指定 2 者的超時時間。
???? 如果不是 operation command 另有規定,終端和 server 可以不按照 package 中的順序執行指令。因此,在上一條管理指令在執行的順序是必須的,管理指令必須按照他們發送的順序進行執行。 Client 不能發送除了包含 Devinfo 的 REPLACE command 、 Result alert 給 server
8 . 1 session abort
8 . 1 . 1 描述
? ??? 是 server 還是 client 任何時候都可以中止操作。終端操作的原因可能是 server 關閉, client 沒電,或者用戶在 client 上的其他交互操作,或者其他操作。這種情況下,最好的方式是發送一個中止的 ALERT 。推薦的做法是: message 包含了管理指令的任何 stauts 和 result
如果發送一個 session 終端給接受方的 MESSAGE ,那么接收方的回應會忽略,(不會回應把,自己也不理解,有待更正)
有些終端是無法控制的, client 不在覆蓋范圍內或者電池沒有電。 Server 和 client 必須也對沒有信號的情況做好準備。上面提到的需求只要是為了減少一些回應超時,或者沒有回應的情況。
補充說明:
request/response
在傳輸用的角色被倒置的情況,
client
是個傳輸層的
server
,
server
是個傳輸層的
client
,這種情況下
Alert 1223 是無法預知的操作中止的信號標識,發送方的 session 中斷標識包含了 command 的狀態和結果,這些指令將在 abort 之前執行,發送方必須包含一個 FINAL 的標識。當 server 收到 alert 提示的時候,必須在回復的 message 中包含狀態和 SyncHR ,并且不回復新的 MESSAGE
8.2 package 0 , server 發起的初始化 指令
? 許多終端不能持續的偵聽服務器的連接,由于安全原因一些終端只是不想開方一些端口。大部分終端可以接受一些主動提供的 MESSAGE, 稱作通知 (notifaction).
? Server可以用通知的這種能力使終端初始化一個連接回server, SyncML dm 協議規定了幾種管理初始化通知的發送方式。發送者和通知的內容可以參考Notification Initiated Session, Version
? ? ? 需要說明的是:接收一個管理初始化的通知會受其他方面影響。如終端設備可能會允許用戶操作設備去初始化管理周期,另外,終端用戶也可以管理超時的管理周期,一些錯誤得操作也會使終端發起一個管理周期。
8
.3 package1 :客戶端發起初始化指令
??
管理階段跟SyncML dm 數據協議得描述完全相同,客戶端發起包的意圖如下:
??
1
:發送終端信息(廠商,版本,其他)給DM server,終端必須在第一個message中管理周期中發送設備信息
2
:根據SELECTION 9中的規則終端向DM server確認身份
3
:通知dmserver本次SESSION由客戶端發起還是由Dmserver 發起(package0往往不會用到,如果是客戶端發起的話)。
?
客戶端發起得初始化package得具體需求如下:
? 1
:在SyncHdr 元素里面得需求
VerDTD
的值必須是1.1
VerProto
的值必須是“DM/
Sessionid
必須能標明但前Management session 的身份,如果client 回復通知,那么Alert(1200)標識由server發起的,sessionid必須跟notifaction里面的sessionid相同,否則client產生的sessionid不會唯一,sessionid會貫穿整個session
MsgID
必須明確的指出message屬于哪個management session
Target
元素必須指明是個那個目標server
Source
元素指明的是哪個client 的service
Cred element
可能包含再認證的message里面,一般是從client發起,section9將會詳細描述
? 2
:Syncbody中必須包含alert信息無論client發起還是server發起
Alert command
的需求如下
? CmdId
是必須的
?
存放management session type 的Data element或者由server發起(1200)或者由client發起(1201)
? 3
:終端的信息必須在syncbody中包含Relpace command,replace command需求如下
? Cmdid
是必須的
? Dm tree
每個節點的item都可以被找到,在DMSTDOBJ中有詳細描述
? Source element
必須包含一個指定的URI 節點
? Data element
用來裝載device 信息數據
Final element
必須包含在Syncbody 的最后一個message 中