zoukankan      html  css  js  c++  java
  • [OTA]制作OTA短信来配置手机与服务器同步

     

    [OTA]制作OTA短信来配置手机与服务器同步

    编写者

    日期

    关键词

    郑昀@ultrapower

     

    2005-9-26

    sms ota 同步 空中下载 手机 WDP WSP WBXML sync4j 同步设置

      本文档讲解了OTA的概念,给出了如何发送“同步设置”的OTA短信的步骤,并附带Java编写的源代码(https://files.cnblogs.com/zhengyun_ustc/SyncSettingBuilder.rar)

    空中下载(OTA)的概念

    OTA的基础概念可以参考我的[SMS&WAP]实例讲解制作OTA短信来自动配置手机WAP书签。下面简单介绍一下:

    OTA,即Over The Air,国内翻译为空中下载

    OTA标准由爱立信和诺基亚共同制订。OTA涵盖了许多范围,比如Kjava中的应用程序下载也是通过OTA我们这篇文章主要讲的是,通过短信方式空中下载同步配置信息,参考的文档是OTA_settings_general_7_0.pdf

     

    https://secure.forum.nokia.com/main/1,6566,1_47_50_10,00.html

    你可以看到许多Nokia - Ericsson OTA Documents

    下载OTA Setting规范:

    http://sw.nokia.com/id/3377eb33-cb1d-490e-a1cb-8735d785e1d3/OTA_settings_general_7_0.pdf

    下载OTA Setting示范:

    http://sw.nokia.com/id/bf5f034f-be06-4506-87b7-22788de5c316/OTA_service_settings_example_v11.pdf

     

    规范中定义了三种Setting

    l         浏览器设置

    l         浏览器的书签设置

    l         SyncML设置

    也就是说,你通过发送短信可以帮助用户手机设置SyncSettings,从而可以让手机与服务器同步信息(如电话本、日程和记事本等)。

    商业应用示范:无忧通讯录

    手机无线同步服务--无忧通讯录,支持SyncML,最专业的手机号簿备份服务:

    http://www.51txl.com:8080/51txl/

    它提供的服务还是非常简单易用的:“无忧通讯录是一种方便使用的无线同步服务,它可以安全地将您手机上的电话簿备份到网络上。假如您的手机丢掉了、被偷或者损坏,这时您不用着急,无忧通讯录上保存有您的电话簿可立即被恢复,而且所有的操作都可方便地在无线状态下完成。

           注册它的时候,它给你的手机上发送一个短信“同步设置”,你用“存入设置”菜单命令保存这个短信到同步菜单里,这样你就可以利用这同步设置和她的服务器端做数据同步了。

    我们下面具体讲解一下“同步设置”的OTA短信生成办法。

          

    简单粗暴直奔主题

    原则上,你只要看了OTA_settings_general_7_0.pdf,并参照OTA_service_settings_example_v11.pdf,就可以轻松地制作出符合规范的OTA短信

    但是,本文档的目的就是让你简单粗暴地直奔主题,运行本文档附带的源代码后,就可以制造出同步设置的短信的各个包了。

     

    首先,你需要构造出这样的Sync Settings XML,如下所示:

    Sync Settings XML

     <SyncSettings>

      <Version>1.0</Version>

      <HostAddr>http://10.18.168.183:8080/sync4j/sync</HostAddr>

      <Port>80</Port>

     <RemoteDB>

      <CTType>text/x-vcard</CTType>

      <CTVer>2.1</CTVer>

      <URI>./scard</URI>

      <Name>sync4j</Name>

     <Auth>

      <AuthScheme>1</AuthScheme>

      <Username>guest</Username>

      <Cred />

     

      </Auth>

      </RemoteDB>

      <Name>Sync4j</Name>

     <Auth>

      <AuthLevel>2</AuthLevel>

      <AuthScheme>1</AuthScheme>

      <Username>guest</Username>

      <Cred />

     

      </Auth>

     <ConRef>

      <ConType>1</ConType>

      <RefID>4jSvr</RefID>

      </ConRef>

      </SyncSettings>

     

     

    其次,对这个XML文档,通过以下代码转译为WBXML

    OTAMessage的构造过程

    File xmlDir = new File("C:\\opt\\xml\\sync4jsyncsettings.xml");

                String xml = IOTools.readFileString(xmlDir);

               

                SyncSettingWriter writer = new SyncSettingWriter();

                vWriter.addElement(writer);

                XmlParser xmlp = new XmlParser(new StringReader(xml));

                // 遍历XML解析

                traverseXML(xmlp);

               

                /*

                 * 对于Vector中的每一个Writer都做关闭动作

                 */

                int nIndex = 0;

                for(SyncSettingWriter writerSync : vWriter)

                {

                    nIndex++;

                    writerSync.close(vWriter.size(), nIndex);

                    System.out.println(encodeHex(writerSync.getBytes()));

                }

     

    上面的代码最后来打印出了短信二进制内容,比如:

    第一个短信包:

    0b0504c34cc00200030402010106060502020b81ea01016a00555803312e30000150036
    87474703a2f2f3231392e3233382e3136382e3138333a383038302f73796e63346a2f73796e6
    30001520338300001544e03746578742f782d766361726400014f03322e31000156032e2f73636
    172640001510373796e63346a000147490331000157037a68656e6779756e0001

    其中的“0201”代表共有两个短信包,这是第一个包;

    第二个短信包:

    0b0504c34cc00200030402024d010101510353796e63346a000147480332000149033
    1000157037a68656e6779756e00014d01014b4c033100015303346a53767200010101

    其中的“0202”代表共有两个短信包,这是第二个包;

    这样,手机收到这两个包之后,就知道按照顺序组合到一起,然后再解析了。

     

     

    下面,我们来铺垫:

    你要给目的手机发送一条短信,它必须是二进制格式的,这样手机才能够识别出来。

    发送短信,可以通过

    UltraBinarySMS

    UltraBinarySMS.SendSMS sendsms = new UltraBinarySMS.SendSMS();

    string strResponse = sendsms.send(content, destmobile);

     

    发送短信,你就可以立即在手机上看到效果。

     

    这几条短信内容差不多分为三块:

    l         WDP Layer的包头;

    l         WSP Layer的包头;

    l         WBXML

    同步SyncSettings XML的真正内容是用WBXML表述的。

    WDPWSP

    什么是WDPWSP呢?

    WDPWireless Datagram ProtocolWSPWireless Session Protocol

    更多信息可以参考http://www.protocols.com/pbook/wap.htm

     

    WAP Forum 在设计1.x版本的时候是经过深思熟虑的,但它和我们熟知和喜爱的3W协议(比如HTTP, SSL HTML)并不兼容。

    WAP1.x堆栈被定义为五层,自底向上依次是:

    u       WDP (Wireless Datagram Protocol),

    u       WTLS (Wireless Transport Layer Security),

    u       WTP (Wireless Transaction Protocol),

    u       WSP (Wireless Session Protocol),

    u       WAE (Wireless Application Environment,包括 Wireless Markup Language WML, 以及 WMLScript )

           每一层都和3W堆栈层面大致吻合:

    n         WDP->IP,

    n         WTP->TCP,

    n         WTLS->SSL/TLS,

    n         WSP->HTTP,

    n         WML->HTML

           这时你可以参考

    http://www.protocols.com/pbook/images/wapstack.gif

    The OSI Model for Wireless Communication

     

    由于WSP相当于HTTP层,那么WSP层所肩负的职责是:

           1).提供HTTP 1.1的功能和语义

           2).能力协商

           3).会话状态长期保存

           4).会话挂起和恢复

           5).可靠以及不可靠的Push的公共机制

           等等。

    在我们的OTA实现中,WSP Header其实就是声明两个内容:PDU typeMIME Type至于WDP,就是声明一个端口号,并说明本数据包是整条短信的第几个包。

        WBXML

    WBXML,就是WAP Binary XML

    简单地说,它就是一个定义好的XML片断,可以表述出同步服务器地址、远程数据库名称、登录账号等等内容。

    比如,这样一个实例:

    Nokia给出的SyncSettings例子

    <SyncSettings>

       <Version>1.0</Version>

       <HostAddr>http://www.syncserver.com/sync</HostAddr>

       <Port>8080</Port>

       <RemoteDB>

          <CTType>text/x-vcard</CTType>

          <CTVer>2.1</CTVer>

          <URI>./Contacts?CLASS=PRIVATE</URI>

          <Name>Private Contact DB</Name>

          <Auth>

             <AuthScheme>1</AuthScheme>

             <Username>james</Username>

             <Cred>cHdk</Cred> <!-- Base64 coded 'pwd' -->

          </Auth>

       </RemoteDB>

       <RemoteDB>

          <CTType>text/x-vcalendar</CTType>

          <CTVer>1.0</CTVer>

          <URI>./Calendar</URI>

          <Name>Calendar DB</Name>

       </RemoteDB>

       <Name>PIM Service</Name>

       <Auth>

          <AuthLevel>2</AuthLevel>

          <AuthScheme>1</AuthScheme>

          <Username>james</Username>

          <Cred>Ym9uZA==</Cred> <!-- Base64 coded 'bond' -->

       </Auth>

       <Auth>

          <AuthLevel>1</AuthLevel>

          <AuthScheme>1</AuthScheme>

          <Username>bond</Username>

          <Cred>Ym9uZA==</Cred> <!-- Base64 coded 'bond' -->

       </Auth>

       <ConRef>

          <ConType>1</ConType>

          <RefID>My AP</RefID>

       </ConRef>

    </SyncSettings>

    这样指明一个和服务器http://www.syncserver.com/sync进行数据同步

    很简单不是吗?

    但是如何将这个XML转换为短信所需要的二进制呢?

    转换过程:按图索骥

    Nokia是这么定义转换规则的,很简单,就是尽可能简短地用一个字符表示某一个元素。

    具体的转换规则,可以参考《OTA_settings_general_7_0.pdf》的8.2章节。

     

    我们还提供了一个公开的Web Service

    http://219.238.168.183/SendBinarySMS/sendsms.asmx?wsdl

    Web service介绍

    提供免费的发送二进制短信的渠道。本服务仅供测试OTA自动配置和书签短信。中国移动有监控,请勿作其他用途。

    支持下列操作。有关正式定义,请查看服务说明

    ·                        send
    填写二进制短信的HEX ASCII文本内容。比如“0B0504C34FC0020003040202296A0101860711036874”之类的。具体要填写的内容,请参考我的OTASMS工程,它会帮助你生成要发送的二进制内容。

     









    ,供您测试发送
    OTA短信。只需要提供输入参数:短信内容和目标号码即可。

    小结

    利用本文档提供的源代码,您可以将一个SyncSettings XML文档翻译为发送到手机上的二进制内容,并可以自动分包。手机收到之后,就可以存入同步设置,与你所指定的服务器进行同步了。

     

    编写者

    日期

    关键词

    郑昀@ultrapower

     

    2005-9-26

    sms ota 同步 空中下载 手机 WDP WSP WBXML sync4j 同步设置

  • 相关阅读:
    [引]Windows Server 2003 : 服务器群集
    周国平:(爱情)永远未完成
    企业管理常用缩写术语之中英文对照表(含解释)
    微软相关中文网站
    陈安之:NAC神经链调正术
    学会不要再争吵
    Oracle基础学习四:字符串 数字 日期 等 相关函数
    贪多嚼不烂
    frameset 框架传值点滴
    陈安之成功的十个关键
  • 原文地址:https://www.cnblogs.com/zhengyun_ustc/p/otasmssyncsettings.html
Copyright © 2011-2022 走看看