Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1493837
  • 博文数量: 408
  • 博客积分: 10036
  • 博客等级: 上将
  • 技术积分: 4440
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-06 13:57
文章分类

全部博文(408)

文章存档

2011年(1)

2010年(2)

2009年(1)

2008年(3)

2007年(7)

2006年(394)

我的朋友

分类: LINUX

2006-07-13 12:57:43

 
Webme09.cublog.cn
google

在 Linux 上构建 WAP 网关(初级)

| 2005-01-27 14:09

Hardware13.jpg        实现移动服务的最热门技术是无线应用协议(Wireless Application Protocol,WAP)。用于 WAP 的开放源代码网关执行 Web 服务器与移动电话之间的协议转换,本文对它的优势进行了讨论。
        WAP 网关的工作原理是,通过最优化的用于无线空中下载(wireless-over-the-air)的标记语言、脚本语言和传输协议,使电话成为一个简单的 Web 浏览器。它使用 WAP 协议栈与电话交流,并将它接收到的请求转化为普通的 HTTP。这样,内容提供者可以可以使用任何 HTTP 服务器并利用现有的关于 HTTP 服务实现与管理的知识。

除了协议的转换,网关还将 WML(无线标记语言,Wireless Markup Language)页压缩为更紧凑的格式,这样就节省了空中的带宽,并进一步地减少了电话处理的需求。它还将 WMLScript 程序编译为字节代码格式。

市 场上有多种可用的商用 WAP 网关,价格昂贵。另一方面,Kannel 是一个开放源代码网关;您不需要为它付费,您可以自行编辑源代码,您还可以构造您自己的定制网关。由于 Kannel 是在 Linux 系统(RedHat 和 Debian)上开发,所以它可以平滑地移植到其他类 UNIX 操作系统。不过,在本文中,我只是展示了在这两种 Linux 系统上网关的构建。


网关将处理工作负载划分到下面两个位置:

  • 信使单元(bearer box),它连接到 SMS(短消息服务)中心和 CSD(电路交换路数)路由器,为 wapbox 向它们提供一个统一的接口。信使单元通过实现 WAP 栈的 WDP(无线数据报协议,Wireless Datagram Protocol)层来完成这一工作。
  • wapbox,WAP 栈中更高的层位于这一单元。每个会话以及它们的事务都由同一个 wapbox 来处理。


信使单元自 CSD 路由器接收到 UDP(用户数据报协议,User Datagram Protocol)数据包,检查它们是不是 WAP 数据包,然后将它们路由到 WAP 单元。这个简单的设计使得信使单元对每个数据包的处理最少。信使单元也发送其他单元生成的 UDP 数据包,这多少增加了一些路由处理。 wapbox 实现了 WTP(无线传输协议,Wireless Transaction Protocol)和 WSP(无线会话协议,Wireless Session Protocol)层。它们从电话取得类似于 HTTP 的请求,并将真正的 HTTP 请求发送到内容服务器,压缩响应,然后将它们发回到终端。(会话被保持,以尽可能限制无线带宽。)


在构造网关之前,您必须有以下基本条件:

  • C 编译器(CC 或 GCC),开发库和相关工具
  • Gnome XML 库(也叫 gnome-xml 和 libxml),版本 2.2.5 或更新(请参见 中的链接)
  • GNU Make
  • Posix 线程库(pthread.h)


有两种途径可以构建网关。第一个途 径是获得源代码,自己编译并安装它。第二个途径是得到预编译的二进制 RPM(RedHat 包管理器, Package Manager),然后安装。RPM 是一个设计用来编译和管理源代码和二进制软件包的程序。它也是可移植的,可以运行于不同的平台上。请参阅 参考资料 以获得更多关于 RPM 的资料。

首先,您需要通过 Kannel 的 Web 站点(请参阅 参考资料)下载 Kannel 的源代码以进行安装。下载完成后,在命令行中输入下面的命令来编译源代码:

./configure
make

理想情况下,您将可以不出任何问题地编译代码。如果前面提到的库都存在,那么编译是很容易的。要安装网关,输入下面的命令: make bindir=/usr/local/bin install

