CN103516723B - Sip消息处理方法与装置 - Google Patents
Sip消息处理方法与装置 Download PDFInfo
- Publication number
- CN103516723B CN103516723B CN201310432824.1A CN201310432824A CN103516723B CN 103516723 B CN103516723 B CN 103516723B CN 201310432824 A CN201310432824 A CN 201310432824A CN 103516723 B CN103516723 B CN 103516723B
- Authority
- CN
- China
- Prior art keywords
- sip
- request messages
- notification request
- client
- messages
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Telephonic Communication Services (AREA)
Abstract
本发明提供了一种SIP消息处理方法与装置,其中,SIP消息基于UDP进行网络传输,所述方法包括:状态呈现Presence服务器接收到客户端和/或中间网元返回的SIP错误响应消息;确定所述客户端和/或中间网元接收所述SIP通知请求消息产生乱序,其中,所述SIP通知请求消息中携带有所述客户端订阅的Presence实体状态更新信息;更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息;其中,所述SIP错误响应消息中携带有发生错误的SIP通知请求消息的序号。通过本发明,避免了订阅的状态通知失败。
Description
技术领域
本发明涉及通信技术领域,特别是涉及一种基于UDP(User Data Protocol,用户数据报协议)网络传输的SIP(Session Initiation Protocol,会话初始协议)消息处理方法与装置。
背景技术
Presence(状态呈现)业务是多媒体会议、即时消息等网络应用中的一项重要业务,它允许用户发布自己的Presence信息,允许一个用户查询另一个用户的Presence信息,或者通过订阅另一个用户的Presence信息而被通知订阅信息的改变。其中,用户的Presence信息可以包括用户的通信意愿、用户的通信手段、用户的场所、其他描述信息等,除此之外还包括一些设备信息,例如用户是否在线等。而SIP协议是一个用于建立、更改和终止多媒体会话或呼叫的应用层协议,在Presence业务的实现过程中,SIP协议可以很好地作为一种Presence协议来实现Presence业务。
Presence业务实现过程中,Presentity作为发布Presence信息的实体,Watcher作为获取Presence信息的实体,可以是一个用户,也可以是一些设备。Watcher订阅它所关心的Presentity的状态信息(通过SIP subscribe消息即SIP订阅消息向Presence服务器发起订阅请求),当Presentity信息发生变化时,Presence服务器将通过SIP notify消息即SIP通知消息将变化信息通知给Presentity。该SIP notify消息中携带有SIP CSeq值,以指示消息序号。SIP请求中的Cseq头域包含了一个单个的数字序列号(即CSeq值)和请求的方法,这个序列号必须是表示成为一个32位的无符号整数。Cseq头域是为了在会话中对事务进行排序的,提供事务的唯一标志,如果序列号相等,并且请求的方法相等,那么两个Cseq头域就是相等的。在一个会话过程中,客户端接收服务端的请求消息的Cseq值必须为递增的,如果当前接收到消息的Cseq值小于之前接收的请求消息对应的Cseq值,客户端将丢弃此消息。
一种因Cseq值乱序导致的多用户状态变化通知失败流程如图1所示,图1中,具有Presence实体即Presentity1和Presentity2、Presence服务器和、客户端Watcher。该流程包括:步骤S102,Watcher向Presence服务器发起订阅请求,订阅Presentity1与Presentity1状态信息;步骤S104,Presence服务器接收Watcher订阅请求,返回200OK成功响应;步骤S106,Presence服务器向Watcher发送notify请求消息;步骤S108,Watcher向Presence服务器返回notify请求200OK成功响应;步骤S110,Presentity1状态更新,向Presence服务器发送publish请求消息;步骤S112,Presence服务器向Ppresentity1返回publish200OK成功响应;步骤S114,Presentity2状态更新,向Presence服务器发送publish请求消息;步骤S116,Presence服务器向Presentity2返回publish200OK成功响应;步骤S118,Presence服务器向Watcher发送notify请求消息,通知其订阅Presentity1状态更新(其中,notify对应的cseq值为n);步骤S120,Presence服务器向Watcher发送notify请求消息,通知其订阅Presentity2状态更新(其中,notify对应的cseq值为n+1);步骤S122,notify消息(对应cseq值为n+1)经由网络传输到达Watcher;步骤S124,Watcher接收notify请求消息,返回200OK成功响应;步骤S126,Presence服务器向Watcher发送notify请求消息,通知其订阅Presentity1状态更新(notify对应的cseq值为n),此处请求发送的顺序为:Presence服务器先发送cseq值为n的notify请求消息,但由于网络中传输问题,导致到Watcher时,消息乱序,cseq值为n+1的notify请求消息先到,cseq值为n的notify请求消息后到;步骤S128,Watcher接收notify请求消息,判断该消息对应的cseq值小于前一消息对应的cseq值,向Presence服务器返回500错误响应,丢弃cseq值为n的notify请求消息。
可见,目前的Presence业务订阅通知机制,当订阅者订阅的用户状态同时变化时(如多个用户同时注册上线),Presence服务器将向订阅者发送notify通知消息,消息在基于UDP的网络传输过程中,将会出现notify消息在网络中传输乱序的情形,订阅者客户端接收到乱序的消息后,将丢弃该消息,从而导致订阅者订阅的状态通知失败。
发明内容
本发明提供了一种基于UDP网络传输的SIP消息处理方法与装置,以解决现有Presence业务订阅通知机制,当出现通知请求消息如notify消息在网络中传输乱序时,客户端丢弃该消息,从而导致订阅的状态通知失败的问题。
为了解决上述问题,本发明公开了一种会话初始协议SIP消息处理方法,所述SIP消息基于用户数据报协议UDP进行网络传输,所述方法包括:状态呈现Presence服务器接收到客户端和/或中间网元返回的SIP错误响应消息,其中,所述SIP错误响应消息中携带有发生错误的SIP通知请求消息的序号;确定所述客户端和/或中间网元接收所述SIP通知请求消息产生乱序;更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息;其中,所述SIP通知请求消息中携带有所述客户端订阅的Presence实体状态更新信息。
优选地,所述Presence服务器接收到的所述SIP错误响应消息为指示客户端错误、或请求包含无效语法、或服务器不能接受该请求的类型的SIP错误响应消息。
优选地,所述SIP错误响应消息中携带的发生错误的所述SIP通知请求消息的序号为所述SIP通知请求消息的Cseq值;所述确定所述客户端和/或中间网元接收所述SIP通知请求消息产生乱序的步骤包括:所述Presence服务器根据所述SIP错误响应消息中携带的所述SIP通知请求消息的Cseq值,确定所述客户端和/或中间网元接收的所述SIP通知请求消息的Cseq值小于所述客户端和/或中间网元在接收所述SIP通知请求消息前接收的、其它SIP通知请求消息的Cseq值。
优选地,所述更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息的步骤包括:所述Presence服务器按照Cseq值生成规则生成新的Cseq值,并用所述新的Cseq值替换保存的所述SIP通知请求消息中的Cseq值,重新生成所述SIP通知请求消息。
优选地,在所述更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息的步骤之前,还包括:所述Presence服务器根据应用层在发送与所述SIP错误响应消息对应的SIP通知请求消息时的指示,确定是否向所述客户端和/或中间网元重新发送所述SIP通知请求消息;若确定重新发送,则执行所述更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息的步骤;若确定不重新发送,则丢弃所述SIP通知请求消息。
优选地,在所述Presence服务器接收到客户端和/或中间网元返回的SIP错误响应消息的步骤之前,还包括:所述客户端和/或中间网元接收到所述Presence服务器发送的所述SIP通知请求消息;所述客户端和/或中间网元判断所述SIP通知请求消息的序号小于之前接受的其它SIP通知请求消息的序号,向所述Presence服务器发送所述SIP错误响应消息,其中,所述SIP错误响应消息为指示客户端错误、或请求包含无效语法、或服务器不能接受该请求的类型的SIP错误响应消息。
为了解决上述问题,本发明还公开了一种会话初始协议SIP消息处理装置,所述SIP消息基于用户数据报协议UDP进行网络传输,所述装置包括:第一接收模块,用于接收客户端和/或中间网元返回的SIP错误响应消息,其中,所述SIP错误响应消息中携带有发生错误的SIP通知请求消息的序号;确定模块,用于确定所述客户端和/或中间网元接收所述SIP通知请求消息产生乱序;重传模块,用于更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息;其中,所述SIP通知请求消息中携带有所述客户端订阅的Presence实体状态更新信息。
优选地,所述第一接收模块接收到的所述SIP错误响应消息为指示客户端错误、或请求包含无效语法、或服务器不能接受该请求的类型的SIP错误响应消息。
优选地,所述重传模块在更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息时:按照Cseq值生成规则生成新的Cseq值,并用所述新的Cseq值替换保存的所述SIP通知请求消息中的Cseq值,重新生成所述SIP通知请求消息。
优选地,所述SIP消息处理装置还包括:判断模块,用于在所述重传模块更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息之前,根据应用层在发送与所述SIP错误响应消息对应的SIP通知请求消息时的指示,确定是否向所述客户端和/或中间网元重新发送所述SIP通知请求消息;若确定重新发送,则执行所述重传模块;若确定不重新发送,则丢弃所述SIP通知请求消息。
与现有技术相比,本发明具有以下优点:
本发明针对基于UDP进行网络传输的Presence业务,因为UDP是非可靠的网络传输协议,因而造成现有Presence业务中会出现通知请求消息如notify消息在网络中传输乱序,进而造成客户端丢弃该通知请求消息,导致订阅的状态通知失败。而本发明中,当出现Presence业务的通知请求消息如notify消息在网络中传输乱序时,接收该通知请求消息的客户端和/或中间网元会向Presence服务器发送相应的SIP错误响应消息,Presence服务器根据该错误响应消息更新发生乱序的SIP通知请求消息序号,重新生成与之前消息内容相同的SIP通知请求消息,再次向客户端和/或中间网元发送。SIP通知请求消息序号纠正了之前的乱序,使得客户端和/或中间网元能够再次接收到出现错误的SIP通知请求消息,避免了订阅的状态通知失败。
附图说明
图1是现有技术的一种因Cseq值乱序导致的多用户状态变化通知失败流程图;
图2是根据本发明实施例一的一种SIP消息处理方法的步骤流程图;
图3是根据本发明实施例二的一种SIP消息处理方法的步骤流程图;
图4是根据本发明实施例三的一种SIP消息处理方法的流程图;
图5是根据本发明实施例四的一种SIP消息处理方法的流程图;
图6是根据本发明实施例五的一种SIP消息处理方法的流程图;
图7是根据本发明实施例六的一种SIP消息处理方法的流程图;
图8是根据本发明实施例七的一种SIP消息处理方法的流程图;
图9是根据本发明实施例八的一种SIP消息处理装置的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
实施例一
参照图2,示出了根据本发明实施例一的一种SIP消息处理方法的步骤流程图。
本实施例的SIP消息处理方法中的SIP消息基于UDP进行网络传输,本实施例的SIP消息处理方法包括以下步骤:
步骤S202:Presence服务器接收到客户端和/或中间网元返回的SIP错误响应消息。
其中,SIP错误响应消息中携带有发生错误的SIP通知请求消息的序号。该SIP错误响应消息遵循SIP协议规范,是Presence服务器发送的通知请求消息如notify消息在网络中传输乱序时,由接收该通知请求消息的客户端和/或中间网元向Presence服务器发出的。
步骤S204:Presence服务器确定客户端和/或中间网元接收SIP通知请求消息产生乱序。
也即,Presence服务器发送的通知请求消息在网络传输中出现了乱序。
其中,SIP通知请求消息中携带有客户端订阅的Presence实体状态更新信息。
步骤S206:Presence服务器更新SIP通知请求消息序号,重新生成SIP通知请求消息,并向客户端和/或中间网元重新发送重新生成的SIP通知请求消息。
经过本步骤,客户端和/或中间网元将接收到新的SIP通知请求消息,该新的SIP通知请求消息携带的客户端订阅的Presence实体状态更新信息与之前出现乱序的SIP通知请求消息携带的信息内容相同,但新的序号将纠正之前的乱序,使客户端和/或中间网元能够重新正确接收客户端订阅的Presence实体状态更新信息。
通过本实施例,针对基于UDP进行网络传输的Presence业务,因为UDP是非可靠的网络传输协议,因而造成现有Presence业务中会出现通知请求消息如notify消息在网络中传输乱序,进而造成客户端丢弃该通知请求消息,导致订阅的状态通知失败。而本实施例中,当出现Presence业务的通知请求消息如notify消息在网络中传输乱序时,接收该通知请求消息的客户端和/或中间网元会向Presence服务器发送相应的SIP错误响应消息,Presence服务器根据该错误响应消息更新发生乱序的SIP通知请求消息序号,重新生成与之前消息内容相同的SIP通知请求消息,再次向客户端和/或中间网元发送。SIP通知请求消息序号纠正了之前的乱序,使得客户端和/或中间网元能够再次接收到出现错误的SIP通知请求消息,避免了订阅的状态通知失败。
实施例二
参照图3,示出了根据本发明实施例二的一种SIP消息处理方法的步骤流程图。
本实施例的SIP消息处理方法中的SIP消息基于UDP进行网络传输,本实施例的SIP消息处理方法包括以下步骤:
步骤S302:Presence服务器向客户端和/或中间网元依次发送多个notify请求消息。
本实施例中,SIP通知请求消息以SIP的notify请求消息为例,每个notify请求消息都有一个序号,且携带有不同的Presence实体状态更新信息。
步骤S304:客户端和/或中间网元接收Presence服务器发送的notify请求消息。
步骤S306:客户端和/或中间网元判断本次接收的notify请求消息的序号小于之前接受的notify请求消息的序号。
如,本次接收的notify请求消息的序号小于前一次接收的notify请求消息的序号;或者,本次接收的notify请求消息的序号小于之前任意一次,如早于本次前的二次即前前次,接收的notify请求消息的序号。
步骤S308:客户端和/或中间网元向Presence服务器发送SIP错误响应消息。
其中,SIP错误响应消息为指示客户端错误、或请求包含无效语法、或服务器不能接受该请求的类型的SIP错误响应消息。在该SIP错误响应消息中携带有发生错误的SIP通知请求消息的序号。
SIP响应消息的类型包括:1XX、2XX、3XX、4XX、5XX、和6XX等多种类型。其中,4XX类型的响应消息指示客户端错误、或请求包含无效语法、或服务器不能接受该请求;5XX类型的响应消息指示服务器端错误;6XX类型的响应消息指示全局错误。因此,本发明的SIP错误响应消息采用指示客户端错误、或请求包含无效语法、或服务器不能接受该请求的类型的SIP错误响应消息。具体到本实施例,可以采用4XX类型的响应消息,如424响应消息,当然,该消息仅为示例性说明,在实际应用中,本领域技术人员可以采用任意编号的4XX类型的响应消息。
步骤S310:Presence服务器接收到客户端和/或中间网元返回的SIP错误响应消息,确定客户端和/或中间网元接收notify请求消息序号错误。
其中,SIP通知请求消息也即本实施例的notify请求消息中携带有客户端订阅的Presence实体状态更新信息。
优选地,当SIP错误响应消息中携带的发生错误的SIP通知请求消息的序号为SIP通知请求消息的Cseq值时,本步骤中,Presence服务器根据SIP错误响应消息中携带的SIP通知请求消息的Cseq值,确定客户端和/或中间网元接收的SIP通知请求消息的Cseq值小于客户端和/或中间网元在接收SIP通知请求消息前接收的、其它SIP通知请求消息的Cseq值。Cseq值是SIP通知请求消息的序号的一种常规形式,但本领域技术人员应当明了,其它表示消息序号的形式也同样适用。
步骤S312:Presence服务器根据应用层在发送与SIP错误响应消息对应的SIP通知请求消息时的指示,确定是否向客户端和/或中间网元重新发送SIP通知请求消息,若确定重新发送,则执行步骤S314;若确定不重新发送,则丢弃Presence服务器保存的与SIP错误响应消息对应的notify请求消息。
Presence服务器根据应用层发送原通知请求消息的指示,确定是否向客户端和/或中间网元重新发送SIP通知请求消息。也即,是否重传SIP通知请求消息,在发送原SIP通知请求消息时便已经指示给Presence服务器的底层协议栈,底层协议栈在接收错误响应码时,会查询该响应对应的原SIP通知请求消息是否需要重新发送。即,由上层应用指示是否重新发送原SIP通知请求消息。
需要说明的是,本步骤为优选步骤,可根据上层应用确定是否需要重发notify请求消息,以提供更大的消息重传灵活性,并提高系统效率。但本领域技术人员应当明了,在实际应用中,也可不进行判定,在接收到SIP错误响应消息后即进行重传。
步骤S314:Presence服务器更新发生序号错误的notify请求消息序号,重新生成notify请求消息,并向客户端和/或中间网元重新发送重新生成的notify请求消息。
优选地,Presence服务器按照Cseq值生成规则生成新的Cseq值,并用新的Cseq值替换保存的发生序号错误的notify请求消息中的Cseq值,重新生成notify请求消息。
通过本实施例,解决了现有技术的Presence业务中,当采用UDP网络传输时,导致SIP notify消息传输乱序,最终导致客户端接收消息失败的问题,保证的客户端能够顺利获取Presence实体的状态更新信息。并且,Presence服务器可以根据上层应用发送原SIP通知请求消息时的指示,确定在接收到错误响应消息时,是否更新发生乱序的SIP通知请求消息序号,重新生成与之前消息内容相同的SIP通知请求消息,再次向客户端和/或中间网元发送,提高了消息重传灵活性和系统效率。
以下,以具体实例对本发明的SIP消息处理方案进行说明。下述多个实例中,SIP错误响应消息均以424消息为例。也即,响应码:424cseq too small;含义:客户端和/或中间网元接收服务端消息后,用来通知服务端消息乱序(当前接收消息的cseq值小于会话内上一请求消息的cseq值),其中携带有发生错误的SIP通知请求消息的cseq值;服务端协议栈接收此响应消息后,根据上层应用指示,决定是否重新生成并发送消息。此外,客户端均以Watcher为例,客户端和中间网元均要求当接收到乱序消息时,支持发送424响应码;服务端均以Presence服务器为例,要求服务端协议栈支持接收424响应码,接收该消息后,重新生成并发送notify消息,并且,还可以根据自身业务需要,由上层应用指示是否重新发送notify消息。
实施例三
参照图4,示出了根据本发明实施例三的一种SIP消息处理方法的流程图。
本实施例以中间网元notify消息接收乱序为例,本实施例的SIP消息处理方法包括以下步骤:
步骤S402:Watcher向中间网元发起订阅请求Subscribe请求,以通过中间网元向Presence服务器发起订阅请求Subscribe请求,请求订阅Presentity1与Presentity2的状态信息。
步骤S404:中间网元将Watcher发送的订阅请求Subscribe请求发送至Presence服务器。
步骤S406:Presence服务器接收Watcher通过中间网元发送的订阅请求,向中间网元返回200OK成功响应,以通过中间网元向Watcher返回200OK成功响应。
步骤S408:中间网元透传200OK成功响应至Watcher。
步骤S410:Presence服务器向Watcher发送notify请求消息。
步骤S412:中间网元将notify请求消息透传至Watcher。
步骤S414:Watcher通过中间网元向Presence服务器返回notify请求200OK成功响应。
步骤S416:中间网元将200OK成功响应透传至Presence服务器。
步骤S418:Presentity1状态更新,向Presence服务器发送Publish请求消息。
步骤S420:Presence服务器向Presentity1返回Publish200OK成功响应。
步骤S422:Presentity2状态更新,向Presence服务器发送Publish请求消息。
步骤S424:Presence服务器向Presentity2返回Publish200OK成功响应。
步骤S426:Presence服务器通过中间网元向Watcher发送notify请求消息,通知其订阅Presentity1状态更新(notify对应的cseq值为n)。
步骤S428:Presence服务器通过中间网元向Watcher发送notify请求消息,通知其订阅Presentity2状态更新(notify对应的cseq值为n+1)。
步骤S430:notify消息(cseq值为n+1)经由网络传输至中间网元。
步骤S432:中间网元将消息发送至Watcher。
步骤S434:Watcher接收notify请求消息,返回200OK成功响应。
步骤S436:中间网元将200OK成功响应透传至Presence服务器。
步骤S438:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n),通知其订阅Presentity1状态更新(notify对应的cseq值为n)时,此处请求发送的顺序为:Presence服务器先发送cseq值为n的notify请求消息,但由于网络中传输问题,导致到Watcher时,消息乱序,cseq值为n+1的notify请求消息先到,cseq值为n的notify请求消息后到。
步骤S440:中间网元接收notify请求消息(notify对应的cseq值为n),判断该消息对应的cseq值小于前一消息对应的cseq值,向Presence服务器返回424错误响应,提示服务器请求消息乱序。
步骤S442:Presence服务器重新生成notify请求消息(重新生成cseq值为n+2),并通过中间网元发送至Watcher。
步骤S444:中间网元将notify请求消息(notify对应的cseq值为n+2)透传至Watcher。
步骤S446:Watcher接收notify请求消息(notify对应的cseq值为n+2),返回200OK成功响应。
步骤S448:中间网元将notify200OK成功响应透传至Presence服务器。
本实施例中,由中间网元对乱序notify请求消息进行反馈和处理,该反馈和处理对客户端Watcher透明,减轻了客户端Watcher的处理负担。
实施例四
参照图5,示出了根据本发明实施例四的一种SIP消息处理方法的流程图。
本实施例以中间网元notify消息接收多次乱序处理为例,本实施例的SIP消息处理方法包括以下步骤:
步骤S502:Watcher向中间网元发起订阅请求Subscribe请求,以通过中间网元向Presence服务器发起订阅请求,订阅Presentity1与Presentity2状态信息。
步骤S504:中间网元将Watcher发送的订阅请求发送至Presence服务器。
步骤S506:Presence服务器接收Watcher订阅请求,返回200OK成功响应。
步骤S508:中间网元透传200OK成功响应至Watcher。
步骤S510:Presence服务器向Watcher发送notify请求消息。
步骤S512:中间网元将notify请求消息透传至Watcher。
步骤S514:Watcher向Presence服务器返回notify请求200OK成功响应。
步骤S516:中间网元将200OK成功响应透传至Presence服务器。
步骤S518:Presentity1状态更新,向presence服务器发送Publish请求消息。
步骤S520:Presence服务器向Presentity1返Publish200OK成功响应。
步骤S522:Presentity2状态更新,向Presence服务器发送Publish请求消息。
步骤S524:Presence服务器向Presentity2返回Publish200OK成功响应。
步骤S526:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n),通知其订阅Presentity1状态更新(notify对应的cseq值为n)。
步骤S528:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n+1),通知其订阅Presentity2状态更新(notify对应的cseq值为n+1)。
步骤S530:notify请求消息(cseq值为n+1)经由网络传输至中间网元。
步骤S532:中间网元将notify请求消息(cseq值为n+1)发送至Watcher。
步骤S534:Watcher接收notify请求消息(cseq值为n+1),返回200OK成功响应。
步骤S536:中间网元将200OK成功响应透传至Presence服务器。
步骤S538:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n),通知其订阅Presentity1状态更新(notify对应的cseq值为n),此处请求发送的顺序为:Presence服务器先发送cseq值为n的notify请求消息,但由于网络中传输问题,导致到Watcher时,消息乱序,cseq值为n+1的notify请求消息先到,cseq值为n的notify请求消息后到。
步骤S540:中间网元接收notify请求消息(notify对应的cseq值为n),判断该消息对应的cseq值小于前一消息对应的cseq值,向Presence服务器返回424错误响应,提示服务器请求消息乱序.
步骤S542:Presence服务器重新生成notify请求消息(重新生成cseq值为n+2),并发送至Watcher。
步骤S544:notify请求消息(notify对应的cseq值为n+2)经由网络传至中间网元。
步骤S546:中间网元接收notify请求消息(notify对应的cseq值为n+2),判断该消息对应的cseq值小于前一消息对应的cseq值,向Presence服务器返回424错误响应,提示服务器请求消息乱序。
步骤S548:Presence服务器重新生成notify请求消息(根据当前cseq值重新生成cseq值为n+4),并发送至Watcher。
本实施例中,设定cseq值n+3已被占用。
步骤S550:中间网元将notify请求消息(notify对应的cseq值为n+4)透传至Watcher。
步骤S552:Watcher接收notify请求消息(notify对应的cseq值为n+4),返回200OK成功响应。
步骤S554:中间网元将notify200OK成功响应透传至Presence服务器。
需要说明的是,实际应用中,步骤S438~448有可能重复多次。
本实施例中,由中间网元对多次乱序notify请求消息进行反馈和处理,该反馈和处理对客户端Watcher透明,且多次处理乱序,减轻了客户端Watcher的处理负担,保证了客户端Watcher接收消息的准确性。
实施例五
参照图6,示出了根据本发明实施例五的一种SIP消息处理方法的流程图。
本实施例以客户端Watcher的notify消息接收乱序处理为例,本实施例的SIP消息处理方法包括以下步骤:
步骤S602:Watcher向Presence服务器发起订阅请求Subscribe请求,订阅Presentity1与Presentity2状态信息。
步骤S604:Presence服务器接收Watcher订阅请求,返回200OK成功响应。
步骤S606:Presence服务器向Watcher发送notify请求消息。
步骤S608:Watcher向Presence服务器返回notify请求200OK成功响应。
步骤S610:Presentity1状态更新,向Presence服务器发送Publish请求消息。
步骤S612:Presence服务器向Presentity1返回Publish200OK成功响应。
步骤S614:Presentity2状态更新,向Presence服务器发送Publish请求消息。
步骤S616:Presence服务器向Presentity2返回Publish200OK成功响应。
步骤S618:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n),通知其订阅Presentity1状态更新(notify对应的cseq值为n)。
步骤S620:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n+1),通知其订阅Presentity2状态更新(notify对应的cseq值为n+1)。
步骤S622:notify请求消息(cseq值为n+1)经由网络传输到达Watcher。
步骤S624:Watcher接收notify请求消息(cseq值为n+1),返回200OK成功响应。
步骤S626:notify请求消息(cseq值为n)经由网络传输到达Watcher,由于网络中传输问题,导致到Watcher时,消息乱序,cseq值为n+1的notify请求消息先到,cseq值为n的notify请求消息后到。
步骤S628:Watcher接收notify请求消息(cseq值为n),判断该消息对应的cseq值小于前一消息对应的cseq值,向Presence服务器返回424错误响应,提示Presence服务器请求消息乱序。
步骤S630:Presence服务器重新生成notify请求消息(重新生成cseq值为n+2),并发送至Watcher。
步骤S632:Watcher接收notify请求消息(cseq值为n+2),返回200OK成功响应。
本实施例中,客户端Watcher直接对乱序notify请求消息进行反馈和处理,保证了客户端Watcher接收消息的准确性。
实施例六
参照图7,示出了根据本发明实施例六的一种SIP消息处理方法的流程图。
本实施例以客户端Watcher的notify消息接收多次乱序处理为例,本实施例的SIP消息处理方法包括以下步骤:
步骤S702:Watcher向Presence服务器发起订阅请求Subscribe请求,订阅Presentity1与Presentity2状态信息。
步骤S704:Presence服务器接收Watcher订阅请求,返回200OK成功响应。
步骤S706:Presence服务器向Watcher发送notify请求消息。
步骤S708:Watcher向Presence服务器返回notify请求200OK成功响应。
步骤S710:Presentity1状态更新,向Presence服务器发送Publish请求消息。
步骤S712:Presence服务器向Presentity1返回Publish200OK成功响应。
步骤S714:Presentity2状态更新,向Presence服务器发送Publish请求消息。
步骤S716:Presence服务器向Presentity2返回Publish200OK成功响应。
步骤S718:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n),通知其订阅Presentity1状态更新(notify对应的cseq值为n)。
步骤S720:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n+1),通知其订阅Presentity2状态更新(notify对应的cseq值为n+1)。
步骤S722:notify请求消息(cseq值为n+1)经由网络传输到达Watcher。
步骤S724:Watcher接收notify请求消息(cseq值为n+1),返回200OK成功响应。
步骤S726:notify请求消息(cseq值为n)经由网络传输到达Watcher,由于网络中传输问题,导致到达Watcher时,消息乱序,cseq值为n+1的notify请求消息先到,cseq值为n的notify请求消息后到。
步骤S728:Watcher接收notify请求消息(cseq值为n),判断该消息对应的cseq值小于前一消息对应的cseq值,向Presence服务器返回424错误响应,提示Presence服务器请求消息乱序。
步骤S730:Presence服务器重新生成notify请求消息(根据最新cseq重新生成cseq值为n+2),并发送至Watcher。
步骤S732:notify请求消息(cseq值为n+2)经由网络传输,发送至Watcher,由于网络中传输问题,导致到达Watcher时,消息乱序,cseq值为n+3的notify请求消息先到,cseq值为n+2的notify请求消息后到。
步骤S734:Watcher接收notify请求消息(cseq值为n+2),判断该消息对应的cseq值小于前一消息对应的cseq值,向Presence服务器返回424错误响应,提示Presence服务器请求消息乱序。
步骤S736:Presence服务器重新生成notify请求消息(根据最新cseq重新生成cseq值为n+4),并发送至Watcher。
步骤S738:Watcher接收notify请求消息(cseq值为n+4),返回200OK成功响应。
需要说明的是,实际应用中,步骤S326~334有可能重复多次。
本实施例中,由客户端Watcher对乱序notify请求消息进行多次反馈和处理,有效保证了客户端Watcher接收消息的准确性。
实施例七
参照图8,示出了根据本发明实施例七的一种SIP消息处理方法的流程图。
本实施例以应用层指示不重传乱序notify消息为例,对本发明的SIP消息处理进行说明。
在发送notify消息时,上层应用(即应用层)根据实际情况,可以指示当前发送的notify消息是否需要重传(当出现乱序时)。适用情形描述如下:Watcher订阅了某一Presentity状态变换,该Presentity上线后,立刻下线。根据Presence业务流程,Presence服务器将发送两个notify请求消息,通知Watcher该Presentity状态为上线、下线。此时,如果出现本发明中描述的乱序问题(Watcher接收顺序与Presence发送顺序颠倒),将直接导致Watcher状态显示错误。基于以上情形,提出由上层应用在发送notify消息时,指示底层协议栈,当接收该notify消息424响应时,是否需要重新生成并发送notify消息。
本实施例的SIP消息处理方法包括以下步骤:
步骤S802:Watcher向Presence服务器发起订阅请求Subscribe请求,订阅Presentity1与Presentity2状态信息。
步骤S804:Presence服务器接收Watcher订阅请求,返回200OK成功响应。
步骤S806:Presence服务器向Watcher发送notify请求消息。
步骤S808:Watcher向Presence服务器返回notify请求200OK成功响应。
步骤S810:Presentity1状态更新,向Presence服务器发送Publish请求消息。
步骤S812:Presence服务器向Presentity1返回Publish200OK成功响应。
步骤S814:Presentity2状态更新,向Presence服务器发送Publish请求消息。
步骤S816:Presence服务器向Presentity2返回Publish200OK成功响应。
步骤S818:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n),通知其订阅Presentity1状态更新(notify对应的cseq值为n)。
步骤S820:Presence服务器向Watcher发送notify请求消息(notify对应的cseq值为n+1),通知其订阅Presentity2状态更新(notify对应的cseq值为n+1)。
步骤S822:notify请求消息(cseq值为n+1)经由网络传输到达Watcher。
步骤S824:Watcher接收notify请求消息(cseq值为n+1),返回200OK成功响应。
步骤S826:notify请求消息(cseq值为n)经由网络传输到达Watcher,由于网络中传输问题,导致到达Watcher时,消息乱序,cseq值为n+1的notify请求消息先到,cseq值为n的notify请求消息后到。
步骤S828:Watcher接收notify请求消息(cseq值为n),判断该消息对应的cseq值小于前一消息对应的cseq值,向Presence服务器返回424错误响应,提示Presence服务器请求消息乱序。
步骤S830:Presence服务器接收424错误响应后,根据上层应用指示,该消息不进行重传操作,协议栈将该消息直接丢弃。
本实施例中,由上层应用决定不进行乱序消息的重传,提高了本发明方案对不同情形的适用性,提高了系统效率。
需要说明的是,上述多个实施例均以Presence服务器对单个设备如客户端或中间网元反馈SIP错误响应消息进行处理为例,但本领域技术人员应当明了,在实际应用中,有可能多个设备,如多个客户端、或多个中间网元、或客户端与中间网元,均向Presence服务器反馈SIP错误响应消息,则此种情况下,Presence服务器对不同SIP错误响应消息的处理均可参照上述多个实施例相应执行,在此不一一详述。
上述多个实施例中,当客户端或中间网元接收到服务端发送的乱序消息后(当前接收消息的cseq值比之前接收消息的cseq值小),在丢弃该消息的同时,向发送方回复424错误响应码,服务端协议栈接收到该响应码后,可以根据上层业务应用需求,选择是否重新发送该乱序消息(新消息的cseq值将重新生成)。通过该方式,可以保证当消息在网络中传输乱序后,客户端依然能够正常接收该消息携带内容。
实施例八
参照图9,示出了根据本发明实施例八的一种SIP消息处理装置的结构框图。
本实施例的SIP消息处理装置中的SIP消息基于UDP进行网络传输,所述SIP消息处理装置包括:第一接收模块902,用于接收客户端和/或中间网元返回的SIP错误响应消息,其中,SIP错误响应消息中携带有发生错误的SIP通知请求消息的序号;确定模块904,用于确定客户端和/或中间网元接收SIP通知请求消息产生乱序;重传模块906,用于更新SIP通知请求消息序号,重新生成SIP通知请求消息,并向客户端和/或中间网元重新发送重新生成的SIP通知请求消息;其中,SIP通知请求消息中携带有客户端订阅的Presence实体状态更新信息。
优选地,第一接收模块902接收到的所述SIP错误响应消息为指示客户端错误、或请求包含无效语法、或服务器不能接受该请求的类型的SIP错误响应消息。例如,为响应码为424的错误响应消息。
优选地,SIP错误响应消息中携带的发生错误的SIP通知请求消息的序号为SIP通知请求消息的Cseq值;确定模块904,用于根据SIP错误响应消息中携带的SIP通知请求消息的Cseq值,确定客户端和/或中间网元接收的SIP通知请求消息的Cseq值小于客户端和/或中间网元在接收SIP通知请求消息前接收的、其它SIP通知请求消息的Cseq值。
优选地,重传模块906在更新SIP通知请求消息序号,重新生成SIP通知请求消息时:按照Cseq值生成规则生成新的Cseq值,并用新的Cseq值替换保存的SIP通知请求消息中的Cseq值,重新生成SIP通知请求消息。
优选地,本实施例的SIP消息处理装置还包括:判断模块908,用于在重传模块906更新SIP通知请求消息序号,重新生成SIP通知请求消息,并向客户端和/或中间网元重新发送重新生成的SIP通知请求消息之前,根据应用层在发送与SIP错误响应消息对应的SIP通知请求消息时的指示,确定是否向客户端和/或中间网元重新发送SIP通知请求消息;若确定重新发送,则执行重传模块906;若确定不重新发送,则丢弃所述SIP通知请求消息。
优选地,本实施例的SIP消息处理装置设置于Presence服务器中。
本实施例的SIP消息处理装置用于实现前述多个方法实施例中相应的SIP消息处理方法,并具有相应的方法实施例的有益效果,在此不再赘述。
本发明基于SIP协议,提供了一种通过定义新的SIP响应码,结合新的消息重传机制,解决因UDP网络传输问题而导致SIP notify消息乱序,造成客户端消息接收失败的方案。在本发明的方案中,提供了(1)因网络传输而导致消息乱序错误对应的响应码424;(2)用来解决因网络传输导致消息乱序而造成客户端接收消息失败的解决方法;(3)为解决因网络传输导致消息乱序而造成客户端接收消息失败的消息重传机制;(4)由上层应用指示底层协议栈当前发送的notify消息是否需要支持接收424响应码后,重新生成并发送notify消息的机制。通过本发明,有效解决了当采用UDP网络传输时,导致SIP notify消息传输乱序,最终导致客户端接收消息失败的问题。
需要说明的是,本发明提供的解决因网络传输导致消息乱序而造成客户端接收消息失败的机制,同样适用于会话过程中的INFO消息。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本发明所提供的一种SIP消息处理方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (6)
1.一种会话初始协议SIP消息处理方法,其特征在于,所述SIP消息基于用户数据报协议UDP进行网络传输,所述方法包括:
状态呈现Presence服务器接收到客户端和/或中间网元返回的SIP错误响应消息,其中,所述SIP错误响应消息中携带有发生错误的SIP通知请求消息的序号;
确定所述客户端和/或中间网元接收所述SIP通知请求消息产生乱序;
更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息;
其中,所述SIP通知请求消息中携带有所述客户端订阅的Presence实体状态更新信息;
所述Presence服务器接收到的所述SIP错误响应消息为指示客户端错误、或请求包含无效语法、或服务器不能接受该请求的类型的SIP错误响应消息;
在所述更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息的步骤之前,还包括:
所述Presence服务器根据应用层在发送与所述SIP错误响应消息对应的SIP通知请求消息时的指示,确定是否向所述客户端和/或中间网元重新发送所述SIP通知请求消息;
若确定重新发送,则执行所述更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息的步骤;
若确定不重新发送,则丢弃所述SIP通知请求消息。
2.根据权利要求1所述的方法,其特征在于,所述SIP错误响应消息中携带的发生错误的所述SIP通知请求消息的序号为所述SIP通知请求消息的Cseq值;
所述确定所述客户端和/或中间网元接收所述SIP通知请求消息产生乱序的步骤包括:
所述Presence服务器根据所述SIP错误响应消息中携带的所述SIP通知请求消息的Cseq值,确定所述客户端和/或中间网元接收的所述SIP通知请求消息的Cseq值小于所述客户端和/或中间网元在接收所述SIP通知请求消息前接收的、其它SIP通知请求消息的Cseq值。
3.根据权利要求2所述的方法,其特征在于,所述更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息的步骤包括:
所述Presence服务器按照Cseq值生成规则生成新的Cseq值,并用所述新的Cseq值替换保存的所述SIP通知请求消息中的Cseq值,重新生成所述SIP通知请求消息。
4.根据权利要求1所述的方法,其特征在于,在所述Presence服务器接收到客户端和/或中间网元返回的SIP错误响应消息的步骤之前,还包括:
所述客户端和/或中间网元接收到所述Presence服务器发送的所述SIP通知请求消息;
所述客户端和/或中间网元判断所述SIP通知请求消息的序号小于之前接受的其它SIP通知请求消息的序号,向所述Presence服务器发送所述SIP错误响应消息,其中,所述SIP错误响应消息为指示客户端错误、或请求包含无效语法、或服务器不能接受该请求的类型的SIP错误响应消息。
5.一种会话初始协议SIP消息处理装置,其特征在于,所述SIP消息基于用户数据报协议UDP进行网络传输,所述装置包括:
第一接收模块,用于接收客户端和/或中间网元返回的SIP错误响应消息,其中,所述SIP错误响应消息中携带有发生错误的SIP通知请求消息的序号;
确定模块,用于确定所述客户端和/或中间网元接收所述SIP通知请求消息产生乱序;
重传模块,用于更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息;
其中,所述SIP通知请求消息中携带有所述客户端订阅的Presence实体 状态更新信息;
所述第一接收模块接收到的所述SIP错误响应消息为指示客户端错误、或请求包含无效语法、或服务器不能接受该请求的类型的SIP错误响应消息;
判断模块,用于在所述重传模块更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息,并向所述客户端和/或中间网元重新发送重新生成的所述SIP通知请求消息之前,根据应用层在发送与所述SIP错误响应消息对应的SIP通知请求消息时的指示,确定是否向所述客户端和/或中间网元重新发送所述SIP通知请求消息;若确定重新发送,则执行所述重传模块;若确定不重新发送,则丢弃所述SIP通知请求消息。
6.根据权利要求5所述的装置,其特征在于,所述重传模块在更新所述SIP通知请求消息序号,重新生成所述SIP通知请求消息时:
按照Cseq值生成规则生成新的Cseq值,并用所述新的Cseq值替换保存的所述SIP通知请求消息中的Cseq值,重新生成所述SIP通知请求消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310432824.1A CN103516723B (zh) | 2013-09-22 | 2013-09-22 | Sip消息处理方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310432824.1A CN103516723B (zh) | 2013-09-22 | 2013-09-22 | Sip消息处理方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103516723A CN103516723A (zh) | 2014-01-15 |
CN103516723B true CN103516723B (zh) | 2017-08-11 |
Family
ID=49898757
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310432824.1A Active CN103516723B (zh) | 2013-09-22 | 2013-09-22 | Sip消息处理方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103516723B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106330833A (zh) * | 2015-06-29 | 2017-01-11 | 中兴通讯股份有限公司 | 基于因特网内容适配协议的通信方法、客户端和服务器 |
US10171515B2 (en) | 2016-04-20 | 2019-01-01 | International Business Machines Corporation | Notifying response sender of malformed session initiation protocol (SIP) response messages |
CN109150794B (zh) * | 2017-06-15 | 2021-05-11 | 中国移动通信集团上海有限公司 | 一种VoLTE语音业务质量分析处理方法及装置 |
CN110351224A (zh) * | 2018-04-03 | 2019-10-18 | 成都鼎桥通信技术有限公司 | 一种sip状态服务的发布方法和装置 |
CN109617949A (zh) * | 2018-11-21 | 2019-04-12 | 金瓜子科技发展(北京)有限公司 | 一种消息同步方法、装置、存储介质和电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101001135A (zh) * | 2006-01-11 | 2007-07-18 | 上海原动力通信科技有限公司 | 提高ip头压缩数据包传输可靠性的方法 |
CN101902437A (zh) * | 2009-05-25 | 2010-12-01 | 上海贝尔股份有限公司 | 在请求建立会话的过程中处理错误响应消息的方法及装置 |
CN101465860B (zh) * | 2009-01-14 | 2012-05-23 | 深圳市同洲电子股份有限公司 | 一种终端状态的订阅及通知方法、装置 |
-
2013
- 2013-09-22 CN CN201310432824.1A patent/CN103516723B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101001135A (zh) * | 2006-01-11 | 2007-07-18 | 上海原动力通信科技有限公司 | 提高ip头压缩数据包传输可靠性的方法 |
CN101465860B (zh) * | 2009-01-14 | 2012-05-23 | 深圳市同洲电子股份有限公司 | 一种终端状态的订阅及通知方法、装置 |
CN101902437A (zh) * | 2009-05-25 | 2010-12-01 | 上海贝尔股份有限公司 | 在请求建立会话的过程中处理错误响应消息的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103516723A (zh) | 2014-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103516723B (zh) | Sip消息处理方法与装置 | |
US7970828B2 (en) | Liveness monitoring in a publish/subscribe messaging system | |
US10027496B2 (en) | Method for distributing identifiers of multicast sources | |
US7536622B2 (en) | Data repair enhancements for multicast/broadcast data distribution | |
US8103782B2 (en) | Session mobility in a full-mesh conference using session initiation protocol | |
CN103139139B (zh) | 用户设备间业务迁移的方法和装置 | |
US20090106389A1 (en) | Sharing Multimedia | |
CN100496043C (zh) | 获取会话初始协议网络节点状态的方法及系统 | |
JP2006279697A (ja) | 情報伝送方法及び情報伝送システム | |
EP2190170A1 (en) | Method and system for providing presence service | |
US20080091781A1 (en) | Group communication | |
CN101815079A (zh) | 基于sip的服务器集群发布服务信息的方法及系统 | |
JP2009296138A (ja) | 通信システム | |
KR100883576B1 (ko) | 멀티캐스트/브로드캐스트 데이터 배포를 위한 데이터 복구강화 | |
KR20210036843A (ko) | 사전 설정된 세션을 사용하여 MCData 통신들을 처리하기 위한 방법 및 시스템 | |
US9444649B2 (en) | Method for sending and receiving session history in a communications system | |
US8898235B2 (en) | Method and devices for message disposition notification after session termination | |
CN101645825B (zh) | 过载处理方法及系统、过载处理的sip实体 | |
JP5889154B2 (ja) | マルチキャスト配信システム、マルチキャスト配信方法およびプログラム | |
CN110858791A (zh) | 分布式并行传输方法、装置、设备及存储介质 | |
JP2003124875A (ja) | 情報配信方法及びシステム、並びにマルチキャストサーバ、プログラム、及び記録媒体 | |
CN102244648B (zh) | 一种传输会话消息的方法及装置 | |
JP5102153B2 (ja) | Sipシグナリングにおけるコマンドシーケンス番号の制御方法、サーバ及びプログラム | |
JP4805072B2 (ja) | 通信システム | |
CN108632220B (zh) | 基于sip服务器的用户注册方法与sip服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |