sip服务器概要设计文件.docx
《sip服务器概要设计文件.docx》由会员分享,可在线阅读,更多相关《sip服务器概要设计文件.docx(46页珍藏版)》请在冰豆网上搜索。
sip服务器概要设计文件
目录
1引言2
1.1编写目的2
1.2背景2
1.3范围3
1.4文档约定3
1.5参考资料3
2总体设计3
2.1软件描述3
2.2设计约束3
2.2.1运行环境约束3
2.2.2性能约束3
2.2.3功能约束3
2.2.4界面约束3
2.2.5开发工具约束3
2.3设计原则3
2.4体系构架4
2.4.1逻辑视图4
3模块设计5
3.1Main模块5
3.1.1功能结构5
3.1.2性能5
3.1.3内部接口5
3.2RegManagement模块5
3.2.1功能结构5
3.2.2性能8
3.2.3内部registar所实现的接口8
3.2.4内部SipServerAuthManager继承覆盖的接口10
3.3SubManagement模块10
3.3.1功能结构10
3.3.2性能12
3.3.3内部Subscription继承覆盖的接口12
3.4PubManagement模块14
3.4.1功能结构14
3.4.2内部Publication继承覆盖的接口15
3.5SingleTargetProxy代理模块17
3.5.1功能结构17
3.5.2性能18
3.5.3内部SingleTargetProxy类提供的接口属性19
3.5.4内部RequestContext类提供的接口属性20
3.5.5内部ResponseContext类提供的接口属性21
3.6MulTargetsProxy模块21
3.6.1功能结构21
3.6.2性能21
3.6.3内部MulTargetsProxy提供的接口21
3.7OfflineMsgProxy模块21
3.7.1功能结构21
3.7.2性能22
3.7.3内部OfflineMsgProxy提供的接口22
3.8DBAccessor模块22
3.8.1功能结构22
3.8.2性能23
3.8.3内部DBAccessor提供的接口23
3.9Store模块23
3.9.1功能结构23
3.9.2性能24
3.9.3内部Store提供的接口24
3.10ParameterParser模块25
3.10.1功能结构25
3.10.2使用策略26
3.10.3性能26
3.10.4内部接口26
3.11Heartbeat模块29
3.11.1功能结构29
4数据结构设计29
5运行设计30
5.1运行模块的组合30
5.2运行控制操作30
6故障处理说明30
6.1故障信息30
6.2补救措施30
7安全保密设计30
8维护设计30
9需求追溯30
10附录A:
术语表30
11附录B:
分析模型30
引言
编写目的
本文档描述《企业即时通讯系统》的SipServer的概要设计说明书。
背景
产品/项目名称
企业即时通讯系统
项目代号
项目任务提出者
项目负责人、系统分析员、系统设计员
程序设计员、程序员
本项目开展工作直接有关的人员
范围
本文档涉及SipServer的总体设计、模块设计、运行设计、安全设计等。
文档约定
本文档依照以下文件标准进行编写:
1)概要设计说明书模板(xxxxBRDS.Doc)
参考资料
1)即时通讯系统软件构架文档II.doc
2)Resiprocate体系架构
3)Sip协议――RFC3261
4)spmp_interface.doc
总体设计
软件描述
设计约束
运行环境约束
SipServer运行于Linux环境下:
CPU:
双CPU,IntelPIII以上
内存:
1GB以上
硬盘:
100G以上
网络接口卡:
100M以上
操作系统:
Linux(内核版本2.4.18以上)
性能约束
支持7x24小时可靠运行;
支持10000并发用户,消息转发吞吐量在1000条SIP消息/秒以上。
功能约束
支持RFC3261协议。
支持DigestAuthenticate。
支持通过SPMP访问配置服务器。
界面约束
SipServer的启动只支持命令行方式的启动,各种配置选项在命令行中设定或通过配置文件进行解析。
开发工具约束
Windows上使用Visualstadio2005进行编码编译,Linux上使用g++进行编译。
设计原则
可靠性:
SipServer提供7x24小时可靠运行。
安全性:
SipServer支持DigestAuthenticate和权限检查。
可扩展性:
服务器可方便快捷的添加其它功能处理,如对呼叫Invite的处理等。
单台SipServer服务器0~10000个注册用户间进行扩展。
体系构架
逻辑视图
图1SipServer模块结构图
SipServer主要由上图中的模块组成,其中:
ØMain模块是SipServer的启动模块,它是SipServer进程启动的入口,并且负责其它模块的初始化和启动。
ØParameterParser模块负责SipServer配置选项的解析和访问,在程序初始化过程中,它解析系统的相关配置选安全信息、域信任列表、域内所有用户的订阅限额项(通过配置文件和命令行选项),系统运行过程中其它模块通过它获取相关的配置参数。
ØRegManagement模块基于dum框架接口开发,用于户登录注册,负责对用户进行身份认证以及进行权限检查,认证通过后在在缓存中保存用户的登录注册后的相关信息如用户登录所用的TCP链接的IP地址和端口号。
ØSubManagement模块基于dum框架接口开发,用于登录注册后的用户对某种事件类型进行订阅,如其它客户在线状态事件的订阅。
ØPubManagerment模块基于dum框架接口开发,用于登录注册后的用户对自身某种事件信息进行发布,如其自身在线状态事件的发布。
ØSingleTargetProxy代理模块,主要用于处理page模式下的message消息和session模式下的Invite消息的转发,以及这些消息相应的响应消息的转发。
ØMulTargetsProxy代理模块,主要用于处理message等群发消息,模块设计结构和处理逻辑和SingleTargetProxy大致相同。
ØStore模块在内存中缓存用户的安全信息、域信任列表。
减少和配置服务器交互的次数,它依赖于psLib模块实现缓存内容和配置服务器保存内容一致。
注:
域内所有用户的订阅限额(每个人的订阅限额是相同的,只需要域向配置服务器订阅一次即可)这部分信息暂时在配置参数中进行设置,从ParameterParser模块中获取。
ØHeartBeat模块负责检测配置服务器的运行状况,它依赖于PSLIB的实现。
ØpsLib模块是SPMP协议的客户端实现部分,它负责对配置服务器所维护数据的访问(订阅安全信息、域信任列表、域内所有用户的订阅限额),外部模块。
ØOfflineMsgProxy模块负责离线消息的接收、存储,以及当离线消息的目标用户登录时想目标用户发送离线消息。
ØDBAccessor模块负责向数据库中插入数据,从数据库中获取数据等等相关的数据库操作。
目前sip服务器使用的数据库是嵌入式mysql数据库。
每个单台的sip服务器有一个嵌入式的mysql数据库。
模块设计
Main模块
功能结构
Main模块是SipServer的启动模块,主要包含main()函数,该函数作为SipServer进程启动时的入口点,并负责其它相关模块的初始化工作。
Main模块的初始化工作包括:
Ø初始化ParameterParser对象,以便系统中的其它模块获取SipServer的相关配置数据;
Ø初始化psLib模块(通过SPMP访问ProvisionServer的客户端);
Ø初始化HeartBeat模块并且启动之;
Ø初始化resiprocatestack;
Ø初始化dum框架,向dum注册registar、Subscription、Publication;
Ø初始化SingleTargetProxy、MulTargetsProxyCluster;
Ø启动SipStack线程、dum线程、SingleTargetProxy线程、MulTargetsProxyCluster线程。
性能
无。
内部接口
无。
RegManagement模块
功能结构
RegManagement模块负责用户的登录注册。
它具体负责对登录注册用户进行身份认证,以及本地登录注册用户在内存中的管理(添加、查找、更改和删除功能),给其它模块如SingleTargetProxy对目标用户进行定位。
图2RegManagement模块类结构图
其中:
ØRegistrar类是上层SipServer的具体应用,是对抽象接口ServerRegistrationHandler的具体实现,由ServerRegistration对其实现方法进行回调,由上层sipserver来实现。
ØServerRegistrationHandler是DUM提供给上层应用的抽象接口。
ØRegistrationPersistenceManager是DUM提供的注册存储的抽象接口。
ØInMemoryRegistrationDatabase是上层SipServer的具体应用对抽象接口RegistrationPersistenceManager的具体实现,由上层sipserver来实现。
ØServerAuthManager是DUM提供的抽象接口用于获取用户的安全信息。
ØSipServerAuthManager是上层SipServer的具体应用对抽象接口ServerAuthManager的具体实现,由上层sipserver来实现。
ØUserStore是上层SipServer的应用类用于在缓存中存储用户的相关信息如安全信息等。
ØServerRegistration是DUM提供注册的真正的实现类,对Registrar实现的方法进行回调,同时Registrar又通过ServerRegistration的句柄ServerRegistrationHandle对ServerRegistration中的方法进行操作。
注:
DUM中大量应用了Handle习惯用法。
Handle的定义与SharedPtr<>的定义类似,但Handle的主要目的是分离接口与实现。
分离的关键在于,“对类定义的依赖”被“对类声明的依赖”取代了。
这一思想直接深化后的含义:
1、如果可以使用对象的引用和指针,就要避免使用对象本身。
定义某个类型的引用和指针只会涉及到这个类型的声明。
定义此类型的对象则需要类型定义的参与;2、尽可能使用类的声明,而不使用类的定义。
因为在声明一个函数时,如果用到某个类,是绝对不需要这个类的定义的,即使函数是通过传值来传递和返回这个类。
DUM使用Handle习惯用法来避免向应用层暴露DUM的内部实现。
图3处理带认证的Register消息认证处理时序图
图4Register消息的注册处理时序图
性能
要求注册的认证相对其它模块的性能要高,优先处理用户的注册认证消息。
内部registar所实现的接口
(1)voidonRefresh(resip:
:
ServerRegistrationHandle,
constresip:
:
SipMessage®);
[功能简介]
用户注册刷新时由ServerRegistration进行回调处理上层sipserver的需求。
[参数描述]
ServerRegistrationHandle操作ServerRegistration的接口句柄;
reg收到的register类型消息。
[返回值]
无
(2)voidonRemove(resip:
:
ServerRegistrationHandle,
constresip:
:
SipMessage®);
[功能简介]
用户注销时时由ServerRegistration进行回调处理上层sipserver的需求。
[参数描述]
ServerRegistrationHandle操作ServerRegistration的接口句柄;
reg收到的register类型消息(expire=0)。
[返回值]
无
(3)voidonRemoveAll(resip:
:
ServerRegistrationHandle,
constresip:
:
SipMessage®);
[功能简介]
ServerRegistration删除所有注册用户时由ServerRegistration进行回调处理上层sipserver的需求。
[参数描述]
ServerRegistrationHandle操作ServerRegistration的接口句柄;
reg收到的SipMessage类型消息(这个接口暂时用不到,reg的类型结构也不太明确)。
[返回值]
无
(4)voidonAdd(resip:
:
ServerRegistrationHandle,
constresip:
:
SipMessage®);
[功能简介]
一个用户新注册的用户注册时由ServerRegistration进行回调处理上层sipserver的需求。
[参数描述]
ServerRegistrationHandle操作ServerRegistration的接口句柄;
reg收到的register类型消息。
[返回值]
无
(5)voidonQuery(resip:
:
ServerRegistrationHandle,
constresip:
:
SipMessage®);
[功能简介]
当一个用户查询当前注册用户列表时由ServerRegistration进行回调处理上层sipserver的需求。
[参数描述]
ServerRegistrationHandle操作ServerRegistration的接口句柄;
reg收到的SipMessage类型消息(这个接口暂时用不到,reg的类型结构也不太明确)。
[返回值]
无;
内部SipServerAuthManager继承覆盖的接口
(1)voidrequestCredential(constresip:
:
Data&user,
constresip:
:
Data&realm,
constresip:
:
SipMessage&msg,
constresip:
:
Auth&auth,
constresip:
:
Data&transactionId);
[功能简介]
对客户的挑战ahth进行鉴别,对这个接口的调用最好为异步的,可以生成一个有关用户信息的一个ApplicationMessage应用message,post到一个事务用户如dum继续后续处理。
[参数描述]
user需要认证的用户名;
realm需要认证的用户所在的域;
msg收到的需要认证的sip消息;
transactionId收到的msg消息的事务ID;
auth是服务器从收到的msg消息中解析出的Proxy-Authorization字段的内容。
[返回值]
无
(2)booluseAuthInt()const
[功能简介]
判断是否需要对用户进行认证
[参数描述]
无;
[返回值]
是返回true,否返回false
(3)virtualboolrequiresChallenge(constresip:
:
SipMessage&msg);
[功能简介]
判断是收到的msg消息是否需要挑战信息。
[参数描述]
msg收到的sip消息;
[返回值]
是返回true,否返回false
SubManagement模块
功能结构
SubManagerment模块基于dum框架接口开发,用于登录注册后的用户对某种事件类型进行订阅,如其它客户在线状态的订阅。
图5SubManagement模块类结构图
其中:
ØSubscription是类是上层SipServer的具体应用,是对抽象接口ServerSubscriptionHandler的具体实现,由ServerSubscription对其实现方法进行回调,由上层sipserver来实现。
ØServerSubscriptionHandler是DUM提供给上层应用的抽象接口。
ØServerSubscription是DUM提供订阅的真正实现类,对Subscription实现的方法进行回调,同时Subscription又通过ServerSubscription的句柄ServerSubscriptionHandle对ServerSubscription中的方法进行操作。
图6一个新订阅的Subscription消息的处理时序图
性能
无。
内部Subscription继承覆盖的接口
(1)voidonNewSubscription(resip:
:
ServerSubscriptionHandle,
constresip:
:
SipMessage&sub);
[功能简介]
当一个新的订阅到来,由ServerSubscription进行回调处理上层sipserver的需求。
[参数描述]
ServerSubscriptionHandle操作ServerSubscription的接口句柄;
sub收到的Subscription类型消息;
[返回值]
无
(2)voidonRefresh(resip:
:
ServerSubscriptionHandle,
constresip:
:
SipMessage&sub);
[功能简介]
当一个订阅的刷新到来,由ServerSubscription进行回调处理上层sipserver的需求。
[参数描述]
ServerSubscriptionHandle操作ServerSubscription的接口句柄;
sub收到的Subscription类型消息;
[返回值]
(3)voidonPublished(resip:
:
ServerSubscriptionHandleassociated,
resip:
:
ServerPublicationHandlepublication,
constresip:
:
Contents*contents,
constresip:
:
SecurityAttributes*attrs);
[功能简介]
当被订阅者的状态发送变化时由ServerSubscription进行回调处理上层sipserver的需求。
[参数描述]
associated操作ServerSubscription的接口句柄;
publication操作ServerPublication的接口句柄;
contents存储body内容的实体,保存被订阅者的状态发送变化的内容。
attrs消息的安全属性,如是否进行了加密等等;
[返回值]
无
(4)voidonError(resip:
:
ServerSubscriptionHandle,
constresip:
:
SipMessage&sub);
[功能简介]
当某种原因发送错误时由ServerSubscription进行回调处理上层sipserver的需求。
[参数描述]
ServerSubscriptionHandle操作ServerSubscription的接口句柄;
sub收到的Subscription类型消息;
[返回值]
无
(5)voidonTerminated(resip:
:
ServerSubscriptionHandle);
[功能简介]
当用户的订阅用例因某种原因被destory终止时由ServerSubscription进行回调处理上层sipserver的需求。
[参数描述]
ServerSubscriptionHandle操作ServerSubscription的接口句柄;
[返回值]
无
(6)voidonExpiredByClient(resip:
:
ServerSubscriptionHandle,
constresip:
:
SipMessage&sub,
resip:
:
SipMessage¬ify);
[功能简介]
当用户注销一个订阅由ServerSubscription进行回调处理上层sipserver的需求。
[参数描述]
ServerSubscriptionHandle操作ServerSubscription的接口句柄;
sub收到的Subscription类型消息;
notify用于生成的通知处理消息;
[返回值]
无
PubManagement模块
功能结构
PubManagement模块基于dum框架接口开发,用于登录注册后的用户对自身某种事件信息进行发布,如其自身在线状态的发布
图7PubManagement模块类结构图
其中:
ØPublication是上层SipServer对ServerPublicationHandler抽象接口的具体实现,由ServerPublication对其实现方法进行回调,由上层sipserver来实现。
ØServerPublicationHandler类是是DUM框架提供的抽象接口。
ØServerPublication是DUM提供发布事件的真正实现类对Publication实现的方法进行回调,同时Publication又通过ServerPublication的句柄ServerPublicationHandle对ServerPublication中的方法进行操作。
图8一个新发布的publish消息处理时序图
内部Publication继承覆盖的接口
(1)voidonInitial(resip:
:
ServerPublicationHandle,
constresip:
:
Data&etag,
constresip:
:
SipMessage&pub,
constresip:
:
Contents*contents,
constresip:
:
SecurityAttributes*attrs,
UInt32expires);
[功能简介]
当用户第一次发布一个事件时,由ServerPublication进行回调处理上层sipserver的需求。
[参数描述]
ServerPublicationHandle操作ServerPublication的接口句柄;
pub收到的publish类型消息;
etag对应标识收到的publish的一个随机字符串,etag和publish是一一对应关系;