SIP超级终端处理规范.docx
- 文档编号:29437804
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:12
- 大小:334.19KB
SIP超级终端处理规范.docx
《SIP超级终端处理规范.docx》由会员分享,可在线阅读,更多相关《SIP超级终端处理规范.docx(12页珍藏版)》请在冰豆网上搜索。
SIP超级终端处理规范
更改记录
日期
修改页码
修改类型*
修改描述
修改人
版本
2007-8-9
-
A
创建文档
李强
1.0
*修改类型分为A-ADDEDM-MODIFIEDD–DELETED
1.系统综述
Sip超级终端为一个多用户的控制终端,维护每个用户的状态,完成用户注册,用户发送Sip控制信令,接收Sip信令,并做出响应。
每个Sip用户彼此独立,但使用同一个协议栈,同一套用户会话控制系统。
该系统接收voip代理服务器发送的控制信令(请参照《会话协议》制定的信令规范),对该信令做出相应处理,并返回响应结果。
2.系统框架结构设计
为了提高服务器程序的响应效率。
将服务器程序系统结构总体分为4层,VOIP传输层,协议控制处理层,对话处理层,SIP协议栈处理层。
每一层完成自己的控制动作,具体功能如下:
VOIP传输层:
主要接收VOIP代理服务器的发送的控制信令,并解析出该控制信令,进行协议的完整性检查。
将合法的控制协议打包,放入接收队列。
提取发送队列的发送数据,依据数据包提供的地址和端口信息,发送出去。
协议控制处理层:
提取发送队列的数据包,进行协议解析,转化为内部消息控制命令,建立该用户的一个信息单元,并建立地址端口和该用户的对应关系,接收该用户的后续请求,并将消息控制命令放入命令队列。
提取命令相应队列的命令,经过协议转化,放入发送队列,启动发送超时控制。
还有用户的管理功能,主要维护用户的状态信息,完成相应控制。
对话处理层:
会话控制单元,提取命令队列中的命令,完成一次控制操做。
将该层的回调处理消息放入消息响应队列,对话控制单元,提取SIP消息队列中的SIP消息,对其处理,状态机返回的结果放入SIP消息发送队列。
SIP协议栈处理层:
收到的数据经过SIP协议转换,放入SIP消息处理队列。
从SIP消息发送中提取SIP消息,发送到其指定的地址端口。
结构示意图:
该图表示程序被封为4层结构,每一层依据消息,用户自身的状态完成对消息的处理,并将处理结果发送给该层用户。
3.系统功能处理详细设计
根据系统分层设计,每一层完成相对独立的功能,通过层间接口,传递消息,下一层为上一层提供功能,上一层为下一层的用户,并可能包含对下一层的控制接口。
根据系统设计,各个功能的实现流程,相关系统核心类图的实现如下:
根据数据包的处理流向,结合具体的控制信令,详细说明每一层对控制信令的处理,以及该层完成的主要功能。
3.1VOIP传输层
处理流程如下:
1,该层收到数据包,对该数据包根据会话协议进行解析,并转化为内部处理的消息格式,放入上一层协议控制处理层的“接收队列”中。
对协议不规范的VOIP协议数据包自接丢弃。
并发送对该数据的响应数据包,表示已经收到,消息格式定义如下:
typedefstruct{
InfostylenInfoStyle;表示信息包是请求还是响应
intnSeg;表示消息序列编号
commandstyleeCommand;哪种命令
intnStatus;响应消息有效,表示当前的处理状态
intnDataLength;命令有效数据长度
voip*pData;有效数据指针
}Sessioncommand;
typedefstruct{
union{
sockaddrmSockaddr;
sockaddr_inm_anonv4;
}ipPort;//为数据包来源的地址和端口
SessioncommandsessCommand;//解析后的会话协议数据包
}voipMessage;
2,对于发送,从自己层的数据“发送队列”提取数据发送数据消息,根据其规定的发送目的地址和端口发送。
发送数据类为:
classToVoipMess
{
Private:
union{
sockaddrmSockaddr;
sockaddr_inm_anonv4;
}ipPort;//为数据包来源的地址和端口
Datadata;//表示发送数据的内容
};
该层主要完成数据的发送,接受,会话协议数据格式的解析,等功能,
3.2协议控制处理层
处理流程如下:
该层为整个系统得核心控制层,主要完成协议格式的内部转换为命令消息的处理,用户状态管理,发送超时控制等内容。
分为3个功能模块:
会话协议数据内部转化为下一层的控制命令,用户状态管理及超时控制,数据发送超时控制。
1,会话协议转换内部命令消息处理
该模块提取“接收队列”中的消息,依据处理规范转化为内部消息处理格式,如果是REGISTER命令,则生成一个voipUser单元。
该数据单元的结构如下:
ClassvoipUser
{
Private:
Uriuser;//表示为username@为用户名称
EnumregisterStateregistrState;//表示用户当前的注册状态
EnuminviteDialogStatedialogState;//表示当前用户的呼叫状态
ClientRegistrationHandleregisterHandle;//表示注册过程的回调函数句柄
ClientInviteSessionHandleclientInvteSessHandle;//表示呼叫者的回调函数句柄
ServerInviteSessionHandleserverInviteSessHanlde;//表示被叫方的回调函数句柄
InviteSessionHandleinviteSessHandle;//表示会话中回调函数句柄
union{
sockaddrmSockaddr;
sockaddr_inm_anonv4;
}ipPort;//为数据包来源的地址和端口
T_timeexpireTime;//表示到达超时时间值
EnumOnlineonlineState;//表示用户是否处于离线状态
};
Typedefunion{
sockaddrmSockaddr;
sockaddr_inm_anonv4;
}ipPort;
之后建立一个地址端口到这个用户单元的映射关系,表示为Map
如果找到由该地址端口对应得voipUser数据单元,并且是新用户,则表示已有用户已经与VOIP代理服务器连接断离,不需要维护其状态,需发送销毁已有用户的命令,并重新建立地址端口到新用户的映射关系。
如果没有找到对应的voipUser用户单元,就建立一个voipUser用户单元,并交给用户管理模块处理。
并将该消息转换为下一层的命令消息,放入“命令队列”。
对于Map
ClassDestroyVoipUserCommand
{
Private:
ipPortkey;//发送的目的地址
Uriuser;//表示要删除用户名,用来核对是否删除正确
}
对于voipUser*用户单元的删除,是收到用户管理单元发送的删除该用户数据单元命令,则删掉该voipUser*用户单元。
对于其他控制指令,响应状态指令,则在Map
2,用户状态管理单元
对于REGISTER指令,会建立用户URI到voipUser*的对应关系,表示为map ClassconSessCommand { Uriaor;//表示构成的域用户 Methodmethod;//表示执行操作的方法 EnumStatestate;//表示该命令的响应状态 ClientRegistrationHandleregisterHandle;//表示注册过程的回调函数句柄 ClientInviteSessionHandleclientInvteSessHandle;//表示呼叫者的回调函数句柄 ServerInviteSessionHandleserverInviteSessHanlde;//表示被叫方的回调函数句柄 InviteSessionHandleinviteSessHandle;//表示会话中回调函数句柄 Datareason;//表示该状态的文字说明 } 将该控制命令消息放入“命令队列”。 从“命令响应队列”中提取响应数据包,通过URI找到对应的voipUser单元,提取数据包相关内容,按照协议封装发送数据包,并放入“发送队列”。 命令响应数据包的格式如下: ClassconSessCallbackMessage { Private: SipMessagesiipMessage;//回调函数返回的sip消息 ClientRegistrationHandleregisterHandle;//表示注册过程的回调函数句柄 ClientInviteSessionHandleclientInvteSessHandle;//表示呼叫者的回调函数句柄 ServerInviteSessionHandleserverInviteSessHanlde;//表示被叫方的回调函数句柄 InviteSessionHandleinviteSessHandle;//表示会话中回调函数句柄 } 如果注册成功,则更改voipUser单元的注册项的状态为注册成功;如果注册失败,则发送删除消息给会话协议转换内部命令消息处理单元。 收到销毁用户voipuser数据单元的控制命令,首先会判断该用户出于通话状态,则发送BYE命令,等待回应,把刚才的销毁命令放入“命令响应队列”。 如果只是处于注册状态,则发送注销指令,等待回应,把刚才的销毁命令放入“命令响应队列”,如果已经销毁,则删除该用户单元。 用户注册是否活跃状态的处理,由于用户会间隔180秒发送一次注册信息,服务器更新一次voipUser数据单元的内容,如果超时时间到,发送用户离线控制命令。 3.发送超时控制 由于采用udp方式发送,对于发送的数据包要有确认,超时重发机制。 将发送数据报放入“发送队列”中,也会将该消息数据包封装为超时重发数据包放入超时队列,时间间隔为1,2,4,4,4秒,如果时间到,则重新把消息放入“发送队列”,所有时间用完,则销毁该超时消息,并发送用户离线控制命令。 收到该消息响应消息,则删除该超时控制消息。 本层所有消息应该有对应的消息控制处理部分,如果没有就销毁该消息。 3.3对话处理层 处理流程如下: 该层主要有两方面的功能,一方面,根据命令或状态做出相应控制动作。 另一方面,回调函数执行相应得控制动作。 所有的控制动作建立在dialongUserManager的基础上对SIP信令进行控制和状态处理。 1,命令和状态处理单元 从命令队列中提取命令消息,依据命令类型,执行相应得动作,如果状态玛生效,则调用回调函数句柄,执行相应得控制动作。 对于REGISTER,INVITE,会使用dailogUserManager来创建一个新对话,并且,对REGISTER的对话,要在用户注销后才销毁,对于INVITE的对话,在结束后就销毁。 对于UNREGISTER,BYE,返回的状态码,执行相应回调函数的超做。 2.回调函数执行单元 控制命令操做激发对SIP信令的控制,并通过其自身的回调函数返回响应状态,提取其sip信令构成回调消息,放入“命令响应队列”。 3.4SIP协议栈处理层 该层主要完成SIP信令的发送,接收,并对数据包解析等等。 对于3.3,3.4节的相关内容,以及处理流程可以查阅resiprocate相关文档。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SIP 超级 终端 处理 规范