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

news/2024/7/3 0:15:42

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

编写者

日期

关键词

郑昀@ultrapower

 

2005-9-26

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

  本文档讲解了OTA的概念,给出了如何发送“同步设置”的OTA短信的步骤,并附带Java编写的源代码(http://www.cnblogs.com/Files/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()));

            }

 

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

第一个短信包:

0b0504c34cc00200030402010106060502020b81ea01016a00555803312e3000015003687474703a2f2f3231392e3233382e3136382e3138333a383038302f73796e63346a2f73796e630001520338300001544e03746578742f782d766361726400014f03322e31000156032e2f73636172640001510373796e63346a000147490331000157037a68656e6779756e0001

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

第二个短信包:

0b0504c34cc00200030402024d010101510353796e63346a0001474803320001490331000157037a68656e6779756e00014d01014b4c033100015303346a53767200010101

其中的“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例子

   1.0

   http://www.syncserver.com/sync

   8080

  

      text/x-vcard

      2.1

      ./Contacts?CLASS=PRIVATE

      Private Contact DB

     

         1

         james

         cHdk

     

  

  

      text/x-vcalendar

      1.0

      ./Calendar

      Calendar DB

  

   PIM Service

  

      2

      1

      james

      Ym9uZA==

  

  

      1

      1

      bond

      Ym9uZA==

  

  

      1

      My AP

  

这样指明一个和服务器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 同步设置

 





http://www.niftyadmin.cn/n/3649604.html

相关文章

C#实战系列—学生信息管理系统(三)项目打包

学生信息管理系统分为三个部分 项目展示 源码分析 项目打包 现在展示的是对原有系统进行二次开发的结果。为2.0版本。 一、项目打包过程 1、在项目的解决方案上右键&#xff0c;选择添加——新建项目 2、选择安装项目&#xff0c;名称随意。 3、项目新建以后&#xff0c;来到项…

static 小知识总结

静态&#xff1a;static———————— /* 静态&#xff1a;static。 用法&#xff1a;是一个修饰符&#xff0c;用于修饰成员(成员变量&#xff0c;成员函数). 当成员被静态修饰后&#xff0c;就多了一个调用方式&#xff0c;除了可以被对象调用外&#xff0c; 还可以直接被…

debian vnc 配置_如何在Debian 10上安装和配置VNC

debian vnc 配置介绍 (Introduction) Virtual Network Computing, or VNC, is a connection system that allows you to use your keyboard and mouse to interact with a graphical desktop environment on a remote server. It makes managing files, software, and settings…

SEO优化:Sitemap插件生成WordPress网站地图

▣ 前言 什么是sitemap网站地图&#xff1f;wordpress如何自动生成sitemap地图文件呢&#xff1f; 对于网站建设来说&#xff0c;网站地图是非常关键的&#xff0c;因为这对搜索引擎收录是很有利的。网上有很多方法介绍sitemap网站地图的制作。大体分为两种&#xff0c;一种是自…

了解编程中的操作顺序

介绍 (Introduction) As a coder, you’re probably used to telling computers what to do. Type up some code, run it, and the computer gets to work executing whatever command you gave it. 作为编码员&#xff0c;您可能习惯于告诉计算机该怎么做。 输入一些代码&…

[wbxml]使用Perl封装的WBXML的方法

PerlWBXML编写者日期关键词郑昀ultrapower2005-9-20WBXML XML Perl利用Perl库XML::WBXML&#xff0c;就可以执行XML和WBXML(Wap Binary XML)之间的自由转换了&#xff1a;use XML::WBXML;$wbxml XML::WBXML::xml_to_wbxml($xml);$xml XML::WBXML::wbxml_to_xml($wbxml);下面我…

深入理解java的finalize、GC、close()的优劣

目录 基本预备相关知识 对象的销毁过程 对象重生的例子 对象的finalize的执行顺序 何时及如何使用finalize 参考 基本预备相关知识 1 java的GC只负责内存相关的清理&#xff0c;所有其它资源的清理必须由程序员手工完成。要不然会引起资源泄露&#xff0c;有可能…

后端开发:SpringBoot实现注册与登录功能

这次实现的注册与登录功能需要进行数据库的基本操作&#xff0c;而且是前后端分离式开发。总的来说就是首先进行数据库的设计&#xff0c;然后根据数据库进行编写服务端API接口&#xff0c;接着来到客户端或移动端&#xff0c;进行登录与注册的界面设计&#xff0c;接收服务端提…