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 ,这种情况下 8.1.1 以上的推荐可能不会用到
8.1.2 需求
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 1.1.2
需要说明的是:接收一个管理初始化的通知会受其他方面影响。如终端设备可能会允许用户操作设备去初始化管理周期,另外,终端用户也可以管理超时的管理周期,一些错误得操作也会使终端发起一个管理周期。
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/ 1.1 ”
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 中