GSM是全球移动通信系统(Global System of Mobile Communication)的简称。它是由欧洲电信标 准组织ETSI制订的一个数字移动通信标准。GSM的 短消息业务,由于其方便、快捷、廉价等特点而备受用 户的青睐,它作为GSM网络的一种基本业务,已得到 越来越多的系统运营商和开发商的重视。目前,很多网 络公司就是依靠短消息业务生存和发展。随着短消息 业务的不断发展,它在移动终端上的应用也越来越广。 Android是Google于2007年11月发布的基于 Linux内核的开源操作系统,主要用于智能手持终 端,如手机、平板电脑等。Android的无线接口层 (RIL)位于应用程序框架和内核之间,提供了无线通 讯模块与Android电话服务的抽象层[2],主要负责 AT命令的发送、SMS的发送和上报以及response的 解析。Android framework层在电话服务功能上分成 了两个分支:GSMPhone和CDMAPhone,而在RIL 层上,则提供了基于GSM网络的支持。为使Android 平台能够正常发送和接收短信,笔者在分析GSM SMS PDU协议的基础上,将GSM SMS移植到该平 台以支持此功能。 1 SMS概述 SMS(Short Message Service)即通常所说的短消 息业务。所谓短消息就是通过GSM网络传输的有限 长度的文本(数字或文字)信息。而SMS是GSM系统 提供给移动终端用户的一种特殊服务。通过GSM网 络,并设有短消息业务中心(SMSC),便可实现SMS。 短消息业务按其实现方式可分为点到点短消息业务和 小区广播短消息业务,目前主要应用的是点到点短消 息业务。 点到点短消息业务包括两种情况[3]:一种是移动 台终止(接收)点对点短消息(SMS—MT/PP);另一种 是移动台发起(发送)点对点的短消息业务(SMS— MO/PP)。点到点短消息业务即通过M0和MT将一 条短消息从一个实体发送到指定目的地址的另一实体 的业务。被发送的信息经过编码后消息长度为140个 字节,也就是一条短消息可以包含160个英文字母(7 bit编码)或70个汉字(16 bit编码)。 在GSM SMS PDU Mode[43中,可以采用2种编 码方式来对发送的内容进行编码,它们是7-bit和 Ucs2编码。7-bit编码用于发送普通的ASCII字符, 它将一串7-bit的字符(最高位为O)编码成8-bit的数 据,每8个字符可“压缩”成7个;UCS2编码用于发送 Unieode字符。PDU串的用户信息(TP—UD)段最大容 量是140 B,所以在这两种编码方式下,可以发送的短 消息的最大字符数分别是160和70。这里,将一个英 文字母和一个汉字都视为一个字符。SMS PDU编码 方案在源代码中定义如下: typedef enum{ SMS—CODING—SCHEME—UNKNOWN=0, SMS—CODING—SCHEME—GSM7·//GSM 7-bit编 码 SMS—CODING—SCHEME—UCS2//UCSZ编码 }SmsCodingScheme 2 GSM SMS PDU字段分析 ETSI的GSM03.40标准Is]详细论述了PDU的 协议字段,现将发送PDU(Submit—PDU)和接收PDU (Deliver—PDU)的字段含义总结如下. 2.1 Submit—PDU字段含义 Submit—PDU字段协议如表1所示。 表1 Submit—PDU字段协议 ![]() 例如PDU字符串:o001000b818169329646fl000 b044160597d,将其字段进行分解,如表2所示。 ![]() 由于SMSC已经包含在UIM卡中,因此不必指 明,设置为Ox00即可。 MTI设置为0x01,表示这是一个SUBMIT类型 的PDU。MR用于对Submit—PDU进行标识,一般设 置为0x00。 DA字段,目标手机号码为18962369641,长度 11,用十六进制表示为OxOb。目标手机号码的长度为 11,需要补一个f将其凑成偶数,然后再将每两个字节 进行颠倒,就是我们看到的8169329646fl。 PID为0x00,表示为普通GSM类型,点对点模 式。 D(葛为OxOb,表示用户使用的编码方式为UCS2 编码。当DCS为0x00时,使用的是GSM 7 bit编码。 UDL为0x04,表明用户数据长度为4个字节。 UD为用户数据,UNlCODE值0x4160代表 “你”,0x597d代表“好”。 2.2 Deliver—PDU宇段含义 Deliver—PDU字段协议如表3所示。 表3 Deliver—PDU协议字段 ![]() |