一种嵌入式sip服务器的制作方法

文档序号:7888128阅读:214来源:国知局
专利名称:一种嵌入式sip服务器的制作方法
技术领域
本发明涉及嵌入式SIPGession Initiation Protocol,会话初始协议)服务器, 尤其涉及实现嵌入式SIP服务器所需的一种轻型的嵌入式SIP协议栈。
背景技术
SIP是一个应用层的控制协议,用来建立、修改和终止多媒体会话或者会议。SIP 因其简单、灵活、可扩展强等特点,已然成为实现VoIP系统的热点技术。SIP采用的是客户/服务器(C/S)控制方式。SIP服务器处于SIP网络的中间位置,负责接收用户的注册,SIP数据包的路由转发以及位置信息的重定向。按照逻辑功能区分,SIP系统由4种元素组成用户代理(User Agent,UA),代理服务器(Proxy krver),重定向服务器(Redirection krver),注册服务器(Register Server)0用户代理代表SIP终端系统,是用来和用户交互的SIP实体。UA分为两个部分用户代理客户端(User Agent Client, UAC)和用户代理服务器(User Agent Server, UAS)。 呼叫控制请求发出方称为UAC,请求接收和处理方称为UAS。由于UA可能发出呼叫,又可能接收呼叫,所以一个UA应该包含一个UAC程序和一个UAS程序。代理服务器同时具有服务器和客户机的功能,它不仅接收SIP消息,还能把消息转发到下一个SIP服务器。代理服务器具有履行验证、授权、网络访问控制和路由等功能, 在转发请求消息前,代理服务器可以修改消息的部分内容。重定向服务器提供下一跳的地址给用户,它映射请求地址到零个或多个实际地址。重定向服务器不接收或终止呼叫,不初始化自己的SIP请求,也不产生SIP响应来定位其它实体。注册服务器接收用户的注册请求,它通过定位服务器维护用户的位置。注册服务器典型地与一个代理服务器或一个定向服务器位于同一台机器并提供定位服务,同时也支持验证。依据RFC3^1中定义的SIP协议栈模型,该协议栈分为四层底层为语法编码层, 该层的编码方式采用的是扩展的BNF范式(Backus-Naur Form的缩写,一种用于表示上下文无关文法的语言);第2层为传输层,该层定义网络上的某一客户机如何发送请求和接收响应,以及某一服务器如何接收请求和发送响应;第3层为事务层;最上层为事务用户层, 每个SIP实体,除了无状态代理,都是事务用户,当一个事务用户希望发送请求时,就创建一个客户机事务实例以发送请求。嵌入式SIP服务器是一种基于SIP协议的嵌入式SIP服务器,该服务器具有用户代理服务器功能、重定向服务器功能、注册服务器功能。嵌入式SIP服务器具有良好的可扩展性,可以扩展多种服务器,如认证服务器、计费服务器等。嵌入式系统具有专用性强、实时性好、可裁剪性好、可靠性高、功耗低等特点。SIP 服务器在嵌入式系统中实现,必须具有如上所述的特性。现有的方法主要是对开源的SIP 服务器进行分析,并依据特定嵌入式设备对其进行裁剪,然后将其移植到该嵌入式设备中。这种方法的特点在于需要依据特定的嵌入式设备对开源的SIP服务器进行特定的裁剪,裁剪后的SIP服务器很难做到最精简,这样会占用嵌入式设备有限的资源,另外裁剪后的SIP 服务器的扩展性差。