您可以将 /usr/local/bin 目录替换为网关将要安装到的任何路径。网关现在已经安装到了您的系统上。可执行文件现在可以在 /gw 目录下找到,名为 bearerbox、wapbox。


通过输入下面的命令来检查您的系统中是否已经安装了 libxml2 XML 库: rpm -q libxml2。

这个 XML 库是安装和编译网关所需要的。从网站上下载 Kannel 的二进制 RPM 文件。以 root 身体登录,输入下面的命令来进行安装。如果您有足够的权限,那么可能不需要进入超级用户模式。


rpm -ihv kannel_VERSION.i386.rpm

这样完成了安装。_VERSION 属性是 Kannel 二进制的版本数。


现在来研究使用一个支持 WAP 的移动电话模拟器来使用和测试网关的基本步骤。本质上讲,您将涉及到 bearerbox 和 wapbox(您刚创建的可执行文件)。


bearerbox 和 wapbox 是网关的主要工作模块,在配置网关之前必须得到配置。这两个模块由一个配置文件控制,其中有 wapbox 组和 bearerbox 组。

配置文件由成组的配置变量构成。组由空行隔开,每个变量在自己的行中定义(Kannel 配置中的每个组由组变量标识)。以井号(#)开头的行是注释,应该被忽略。

一个变量定义中有变量的名称、等号(=)和变量的值。变量名中可以有除了空格和等号以外的任何字符。变量的值是一个字符串,可以有引号,也可以没有引号。如果变量以空格开头或结尾,或者包含特殊字符,则需要使用引号。普通的 C 转义符在引号内有效。


我引用了一个用于这个项目的配置文件的例子;它是网关运行所需要的基本文件。不过,还有一系列其他变量可以用来控制网关。您可以参考 Kannel 用户指南(User Guide)来了解它们。




#The sample.conf file which is the core configuration file

#for running the WAP Gateway

#Start of Configuration File

group = core

admin-port = 13000

admin-port-ssl = false

admin-password = rose123

status-password = rose123

admin-deny-ip = "205.158.62.76"

admin-allow-ip = "*.*.*.*"

wapbox-port = 13002

box-deny-ip = "205.158.62.76"

box-allow-ip = "*.*.*.*"

udp-deny-ip = "205.158.62.76"

udp-allow-ip = "*.*.*.*"

wdp-interface-name = "*"

log-file = "my_kannel.log"

log-level = 1


#The wapbox group for WAP gateway configuration

group = wapbox

bearerbox-host = localhost

timer-freq = 1

log-file = "my_wap.log"

log-level = 1

#End of Configuration File


组中包含它所关联的组的 ID。如果 ID 是 core,则它是 bearbox 的配置;另外,wapbox ID 是代表 wapbox 配置。 admin-port 标识符指定了 HTTP 管理通过哪个端口完成。bearerbox 和 wapbox 组的其他各个属性的描述见表 2 和表 3。必选的域由 m 来表示,o 表示是可选的域,c 表示是有条件的域。

表 1. bearerbox 的配置文件属性

变量描述
group(m)core这是一个必选变量。
admin-port(m)端口号(port-number)bearerbox 侦听 HTTP 管理命令的端口号。它可以是高于 1023 的任意端口。
admin-port-ssl(o)bool如果设置为真,那么默认的不安全的普通 HTTP 服务器就会由一个启用 SSL 的管理 HTTP 服务器所取代。默认情况下是'no'。
admin-password(m)字符串HTTP 管理命令的密码。
status-password字符串请求 Kannel 状态的密码。如果没有设置,那么不需要密码;如果设置了,可以使用这个密码或者 admin-password。
admin-deny-ipIP 列表这些列表可以用来防止来自特定 IP 地址的连接。
admin-allow-ipIP 列表可以用做通配符。
wapbox-port(c)端口号用于 wapbox 连接的端口。如果没有设置,则 Kannel 不能处理 WAP 传输。
box-deny-ipIP 列表这些列表可以用来防止来自特定 IP 地址对单元连接。
box-allow-ipIP 列表同 admin。它允许 IP。
udp-deny-ipIP 列表拒绝来自给定 IP 的 UDP 数据包。
udp-allow-ipIP 列表允许来自给定 IP 的 UDP 数据包。
wdp-interface-name(c)IP 或者 *如果设置了这个参数,Kannel 就会侦听限于给定 IP 的来到 9200 到 9208 端口的 WAP UDP 数据包。如果不需要具体的 IP,可以只用一个星号(*)。
log-file文件名记录日志的文件。这是对标准输出和命令行定义的日志文件的补充。core 组中的 log-file 只由 bearerbox 使用。
log-level数字 0 到 5记入日志的 logfile 事件的最小限度的级别。0 代表调度,1 代表信息,2 代表警告,3 代表错误,4 代表重大问题。

表 2. wapbox 的配置文件属性

变量描述
group(m)wapbox这是一个强制变量。
bearerbox-host(m)主机名安置 bearerbox 的机器。
timer-freq秒值计时器的较验频率。默认为 1。
log-file文件名同 bearerbox 的“core”组中同名属性。
log-level number0 到 5含义与 bearerbox 中相同。


一 旦编译了 Kannel 并按您的规范编辑了配置文件,就可以进行最后一个步骤了。对于基本的工作,您可以拷贝并粘贴清单 1 中的文本,将其以任何名字保存,并用作您的配置文件。为了启动网关,您必须首先启动 bearerbox,然后再启动 wapbox。由于 bearerbox 是网关的基本部分,它必须要先启动。

通过下面的命令启动 bearerbox:./bearerbox -v 1

-v 1 将日志级别设置为 INFO。使用这一选项,您将不会看到大量的调试输出(默认是 DEBUG ),同时 conf_file 是您的 Kannel 所使用的配置文件的名字。基本的发行包附带了样例配置文件 wapkannel.conf(在 /gw 子目录下),用于构建 WAP Kannel。您可以编辑那些配置文件以构建您自己专门的系统。在信使单元之后,必须启动 wapbox。通过输入下面的命令启动它:./wapbox -v 1

要了解更多命令行选项,您必须回顾 Kannel 用户指南。


可以通过一个 HTTP 接口管理 Kannel。所有的命令都作为 HTTP 请求给出,所以可以方便地通过命令行给出它们,比如这一个:


% lynx -dump

在上面的命令中,“12345”是配置文件中设置的 admin-port。对大部分命令来说,需要有一个 admin-password 作为参数,如这里所示。shutdown 用于关闭网关。其他可用的命令是:

  • Status,得到网关的当前状态。如果没有设置 status-password,那么不需要密码。
  • Suspend,设置 Kannel 为挂起状态。需要一个密码。
  • Resume,将 Kannel 的状态设置为运行。需要一个密码。


我将给出一些简单步骤,以通过移动电话模拟器来测试网关并访问来自因特网的 WML 页。您需要有两台机器,一台运行 Windows® 操作系统,另一台是 Linux 网关,最好用局域网连接起来。Linux 机器必须连接到因特网上,不管是直接的还是间接的。

  • 您可以使用 Nokia 7210 Content Authoring SDK(请参阅 ),它可以用于 Windows 系统。
  • 将它安装到 Window 系统中。
  • 做一些小小的配置,并将网关地址设置为运行着网关的 Linux 机器的 IP 地址。
  • 现在在模拟器中输入提供 WML 页服务的 Web 站点地址,就大功告成了!

您一定能通过模拟器访问网页并进行导航。


这个项目描述了构建 WAP 网关最便宜且最简单的方法——可以在任意范围内定制。

关于作者
作者是 ConvergeLabs 的一位软件工程师,多年来一直致力于 Linux 工作。他的主要兴趣在于 C、无线和 Linux。可以通过 manasb@convergelabs.com 与他联系。


此文档转载自IBM developerWorks,版权归IBM developerWorks所有。

 
Webme09.cublog.cn
google
阅读(758) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~