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 同步设置

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/zhengyun_ustc/p/otasmssyncsettings.html
Copyright © 2011-2022 走看看