发明内容
本发明的目的是提供一种基于轻型的嵌入式SIP协议栈的嵌入式SIP服务器。本发明提出的轻型嵌入式SIP协议栈只考虑使用UDP^ser Datagram Protocol, 用户数据包协议)实现SIP消息的接收与发送。基于上述轻型嵌入式SIP协议栈,本发明所述的嵌入式SIP服务器包括 消息收发器,用于负责收发SIP消息,管理套接字和网络连接,以及SIP消息的初步解
析;消息收发器包括四个模块UDP模块、SIP消息接收模块、SIP消息发送模块和初步解析模块,其中
UDP模块采用面向无连接的传输协议UDP来建立消息收发器与网络层之间连接,SIP 消息接收模块用于接收完整的SIP消息,SIP消息发送模块用于发送完整的SIP消息,所述完整的SIP即RFC3261所规定的标准的SIP消息,
SIP消息的初步解析模块是所述消息收发器特定的模块,使用Orig_SIP_Message_ ParseO函数将SIP消息按照消息体名或头域进行初步解析,解析为相对应的字符串,并与该字符串建立一一对映的关系;
消息处理器,用于处理来自消息收发器和接口处理器SIP请求消息和SIP响应消息,包括两个模块语法检查模块和可靠性策略模块;
语法检查模块用于检查SIP请求消息和SIP响应消息的语法,可靠性策略模块用于对 SIP消息进行可靠性分析,保证SIP协议消息的可靠性,并为不同的SIP协议消息提供不同的可靠性策略;
接口处理器,包括两个模块消息构建模块和SIP消息完全解析模块,其中 消息构建模块,用于接收来自其他服务器的信息,并构建SIP消息或SDP消息, SIP消息完全解析模块,用于完全解析SIP请求消息或SIP响应消息,并向其他服务器发送。上述嵌入式SIP服务器接收SIP消息的过程,步骤描述如下 步骤1,所述消息收发器管理套接字和网络连接。步骤2,所述消息收发器监听UDP端口,即接收用户数据报所绑定的本地端口,接收UDP数据报,并获取SIP消息。步骤3,所述消息收发器对获取到的SIP消息进行初步解析。所述步骤3,所述消息收发器对获取到的SIP消息进行初步解析,即将所述获取到的SIP消息按照消息体名或头域进行初步解析,解析为相应的字符串,并与其建立一一对映的关系。(如,将INVITE初步解析为IN或I)。步骤4,所述消息处理器接收所述消息收发器初步解析过的SIP消息,并对该SIP 消息进行语法分析,检查SIP请求消息和SIP响应消息的语法。一个合法的SIP请求消息至少得包含以下六个头域To、From、Via、Cseq、Call-ID、Max-Forward。所述步骤4,所述六个头域是SIP消息的基本构成部分,这六个头域提供了消息的地址、响应的路由信息、详细的顺序、SIP事务全局标识以及消息的最大转发次数。步骤5,所述消息处理器对合法的SIP消息进行可靠性分析,并为不同的SIP消息提供不同的可靠性策略。步骤6,所述接口处理器创建SIP事务对象,并对SIP事务对象进行管理。步骤7,所述接口处理器为代理服务器、注册服务器、重定向服务器提供各种应用接口。步骤8,SIP服务器为SIP UA提供用户注册服务,用户代理服务,用户重定向服务。步骤81,所述用户注册服务是为SIP用户提供注册请求服务,并通过用户定位服务来维护该用户的位置;
步骤82,所述用户代理服务是为SIP用户提供服务器或客户机的服务,不仅接受SIP 消息,还能把消息转发到下一个SIP代理服务器。用户代理服务还应具有履行验证、授权、 网络访问控制和路由等功能;
步骤83,所述用户重定向服务是为SIP用户提供下一跳的位置给用户。所述用户重定向服务不提供接收或终止呼叫服务。步骤9,SIP服务器程序还提供了扩展功能,可以为SIP服务器提供中各种扩展功能(如认证服务器功能、计费服务器功能等)。上述嵌入式SIP服务器响应SIP消息的过程,步骤描述如下
步骤10,所述用户注册服务程序接收到所述接口处理器传送来的注册请求,并对注册请求回送响应消息。步骤11,所述用户代理服务程序接收到所述接口处理器传送来的SIP消息,并把该SIP消息转发到下一个SIP服务器。所述用户代理服务程序应具有履行验证、授权、网络访问控制和路由等功能。步骤12,所述用户重定向服务程序提供下一跳的地址给用户,它映射请求地址到零个或多个实际地址。步骤13,所述接口处理器接收到所述SIP服务器程序传送来的SIP消息,创建SIP 事务对象,并对SIP事务对象进行管理。步骤14,所述消息处理器接收所述消息收发器初步解析过的SIP消息,并对该SIP 消息进行语法分析,检查SIP请求消息和SIP响应消息的语法。一个合法的SIP请求消息至少得包含以下六个头域To、From、Via、Cseq、Call-ID、Max-Forward。步骤15,所述消息处理器对合法的SIP消息进行可靠性分析,并为不同的SIP消息提供不同的可靠性策略。步骤16,所述消息收发器接收到SIP消息,并通过UDP发送到网络层。本发明的有益效果在于,提出了一种轻型的嵌入式SIP协议栈,该协议栈对SIP消息进行两次解析,降低了 SIP消息在协议栈解析过程中所消耗的时间,提高了嵌入式设备的实时性。基于该协议栈而提出的一种嵌入式SIP服务器的实现方法,具有分层结构,而且具有很强的可扩展性。


