基于Android的SIP软交换系统
扫描二维码
随时随地手机看文章
引言
掌上通信软件作为手机应用的一部分,正发挥着巨大的 作用。随着互联网的不断改善,在互联网上利用网络进行语 音通话已成为现实,网络电话应运而生。网络电话的原理正是 采用了 VoIP (Voice over Internet Protocol)技术实现的,VoIP 是一种建立在互联网上的数字化或分组化的语音传输技术。 在 VoIP 中常用的控制协议(Control Protocol)有 H.323、SIP、 MEGACO和MGCP。其中SIP (会话发起协议)是建立VOIP 连接的IETF标准。为了方便用户之间的通信,需要设计一款 基于SIP协议的Android应用软件。
SIP协议的Android平台的通信软件开发可以进一步提高 人们间的通信质量,解决人与人之间由于远距离通信而产生高 昂话费的问题。
1需求分析
SIP软交换系统是一个支持SIP协议通信的服务器,分 为服务器和Android客户端两部分。服务器主要完成数据的 封包请求的转发,路由的寻址等,让用户从Android客户端 中发出的数字信息通过服务器的处理转发给另外一个客户机, 而另外一个Android客户机通过解析从服务器中收到的数据, 并把信号还原为原始数据,从而达到通信的目的。主要完成以 下服务:服务器启动,将服务器绑定到指定的IP地址上,客 户机连接这个IP地址上服务器,客户机通话等。
本系统是为了达到用户与用户间的通信,让用户能在不通过三大运营商的收费情况下,实现免费通话,从而降低了用户 的经济开销,并且通话不受任何限制,使用户之间畅所欲言。
SIP软交换系统由服务器和Android客户端组成: 服务器功能:数据的读取与解析,SIP版权认证,创建 SIP协议栈,绑定地址、定位、认证、能力,会话管理,数据 包的接收、解析、过滤、组装与应答,Proxy行为;
Android客户端功能:连接服务器,发送语音,接收数据, 解析数据。
本系统的整体功能结构图如图1所示。
2系统设计
2.1系统主要功能设计
数据(*xml)的读取与解析设计
在Proxy Server启动之前,需要预先对Proxy Server进 行设置,如SIP栈的名称、IP、端口、路由等参数的设置, 考虑到系统移植和维护的方便性,把这些信息写在配置文件 configuration.xml中,在系统启动的时候读取,以便于移植和 维护。
SIP版权认证设计
系统启动时,应对系统的版权进行验证,只有合法授权 的系统才能正确启动。主要认证最大用户数(Max),失效日期 (Expiration),系列号(Serial),网卡物理地址(Mac),密钥(Key),同样这些信息也写在了配置文件license.xml中。
创建SIP协议栈设计
栈是一种数据结构,只能在一端进行插入和删除的线性 表,按照后进先出的存取规则。创建SIP协议栈后,在接收 到一个以太网数据帧时,数据可以方便地从协议栈里面由底 部向顶部上升,同时报文首部在各层协议上被去掉,方便读取 报文数据。报文首部的协议标识在每层协议上都很方便检查, 这样就可确定数据接收的上层协议,同时按照事先规定好的 规则分析出需要的内容,例如数据包的源端口号、源IP、目 的IP等等。
注册、定位、认证、能力设计
Proxy Server启动以后,要获得代理的服务,必须先注册 成为Proxy Server的用户,用户信息存放在后台数据库中,包 含用户名、密码、服务器地址等。要对用户进行代理,必须能 定位用户位置,对用户身份进行认证,确认后把呼叫方和被 叫方的地址、媒体参数等提供给对方,以完成会话的创建。
会话管理设计
包括发送和终止会话、修改会话参数、激活服务等。
数据包的接收、解析、过滤、组装与应答
系统在收到以太网的数据包后,对数据包进行解析,过 滤掉“非法”数据包,获取“合法”的正常业务信息,组装数 据包进行交互。
Proxy行为设计
当Proxy Server收到一个请求时,在做代理之前,首先 应该判断自己是否需要响应该请求,是否非法或者没有可信任 证书需要认证,是应该按有状态还是无状态的方式处理。无 状态,即Proxy只是简单的转发到下一个Proxy Server,之后 该请求的相关资料就被丢弃。这些信息(特别是事务信息)会 被有状态的Proxy保留,所有接收到的请求和所有接收请求的 应答的相关信息被保留。这些被它保留的信息用于处理与这个 请求相关的后续消息。
Android连接服务器设计
当服务器注册到一个网络地址上时,客户端的Android 手机获取服务器绑定的IP地址,然后发送请求,若IP地址 无误,那么Android客户端顺利连接上服务器。
Android发送语音和接收语音消息设计
根据已经连接上SIP软交换系统的Android客户端,会 话终端向目标终端发起呼叫或者会话终端监听被叫,经服务器 验证注册,采用SIP协议实现语音通信。
2.2 Android内线呼叫运作模式设计
Android内线呼叫运作的具体流程如图2所示。关键步骤 分析如下:
F1 : INVITE是终端代理201@192.168.6.5作为主叫向代 理服务器192.168.6.180发送INVITE请求;
F2 : 407 Proxy Authentication Required 表示代理服务器 对主叫进行INVITE认证发出407请求码,认证成功;
F3 : ACK为回送ACK请求,表示已收到Proxy对 INVITE请求的最终响应;
F4 : INVITE为终端代理201@192.168.6.5作为主叫向代 理服务器192.168.6.180发送INVITE请求,邀请发起一路呼叫;
F5 : INVITE表示代理服务器192.168.6.180向终端代理 被叫202@192.168.6.3发送INVITE请求,邀请被叫发起一路 呼叫;
F6 : 100 Trying被叫Android终端向服务器发出呼叫处 理中的应答消息,100 Trying ;
F7 : 180 Ringing表示被叫Android终端振铃并向服务器 发出振铃消息,180 Ringing ;
F8 : 100 Trying表示服务器向主叫发出呼叫处理中的应 答消息,100 Trying;
F9 : 180 Ringing为服务器向主叫发出振铃消息,180 Ringing,主叫振铃;
F10和F11 : 200 OK表示主叫和被叫之间呼叫建立,发 出200 OK应答消息;
F12和F13 : ACK为呼叫建立的确认消息;
F14和F15 : BYE为结束请求;
F16和F17 : 200 OK表示主叫和被叫之间结束呼叫,发 出200 OK应答消息。
2.3 Android客户端设计
根据RFC 3261的定义,多媒体会话(Multimedia Session)是指一组多媒体发送者和接收者,以及从发送者到 接收者的数据流。Android客户端界面设计图如图3所示。
3数据库设计
3.1系统E-R图
本系统的实体有计算机SIP服务器、Android终端用户, 其E-R图如图4所示。
3.2数据表的结构
本系统一共使用了47张数据表,由于表与表之间的关 系太过于复杂,故这里只选出其中用到的2张表。其中t_ extension表主要是用来扩展电话机的电话号码。extension为 主键,如表1所列。
而留言表则主要是保存前表与表之间的关系。id_table_id 为主键。如表2所列。
4系统功能实现
要对Android进行过滤,难点不在采用什么样的方法去 过滤,而在于如何识别异常,这就需要系统在开发和数据解 析的时候严格遵循标准的协议,这样才能精确识别异常数据 包。
Android运行主界面
主页面主要用来显示输入电话号码的地址栏和连接SIP 服务器的IP地址。
SIP账户设置模块
SIP账户设置的列表页面主要是进行基本的通话设置与 起始连接SIP服务器的设置,用户有很多不同的选择。当点 击所选的SIP账户名称时,就会转到该设置的详细设置页面。 SIP账户设置的列表页面如图5所示。
SIP账户的详细设置主要有认证用户名称、密码、服务 器和域的设置与查看,让用户知道如何设置才能顺利连接上 服务器,以及连接使用的端口是多少,最重要的是还能查看 支持的VoIP类型。
4.3认证用户名模块
因为连接服务器的Android客户端可能有很多,所以必 须进行认证,只有认证合法了才能进行友好回话,否则不予以 连接,或者连接中断。用户可进行多种选择。该页面如图6所示。
4.4 Wi-Fi 模块
Wi-Fi模块的列表页面可列出当前能够使用的各个网络 的连接方式名称,用户可从中进行选择。当点击所选的连接网 络方式名称时,就会转到该详细页面。该页面如图7所示。
在Wi-Fi模块详细页面主要设置如何使用Android手机 连接SIP服务器,同时还提供优先拨打功能。该设置信息一 目了然。该页面如图8所示。
这样设置完成后,就可以拨打电话,然后通话了。
5结语
本文从Android手机出发,针对SIP软交换系统的原 理,在Android手机上进行合理的设置与开发,实现了基于 Android的SIP软交换系统。同时通过对SIP软交换系统的 扩展,使其在Android客户端上也能使用,最终在一定程度 上实现了对系统的改良。