图1嵌入式SIP协议栈模型6图2嵌入式SIP服务器框图; 图3嵌入式SIP服务器分层结构图。
具体实施例方式下面结合附图1和附图2,对本发明做进一步的详细描述。(以下所使用的函数, 说明见附录)
本发明提出了一种轻型的嵌入式SIP协议栈,并在此基础上提出一种基于SIP协议的嵌入式SIP服务器。嵌入式SIP协议栈是实现嵌入式SIP服务器的基础。嵌入式SIP协议栈由消息收发器、语法编码解析器、接口处理器三个部分组成。所述轻型的嵌入式SIP协议栈只考虑使用UDP实现SIP消息的接收与发送。消息收发器负责收发SIP消息,管理套接字和网络连接,以及SIP消息的初步解析,它是整个SIP协议栈与网络层的对外接口。该协议栈只考虑使用UDP实现收发消息的功能。消息收发器的实现包括四个模块UDP模块、SIP消息接收模块、SIP消息发送模块和SIP消息初步解析模块。UDP模块采用面向无连接的传输协议UDP来建立消息收发器与网络层之间连接, UDP模块使用Udp_ReC()函数和Udp_knd()函数向应用程序提供统一的消息收发接口。 Udp_Rec()函数用于接收网络层传来的UDP数据报并解析该UDP数据报,Udp_Send()函数用于将响应SIP消息封装UDP数据报并发送到网络层。SIP消息接收模块使用SIP_MeSSage_ReC ()函数来接收完整的SIP消息。SIP消息发送模块使用SIP_Message_knd()函数来发送完整的SIP消息。完整的SIP即RFC3^1 所规定的标准的SIP消息。SIP_Message_Rec ()函数用于接收来自Udp_ReC()函数发送来的SIP消息,SIP_Message_Send()函数用来向Udp_Send()函数发送服务器传送来的响应 SIP消息。初步解析模块是所述消息收发器特定的模块,使用Orig_SIP_MeSSage_ParSe() 函数将SIP消息按照消息体名或头域进行初步解析,解析为相对应的字符串,并与该字符串建立一一对映的关系。消息处理器处于嵌入式SIP协议栈的中间层,用于处理来自消息收发器和接口处理器SIP请求消息和SIP响应消息。消息处理器的实现主要包括两个模块语法检查模块和可靠性策略模块。语法检查模块使用 Msg_Request_Syntax_Check()函数和 Msg_Iteponse_Syntax_ CheckO函数用于检查SIP请求消息和SIP响应消息的语法。一个合法的SIP请求消息至少得包含以下六个头域To、From、Via、Cseq、Call-ID、Max-Forward。它们是SIP消息的基本构成部分,这六个头域提供了消息的地址、响应的路由信息、详细的顺序、SIP事务全局标识以及消息的最大转发次数。可靠性策略模块用以保证SIP协议消息的可靠性,并为不同的SIP协议消息提供不同的可靠性策略。主要分为两类,第一类是INVITE请求消息和ACK响应消息的可靠性策略;第二类是其他请求消息和响应消息的可靠性策略。然而根据TCP和UDP传输协议的不同,上述两类采用不同的的传输协议进行传输,其SIP消息的可靠性策略也不同。接口处理器处于嵌入式SIP协议栈的最上层,它是嵌入式SIP协议栈与应用层的对外接口,接口处理器的实现主要包括两个模块消息构建模块和SIP消息完全解析模块。消息构建模块主要用于构建SIP消息,该模块使用SIP_MeSSageJnit ()函数对 SIP消息进行初使化工作。SIP_MESSAGE结构体中包含了构建SIP消息所需的各种头域,并可以通过不同头域的set函数和get函数对其进行设置和读取。消息构建模块还可以用于构建SDP消息,该模块使用SDP_MeSSageJnit ()函数对 SDP消息进行初使化工作。SIP_MESSAGE结构体中包含了构建SDP消息所需的各种头域,并可以通过不同头域的set其进行设置。SIP消息完全解析模块用于完全解析SIP请求消息或SIP响应消息。若上层应用程序需要使用请求消息字符串集合或响应消息字符串集合中某一个或者几个头域的值时, 该模块使用MSg_FUll_ParSe()函数来实现对SIP消息的完全解析。嵌入式SIP服务器依据所述的嵌入式SIP协议栈提出了的分层结构。该嵌入式 SIP服务器共分为四层。下面结合附图3,对嵌入式SIP服务器的四层结构做进一步的详细描述。以下描述为嵌入式SIP服务器接收SIP消息的过程
(1)第一层,向第二层提供网络通信功能,并直接与网络层交互。第一层将SIP消息通过UDP模块发送出去,并将收到的UDP数据报经过该层传送到第二层。该嵌入式SIP服务器只考虑UDP传输方式。由于语法编码与解析会消耗大量的时间,所以在第一层置入次解析模块,用于初步解析SIP消息,以增强嵌入式实时性。第一层依据嵌入式SIP协议栈的消息收发器来实现,该层的实现包括四个模块 UDP模块、SIP消息接收模块、SIP消息发送模块和SIP消息初步解析模块。UDP模块使用 Udp_Conn ()函数网络层建立UDP连接,使用Udp_Rec ()函数接收网络层传送来的UDP数据报并解析该UDP数据报。SIP消息收发模块使用SIP_Message_Rec()函数接收来自Udp_ RecO函数发送来的完整的SIP消息。SIP消息初步解析模块使用Orig_SIP_Message_ Parse ()函数将SIP_MeSSage_ReC ()函数接收到的完整的SIP消息按照消息体名或头域进行初步解析,解析为相对应的字符串,并与该字符串建立一一对映的关系。(2)第二层,把第一层传上来的标准格式的SIP消息进行相应的语法检查和可靠性策略分析。第二层根据第三层的指示,采用指数衰减方式对SIP消息进行重传,以保证 SIP消息传输的可靠性。消息收发器使用语法检查模块中的使用MSg_RequeSt_SyntaX_CheCk()函数和 Nsg_Reponse_Syntax_Check ()函数用于检查SIP请求消息和SIP响应消息的语法。消息收发器使用可靠性策略模块用以保证SIP协议消息的可靠性,并为不同的SIP协议消息提供不同的可靠性策略。可靠性策略主要分为两类,第一类是INVITE请求消息和ACK响应消息的可靠性策略;第二类是其他请求消息和响应消息的可靠性策略。然而根据TCP和UDP传输协议的不同,上述两类采用不同的的传输协议进行传输,其SIP消息的可靠性策略也不同。(3)第三层,接口处理器处于嵌入式SIP协议栈的最上层,它是嵌入式SIP协议栈与应用层即其他服务器的对外接口。接口处理器需要使用请求消息字符串集合或响应消息字符串集合中某一个或者几个头域的值时使用MSg_FUll_ParSe()函数来实现对SIP消息的完全解析。(4)第四层,包含多种SIP服务器。注册服务器负责提供用户位置的登记功能。代理服务器模块同时具备客户方和服务器方的能力,负责对用户呼叫的代理;重定向服务器模块负责对用户呼叫的重定向;第四层还可以根据需要置入多种服务器(例如计费服务器和认证服务器)。以下描述为嵌入式SIP服务器接收SIP消息的过程
(1)第四层注册服务器负责处理REGISTER消息,为用户代理提供注册、登记功能。代理服务器同时具有服务器和客户机的功能,它不仅接受SIP消息,还能把SIP消息转发到下一个SIP服务器或者用户代理。重定向服务器负责对用户代理提供下一跳的地址。(2)第三层接口处理器消息构建模块使用SIP_MeSSageJnit ()函数对SIP消息进行初使化工作。SIP_MESSAGE结构体中包含了构建SIP消息所需的各种头域,并可以通过不同头域的set函数和get函数对其进行设置和读取消息构建模块使用SDP_MeSSage Jnit () 函数对SDP消息进行初使化工作。SIP_MESSAGE结构体中包含了构建SDP消息所需的各种头域,并可以通过不同头域的set其进行设置。(3)第二层消息处理器接收接口处理器传送来的SIP消息,消息收发器使用语法检查模块中的使用 Msg_Request_Syntax_Check()函数和 Msg_Iteponse_Syntax_Check ()函数用于检查SIP请求消息和SIP响应消息的语法。消息收发器使用可靠性策略模块用以保证SIP协议消息的可靠性,并为不同的SIP协议消息提供不同的可靠性策略。主要分为两类,第一类是INVITE请求消息和ACK响应消息的可靠性策略;第二类是其他请求消息和响应消息的可靠性策略。然而根据TCP和UDP传输协议的不同,上述两类采用不同的的传输协议进行传输,其SIP消息的可靠性策略也不同。(4)第一层直接与网络层交互,将SIP消息通过UDP模块发送出去。附录
Udp_Rec ()函数UDP接收函数,用于接收UdpRec ()函数用于接收网络层传来的UDP 数据报并解析该UDP数据报。Udp_Send()函数UDP发送函数,用于将响应SIP消息封装UDP数据报并发送到网络层。SIP_Message_Rec ()函数SIP消息接收函数,用于接收SIP消息。SIP_Message_Send()函数SIP消息发送函数,用于发送SIP消息。Orig_SIP_Message_Parse ()函数SIP消息初步解析函数,用于初步解析SIP消肩、οMsg_Request_Syntax_Check ()函数SIP请求消息语法检查函数,用于对SIP请求消息进行语法合法性检查。Msg_Reponse_Syntax_Check()函数SIP响应消息语法检查函数,用于对SIP响应消息进行语法合法性检查。SIP_Message_Init ()函数SIP消息初始化函数,用于初始化SIP消息。SDP_Message_Init ()函数SDP消息初始化函数,用于初始化SDP消息。Msg_ full ,Parse ()函数SIP消息完全解析函数,用于完全解析SIP消息。
权利要求
1. 一种嵌入式SIP服务器,包括消息收发器,用于负责收发SIP消息,管理套接字和网络连接、以及SIP消息的初步解析;消息收发器包括四个模块UDP模块、SIP消息接收模块、SIP消息发送模块和初步解析模块,其中UDP模块采用面向无连接的传输协议UDP来建立消息收发器与网络层之间连接,SIP 消息接收模块用于接收完整的SIP消息,SIP消息发送模块用于发送完整的SIP消息,所述完整的SIP即RFC3261所规定的标准的SIP消息,SIP消息的初步解析模块是所述消息收发器特定的模块,使用Orig_SIP_Message_ ParseO函数将SIP消息按照消息体名或头域进行初步解析,解析为相对应的字符串,并与该字符串建立一一对映的关系;消息处理器,用于处理来自消息收发器和接口处理器SIP请求消息和SIP响应消息,包括两个模块语法检查模块和可靠性策略模块;语法检查模块用于检查SIP请求消息和SIP响应消息的语法,可靠性策略模块用于对 SIP消息进行可靠性分析,保证SIP协议消息的可靠性,并为不同的SIP协议消息提供不同的可靠性策略;接口处理器,包括两个模块消息构建模块和SIP消息完全解析模块,其中 消息构建模块,用于接收来自其他服务器的信息,并构建SIP消息或SDP消息, SIP消息完全解析模块,用于完全解析SIP请求消息或SIP响应消息,并向其他服务器发送;上述嵌入式SIP服务器接收SIP消息的过程如下 步骤1,所述消息收发器管理套接字和网络连接;步骤2,所述消息收发器监听UDP端口,即接收用户数据报所绑定的本地端口,接收UDP 数据报,并获取SIP消息;步骤3,所述消息收发器对获取到的SIP消息进行初步解析,即将所述获取到的SIP 消息按照消息体名或头域进行初步解析,解析为相应的字符串,并与其建立一一对映的关系;步骤4,所述消息处理器接收所述消息收发器初步解析过的SIP消息,并对该SIP消息进行语法分析,检查SIP请求消息和SIP响应消息的语法,一个合法的SIP请求消息至少包含六个头域To、From、Via、Cseq、Call-ID、Max-Forward ;这六个头域提供了消息的地址、 响应的路由信息、详细的顺序、SIP事务全局标识以及消息的最大转发次数;步骤5,所述消息处理器对合法的SIP消息进行可靠性分析,并为不同的SIP消息提供不同的可靠性策略;步骤6,所述接口处理器创建SIP事务对象,并对SIP事务对象进行管理; 步骤7,所述接口处理器为其它服务器提供应用接口,其它服务器包括代理服务器、注册服务器、重定向服务器及扩展服务器;步骤8,为SIP UA提供用户注册服务,用户代理服务,用户重定向服务; 上述嵌入式SIP服务器响应SIP消息的过程如下步骤9,所述用户注册服务程序接收到所述接口处理器传送来的注册请求,并对注册请求回送响应消息;步骤10,所述用户代理服务程序接收到所述接口处理器传送来的SIP消息,并把该SIP 消息转发到下一个SIP服务器,所述用户代理服务程序应具有履行验证、授权、网络访问控制和路由的功能;步骤11,所述用户重定向服务程序提供下一跳的地址给用户,它映射请求地址到零个或多个实际地址;步骤12,所述接口处理器接收到所述SIP服务器程序传送来的SIP消息,创建SIP事务对象,并对SIP事务对象进行管理;步骤13,所述消息处理器接收所述消息收发器初步解析过的SIP消息,并对该SIP消息进行语法分析,检查SIP请求消息和SIP响应消息的语法,一个合法的SIP请求消息至少得包含以下六个头域To、From、Via、Cseq、Call-ID、Max-I7Orward ;步骤14,所述消息处理器对合法的SIP消息进行可靠性分析,并为不同的SIP消息提供不同的可靠性策略;步骤15,所述消息收发器接收到SIP消息,并通过UDP发送到网络层。
2.根据权利要求1所述的嵌入式SIP服务器,其特征是所述用户注册服务器是为SIP 用户提供注册请求服务,并通过用户定位服务来维护该用户的位置;所述用户代理服务器是为SIP用户提供服务器或客户机的服务,不仅接受SIP消息,还能把消息转发到下一个 SIP代理服务器;用户代理服务还应包括履行验证、授权、网络访问控制和路由功能;所述用户重定向服务器是为SIP用户提供下一跳的位置给用户,所述用户重定向服务不提供接收或终止呼叫服务。
3.根据权利要求1所述的嵌入式SIP服务器,其特征是所述扩展服务器,为SIP服务器提供各种扩展功能,包括认证服务器、计费服务器。
全文摘要
本发明提出了一种基于轻型的嵌入式SIP协议栈的嵌入式SIP服务器,该协议栈对SIP消息进行两次解析,降低了SIP消息在协议栈解析过程中所消耗的时间,提高了嵌入式设备的实时性。该嵌入式SIP服务器具有分层结构,而且具有很强的可扩展性。
文档编号H04L29/06GK102571805SQ201210019499
公开日2012年7月11日 申请日期2012年1月21日 优先权日2012年1月21日
发明者何晓飞, 刘达明, 康争光, 张 林, 蒋贵全, 龙昭华 申请人:重庆邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1