CN101345742A - 一种即时通讯用户状态显示的系统和方法 - Google Patents

一种即时通讯用户状态显示的系统和方法 Download PDF

Info

Publication number
CN101345742A
CN101345742A CNA2007101186582A CN200710118658A CN101345742A CN 101345742 A CN101345742 A CN 101345742A CN A2007101186582 A CNA2007101186582 A CN A2007101186582A CN 200710118658 A CN200710118658 A CN 200710118658A CN 101345742 A CN101345742 A CN 101345742A
Authority
CN
China
Prior art keywords
state
sip
jabber
status
server
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.)
Granted
Application number
CNA2007101186582A
Other languages
English (en)
Other versions
CN101345742B (zh
Inventor
吕迅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fortinet Inc
Original Assignee
Fortinet Information Technology Beijing Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fortinet Information Technology Beijing Co Ltd filed Critical Fortinet Information Technology Beijing Co Ltd
Priority to CN 200710118658 priority Critical patent/CN101345742B/zh
Publication of CN101345742A publication Critical patent/CN101345742A/zh
Application granted granted Critical
Publication of CN101345742B publication Critical patent/CN101345742B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Telephonic Communication Services (AREA)

Abstract

本发明公开了一种即时通讯用户状态显示的系统和方法。该系统包括多个客户端,至少一Jabber服务器和至少一SIP服务器,还包括一附加状态信息模块,用于在状态通知-订阅元素的状态元素发送状态变更消息时,在状态元素的消息后附加至少一SIP状态的Jabber状态字符标识,所述标识用于标记Jabber服务器能够识别的用户请求显示的SIP状态信息。所述标识包括至少一标记字段,至少一SIP状态字段,以及至少一特殊消息字段。其通过对Jabber系统的在线状态文字的重新解析,实现联系人特殊状态的显示,以及实现一些特殊的功能,可极大地扩展客户端的功能。

Description

一种即时通讯用户状态显示的系统和方法
技术领域
本发明涉及计算机网络即时通讯领域,特别是涉及一种即时通讯用户状态显示的系统和方法。
背景技术
即时通讯(Instant Messaging,IM)系统是通过即时通讯技术来实现在线聊天、交流的软件。透过即时通讯功能,你可以知道你的亲友是否正在线上,及与他们即时通讯。即时通讯比传送电子邮件所需时间更短,而且比拨电话更方便,无疑是计算机网络年代最方便的通讯方式。
即时通讯(IM)是一个终端服务,允许两人或多人使用网路即时的传递文字讯息、档案、语音与视频交流。即时通讯是一个终端连往一个即时通讯网路的服务,不同于e-mail,它的交谈是即时的。
在计算机网络上,现有的即时通讯系统包括有MSN Messenger、AOLInstant Messenger、Yahoo!Messenger、NET Messenger Service、Jabber、ICQ与QQ等等。
Jabber中文意思是“叽叽咂咂的说”,是一个由开源社区发起并领导开发的即时通讯和在线状态的系统,用于即时通讯消息的传输和表示。Jabber系统和其它即时通讯(IM)服务的一个功能上的差别在于Jabber拥有开放的XML协议模块。
在Jabber系统的XML上下文的数据流中,Jabber开放的XML协议系统中包括至少三个XML元素:推送消息(<message/>)元素;状态通知-订阅(<presence/>)元素;消息-查询(info/query)(<iq/>)元素。
一个Jabber会话由两个平行的XML流组成,一个从客户端到服务器端,另一个从服务端到客户端。当一个Jabber客户端连接上一个Jabber服务器时,这个客户端将发起一个客户端->服务器的XML流,同时作为响应,服务器也将发起一个服务器->客户端的XML流。所有推送消息(<message/>),状态通知-订阅(<presence/>),以及消息-查询(<iq/>)元素都被放在这些XML流的上下文中。
推送消息(<message/>)元素是Jabber开放XML协议三个顶级元素中的一个。它被用来包含两个Jabber用户间互相发送消息内容,或者两个Jabber识别符(Jabber IDs)之间更一般的消息。
信息-查询(<iq/>)元素在Jabber中在两个实体间构建一个根本的会话,并且允许实体间来回传送XML格式的请求和响应。信息-查询元素主要用于取得或设置公共的用户信息,比如名字,电子邮件,地址等等。但它的灵活设计使得任何种类的会话都可以发生。任何通过一个Jabber识别符(ID)标识的实体都能通过信息-查询元素与其它实体进行会话。
状态通知-订阅(<presence/>)元素用于提供关于一个Jabber实体的可用性信息。任何一个通过一个Jabber识别符(ID)确认的实体可以与另一个实体进行在线状态信息的通信,这种通信大多以订阅在线状态信息的方式进行。
所有实体表现出的在线状态不是“可用”就是“不可用”。“可用”状态表示发送者可以立即收到消息。“不可用”状态表示发送者不能在当前时间收到任何数据。默认情况下,所有状态通知-订阅(<presence/>)元素除非包含type=“unavailable”属性外,都表示“可用”。“可用”的更多特殊形式利用状态(<status/>)元素和显示(<show/>)元素表现。
其中,<show/>元素来指定Jabber的away、chat、dnd等等不同状态,由<status/>元素进行补充说明元素进行指定。
状态通知-订阅(<presence/>)元素的类型(type)属性根据不同目的使用。除了提示其它用户本用户的可用性状态的“普通”用法外,还包括订阅、取消订阅、以及探测在线状态信息。
下面是类型(type)属性的可用值:
“available”、“error”、“probe”、“subscribe”、“subscribed”、“unavailable”、“unsubscribe”、“unsubscribed”等。
状态通知-订阅(<presence/>)元素的类型(type)属性通过这些值表达不同的含义。
其中,当如果没有包含任何类型(type)属性,在线状态包将被设为type=“available”,用来提供用户在线时的信息。一个type=“available”的在线状态包通常包含一个显示(<show/>)元素以详细说明Jabber实体的可用类型,以及一个状态(<status/>)元素,这些元素包含人能看懂的关于该可用类型的描述。
    例如:
<presence
from=″juliet@capulet.com/balcony″to=″romeo@montague.net/orchard″>
<show>away</show>
<status>Stay but a little,I will come again.</status>
</presence>
其中,显示(<show/>)元素的可用值为:
away--Jabber用户或实体在线,但不能马上联系上;
chat--Jabber用户或实体在线并有兴趣聊天;
dnd--Jabber用户或实体在线,但不想被打扰(“dnd”表示“do notdisturb”);
xa--Jabber用户或实体在线,但已经离开很长时间了(“xa”表示“extended away”);
状态(<status/>)元素可以包含任意特性数据,这些数据通常包含对于用户状态的描述,如,“开会中”是“away”的一个表现值,或者“忙于编码”可以是“dnd”的一个表现。
Jabber用户的客户端发送一个状态通知-订阅(<presence/>)元素的xml包给服务器端,其中类型type=“available”,并根据其显示(<show>)元素和状态(<status>)元素来表示客户端当前的状态,
如<show>chat</show>表示用户或实体在线并有兴趣聊天,而发送<show>away</show>表示用户或实体在线,但不能马上联系上。
通过其中的<status>XXX</status>元素来描述当前的状态,其中XXX表示用户自定义的任意字符。
服务器端收到该状态通知-订阅元素的<presence/>包之后,会将其转发给所有订阅该用户在线状态的其他用户,其他用户通过该包即可获得并显示出该用户的状态信息。
但是,以往的客户端发送的状态(<status>)元素,除描述信息外无任何功能性应用,仅作为其他客户端显示的内容(用来解释其显示(<show>)元素表示的状态)。当客户端需向其他用户发送诸如会话发起协议(SessionInitiation Protocol,SIP)协议信息等特定功能时(例如显示为“on the phone”状态),客户端则无法完成该特定信息的发布。
发明内容
本发明的目的在于提供一种即时通讯用户状态显示的系统和方法。其通过对Jabber系统的在线状态文字的重新解析,实现联系人特殊状态的显示,以及实现一些特殊的功能,可极大地扩展客户端的功能。
为实现本发明目的而提供的一种即时通讯用户状态显示系统,包括多个客户端,至少一Jabber服务器和至少一SIP服务器,还包括一附加状态信息模块,用于在状态通知-订阅元素的状态元素发送状态变更消息时,在状态元素的消息后附加至少一SIP状态的Jabber状态字符标识,所述标识用于标记Jabber服务器能够识别的用户请求显示的SIP状态信息。
所述标识包括至少一标记字段,至少一SIP状态字段,以及至少一特殊消息字段。
所述SIP状态或者为正在呼出状态,或者为正在连接状态,或者为正在呼叫并对方已经响铃状态,或者为有用户打入并进入响铃状态,或者为呼叫其它用户并进入到通话状态,或者为有用户打入并进入到通话状态,或者为通话结束并正在挂断状态。
为实现本发明目的还提供一种即时通讯用户状态显示方法,包括下列步骤:
步骤A,当客户端拨出或接入电话时,则Jabber系统发送状态变更消息到服务器,并在状态变更消息内嵌入包括至少一SIP状态的Jabber状态字符标识的信息内容,所述标识用于标记Jabber服务器能够识别的用户请求显示的SIP状态信息;
步骤B,当服务器收到所述状态变更消息之后,将所述状态变更消息转发给所有订阅该用户状态并被许可的其它用户客户端内;
步骤C,客户端在接收到状态变更消息之后,重新解析并获取SIP状态并显示该动态字符串,并显示解析出的SIP状态。
所述步骤A中,所述在状态变更消息内嵌入包括至少一SIP状态的Jabber状态字符标识的信息内容,包括如下步骤:
步骤A1,Jabber客户端内的SIP状态发生变化时,获得并发送相应的状态变更消息到Jabber服务器;
步骤A2,Jabber服务器根据当前的SIP状态获得应发送的状态变更消息;
步骤A3,根据用户当前SIP状态,准备Jabber服务器的状态变更消息需要的字符;
步骤A4,在SIP状态的Jabber状态字符内填充相应的信息;
步骤A5,获取SIP状态的Jabber状态字符后,通过调用客户端原有Jabber状态字符发送函数,将新的Jabber状态字符组织成字符串,并将该字符串发送到服务器端,并通知Jabber服务器自身的状态发生变化。
所述步骤A2中,Jabber服务器根据当前的SIP状态获得应发送的状态变更消息,包括如下步骤:
步骤A21,判定当前SIP状态是否为注册SIP服务器成功状态;
步骤A22,如果SIP未注册SIP服务器或状态为仅注册,则无需写入SIP状态,返回未标记SIP状态的Jabber状态字符;
步骤A23,否则说明当前SIP有变更状态,则发送相应的状态变更消息,并清空SIP状态的Jabber状态字符的SIP状态字段和特殊消息字段。
所述步骤A3中,所述SIP状态或者为正在呼出状态,或者为正在连接状态,或者为正在呼叫并对方已经响铃状态,或者为有用户打入并进入响铃状态,或者为呼叫其它用户并进入到通话状态,或者为有用户打入并进入到通话状态,或者为通话结束并正在挂断状态。
所述步骤C包括如下步骤:
步骤C1,当收到状态变更消息之后,客户端接收状态变更处理函数,重新解析该状态值;
步骤C2,通过与SIP状态的Jabber状态字符的比较,判断该字符是否包含有SIP状态的SIP信息;
步骤C3,将SIP状态的Jabber状态字符解密解析,获取SIP状态并显示动态字符串。
所述步骤C2中,判断该字符是否包含有SIP状态的SIP信息,是指:
状态值与SIP状态的Jabber状态字符比较0~12字节,如果完全相同,则说明该状态消息包含SIP状态的SIP信息。如果不能进行匹配,则返回到客户端原有处理JABBER status函数。
所述步骤C3包括如下步骤:
步骤C31,取出对方SIP状态和SIP的信息;
步骤C32,取出服务器的SIP状态;
步骤C33,取出Jabber状态字符中SIP状态的特殊消息字段,获得该字符串。
步骤C34,根据自身的权限,显示解析出的SIP状态。
所述信息内容为加密的信息内容。
所述加密为DES加密。
本发明的有益效果是:本发明的即时通讯用户状态显示的系统和方法,通过对Jabber系统中的在线状态文字的重新解析,实现联系人特殊状态的显示,以及针对这些特殊状态传送一些特定参数,如:显示用户正在通话中的状态,并且显示出正在通话中的电话的号码。进一步地,使其可以通过Jabber系统获得SIP协议的信息。而且,其通过对原有Jabber系统的在线状态文字的重新解析,并配合加密措施,可极大地扩展客户端的功能。
附图说明
图1为本发明即时通讯用户状态显示的系统结构示意图;
图2为本发明即时通讯在线消息结构示意图;
图3为本发明即时通讯用户状态显示的方法流程图;
图4为一个Jabber客户端好友列表的两次截图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种即时通讯用户状态显示的系统和方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明的一种即时通讯用户状态显示的系统和方法,通过设置Jabber协议系统中状态通知-订阅(<presence/>)元素中类型(type)属性内状态(<status>)元素特定的值并重新解析该值,获取超过原有状态显示外的额外信息。
本发明的即时通讯用户状态显示系统,无需对用户原有的Jabber服务器14端做任何修改,仅需要在客户端发送自身和接受其他用户即时通讯消息(online message)时添加特殊信息处理。
如图1所示,本发明的即时通讯用户状态显示的系统,包括多个客户端11,至少一Jabber服务器14和至少一SIP(Session Initiation Protocol,会话发起协议)服务器13。
还包括一附加状态信息模块12,用于在状态通知-订阅(<presence>)元素的状态(<status>)元素发送状态变更消息时,在状态(status)元素的消息后附加至少一SIP状态的Jabber状态(status)字符标识,所述标识用于标记Jabber服务器14能够识别的用户请求显示的SIP状态信息。
如图2所示,所述标识包括至少一标记(Mark)字段,至少一SIP状态(SipStatus)字段,以及至少一特殊消息(Special)字段。
其中:
标记字段(Mark)用于标识出收到的状态元素(status)消息是否包含SIP状态信息;
标识字段(Mark)的用处为标识出收到的状态元素(status)消息是否包含SIP状态信息。因Mark字段为特定字段,如果收到的状态元素(status)内包含Mark字段(通过字符串匹配的方式确认是否包含标识字段(Mark)),则说明该状态元素(status)包含SIP状态信息,否则说明该状态元素(status)未包含SIP状态信息。
SIP状态(SipStatus)字段用于表示出Sip状态;
所述SIP状态包括但不限于正在呼出状态,正在连接状态,正在呼叫并对方已经响铃状态,有用户打入并进入响铃状态,呼叫其它用户并进入到通话状态,有用户打入并进入到通话状态,通话结束并正在挂断状态。
特殊消息(Special)字段用于附加SIP状态的字符串信息。
在本发明实施例中,客户端11需要分别登录两个服务器,一个服务器为Jabber服务器14,另外一个为SIP服务器13,这两个服务器互不关联分别部署。所以,若想在Jabber的状态元素(status)内包含SIP状态信息,则可使用本发明。
如图3所示,下面以实现正在通话状态(On the phone)为例详细描述本发明的一种即时通讯用户状态显示的方法:
S100,当客户端11拨出或接入电话时,则Jabber系统发送状态变更消息(Online Message)到服务器,并在状态变更消息(Online Message)内嵌入包括至少一SIP状态的Jabber状态字符标识的信息内容,所述标识用于标记Jabber服务器14能够识别的用户请求显示的SIP状态信息;
本实施例中,所述SIP状态信息是记录状态以及该次拨叫号码的信息。
较佳地,所述信息内容为加密的信息内容。
所述在状态变更消息(Online Message)内嵌入包括至少一SIP状态的Jabber状态字符标识的信息内容,包括如下步骤:
步骤S110,Jabber客户端11(Jabber Client)内的SIP状态发生变化时,获得并发送相应的状态变更消息(Online Message)到Jabber服务器14;
步骤S120,Jabber服务器14根据当前的SIP状态获得应发送的状态变更消息(Online Message):
根据当前状态获得Jabber服务器14中的消息的状态(Status),其包括如下步骤:
步骤S121,判定当前SIP状态是否为注册SIP服务器13成功状态;
步骤S122,如果SIP未注册SIP服务器13或状态为仅注册,则无需写入SIP状态,返回未标记SIP状态的Jabber状态(status)字符;
步骤S123,否则说明当前SIP有其它通话状态;如果SIP状态为正在通话(On the phone)中,则发送相应的状态变更消息(Online Message),并清空SIP状态的Jabber状态(status)字符的SIP状态(SipStatus)字段和特殊消息(Special)字段。
步骤S130,根据用户当前SIP状态,准备Jabber服务器14的状态变更消息(Online Message)需要的字符;
SIP状态的Jabber状态字符(SipAwayDefmsge)的Mark字段不需要修改,仅仅需要修改SIP状态的Jabber状态字符(SipAwayDefmsge)的SIP状态(SipStatus)字段。
如果当前sip状态为正在呼出,则设置SIP状态(SipStatus)字段为JABBER_ONLINE_MESSAGE_STATUS_SIP_CALLING;
如果当前sip状态为正在连接状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_CONNECT;
如果当前sip状态为正在呼叫并对方已经响铃状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_DINGING;
如果当前sip状态为有用户打入并进入响铃状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_ALERTING;
如果当前sip状态为呼叫其它用户并进入到通话状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_CALL;
如果当前sip状态为有用户打入并进入到通话状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_ANSWER;
如果当前sip状态为通话结束并正在挂断状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_HANDING;
否则,说明当前SIP状态为未进行任何动作并保持成功登录状态。
步骤S140,在SIP状态的Jabber状态字符(SipAwayDefmsge)内填充相应的信息,用以给特定用户显示诸如电话号码等特定的SIP信息。
然后,在SIP状态的Jabber状态字符(SipAwayDefmsge)内填写其它信息并加密该Jabber status字符。
因不能保证登录Jabber服务器14的其它客户端11皆使用本发明的附加状态信息模块12,当第三方客户端11收到该状态变更消息(Online Message)之后,如该字段没有加密,有可能被第三方客户端11破解出诸如拨打的电话号码等非授权信息。所以此处对在SIP状态的Jabber状态(status)字符以及之后的字符进行加密。
所述加密算法可以是数据加密标准(Data Encryption Standard,DES)算法等,因使用的加密算法与本发明无关,所以此处不列出详细加密方法。
步骤S150,获取SIP状态的Jabber状态字符(SipAwayDefmsge)后,通过调用客户端11原有Jabber状态字符发送函数,将新的Jabber状态字符组织成字符串,并将该字符串发送到服务器端,并通知Jabber服务器14自身的状态发生变化。
获取到SIP状态的Jabber状态字符后,通过调用客户端11原有Jabber状态字符发送函数,将新的Jabber状态字符组织成一个诸如″<presence><status>”+SipAwayMsge+”</status></presence>″的字符串,并将该字符串发送到服务器端。
通知Jabber服务器14自身的Status发生了变化。
作为本发明的一可实施方式,实现该方法的源代码如下:
    char*GetAwayMsgOnSIP(IN int_sipSates)          //根据当前状态获得JABBER Status
    {
      if(_sipSates<=sip_state_regist_success     //判定当前SIP状态是否为注册SIP服
务器成功状态
          ||_sipSates>=sip_state_unregisting){   //SIP未注册SIP服务器或状态为仅注
册,则无需写入SIP状态(否则说明当前SIP有其它通话状态)
                return SipAwayDefmsge;                //返回未标记SIP状态的Jabber
status字符
                           //关于SipAwayDefmsge定义,请参阅Jabber协议文本附录1关于全局
静态标记字符一:SipAwayDefmsge
        }
        else{              //如果SIP状态为电话中,则发送相应的“Online Message”消息
            memset(&SipAwayMsge[12],0,24*sizeof(char));//保留sipAwayMsge的
Mark字段,(前12个字节)
                        //清空SipAwayMsge的SipStatus和Special字段(后24个字节)
    //关于SipAwayDefmsge定义,请参阅Jabber协议文本附录2关于全局静态标记字符二:SipAwayMsge
         //SipAwayMsge字符的值含意请参考Jabber协议文本附录3关于全局Jabber Status字符内SIP
状态标记定义
      if(_sipSates==sip_state_calling)
//如果当前sip状态为正在呼出,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_CALLING
SipAwayMsge[12]              =         (char)JABBER_ONLINE_MESSAGE_STATUS_SIP_CALLING;
else if(_sipSates==sip_state_calling_connect)
//如果当前sip状态为正在连接状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_CONNECT
SipAwayMsge[12]              =             (char)JABBER_ONLINE_MESSAGE_STATUS_SIP_CONNECT;
else if(_sipSates==sip_state_calling_dinging)
//如果当前sip状态为正在呼叫并对方已经响铃状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_DINGING
SipAwayMsge[12]              =                           (char)JABBER_ONLINE_MESSAGE_STATUS_SIP_DINGING;
else if(_sipSates==sip_state_alerting)
//如果当前sip状态为有用户打入并进入响铃状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_ALERTING
SipAwayMsge[12]              =                         (char)JABBER_ONLINE_MESSAGE_STATUS_SIP_ALERTING;
else if(_sipSates==sip_state_call)
//如果当前sip状态为呼叫其它用户并进入到通话状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_CALL
SipAwayMsge[12]=(char)21+70;
  else if(_sipSates==sip_state_answer)
//如果当前sip状态为有用户打入并进入到通话状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_ANSWER
SipAwayMsge[12]=(char)22+70;
  else if(_sipSates==sip_state_handing)
//如果当前sip状态为通过结束并正在挂断状态,则设置SipStatus为JABBER_ONLINE_MESSAGE_STATUS_SIP_HANDING
SipAwayMsge[12]=(char)31+70;
     else       //否则,说明当前SIP状态为未进行任何动作并保持成功登录状态
SipAwayMsge[12]=JABBER_ONLINE_MESSAGE_STATUS_SIP_NULL;
       SipAwayMsge[13]=0x74;//保留字段,无意义。
//以下为在SipAwayMsge内填充相应的加密信息,用以给特定用户显示诸如电话号码等特定的SIP信息。
//此处举例为填充拨打的电话号码。
//填写其它信息并加密该Jabber status字符
_snprintf(&SipAwayMsge[14],21,“%s”,cGlobalSipInfo);//此处的cGlobalSipInfo为全局的SIP信息,此处为拨打的电话号码。
DesEncrypt(&SipAwayMsge[12],23);//此处采用Des加密解密算法,因该算法与本专利无关,所以此处不列出详细加密方法。
......
        return &SipAwayMsge[0];
   }
}
//
步骤S200,当服务器收到这个状态变更消息之后,将该状态变更消息转发给所有订阅该用户状态并被许可的其它用户客户端11内,转发给该用户好友列表上所有上线的Jabber客户端11。
转发该状态变更消息的过程是Jabber系统已经实现的现有技术,因此,在本发明实施例中不再一一详细描述。
步骤S300,客户端11在接收到状态变更消息之后,重新解析并获取SIP状态并显示该动态字符串,并显示解析出的SIP状态(status)。
步骤S300具体包括下列步骤:
S310:客户端11接收状态(Status)变更处理函数,当收到其它好友的状态(status)变更消息之后,调用GetExpandStatusInfo函数重新解析该状态(Status)值。
GetExpandStatusInfo(char*_StatusInfo)
S320:在GetExpandStatusInfo函数内,通过状态(Status)值与SIP状态的Jabber状态字符(SipAwayDefmsge)的比较,判断该字符是否包含有SIP状态的SIP信息。
SipAwayDefmsge字符的定义请参阅Jabber协议文本附录1关于全局静态标记字符一:SipAwayDefmsge的描述,本发明实施例中不再一一详细描述。
比较方式为状态(Status)值与SipAwayDefmsge比较0~12字节,如果完全相同,则说明该状态(status)消息包含SIP状态的SIP信息。如果不能进行匹配,则返回到客户端11原有处理JABBER status函数。
实现代码如下:
If(memcmp(&SipAwayDefmsge[0],&_StatusInfo[0],12)!=0){
   Return;
}
S330,将SIP状态的Jabber状态字符解密解析,获取SIP状态并显示动态字符串。
具体包括下列步骤:
步骤S331,将收到的SIP状态的Jabber状态字符使用DES算法进行解密;
实现代码如下:
DesDecrypt(&_StatusInfo[12],23);//此处采用Des加密解密算法,因该算法与本专利无关,所以此处不列出详细加密方法。
步骤S332,取出对方SIP状态和SIP的信息;
本发明实施例中该SIP信息包含对方拨打的电话号码。
步骤S333,取出服务器的SIP状态;
取出方法为Get_SipStatus_By_Jabber_Status,具体请参阅Jabber协议文本附录4关于通过对方JABBER Status内的SipStatus字段获取对方SIP status的方法,是一种现有技术,本发明实施例中不再一一详细描述。
实现代码如下:
sipState=Get_SipStatus_By_Jabber_Status(_StatusInfo[12]);
步骤S334,取出Jabber状态字符中SIP状态的特殊消息字段(special),解密之后,可直接通过拷贝的方式获得该字符串。
实现代码如下:
sipSpecial=strdup(&_StatusInfo[14]);
S340:根据自身的权限,显示解析出的SIP状态(status)。
一般地,在Jabber服务器14内,为每一个用户都提供一份叫做VCard的个人基本资料。
如果Jabber服务器14通过LDAP(Lightweight Directory Access Protocol)方式管理用户,用户自身不能申请或配置个人关键信息,所有的VCard信息都储存在管理严格的LDAP服务器上。用户通过取得个人VCard,取得VCard内popedom字段值,客户端11通过该popedom字段值判断自己是否拥有权限显示对方SIP特殊消息(special)字段的权利。
popedom字段值判断时,比较双方JABBER VCard popedom字段大小,如果自身popedom值高于对方,则显示SIP special字段,否则不显示。
实现代码如下:
      If(mGlobal.popedom>users.popedom){          //将双方的popedom值进行比较
         SetUserSIPSpecial(users,sipSpecial);   //如果权限许可,则显示对方SIP
special,(在此例中为显示出对方正在拨打的电话)
    }
    SetUserSIPState(users,sipState);                //根据取出的sipState,显示对方
SIP状态,变更对方状态图标等操作
如果服务器未采用LDAP验证方式登录,即用户可以自由修改自身VCard属性,服务器端无法统一管理个人权限,则可以通过发放不同版本的客户端11软件实现,高权限的版本包含处理状态(Status)内特殊消息(special)字段的功能,而低版本不包含。
因为LDAP验证方式以及Jabber的VCard获取与本发明无关,因此不再一一详细描述。
通过本发明的方法,可以在Jabber客户端11很方便的显示出用户的特定状态。
如4图所示,显示的是一个Jabber客户端11好友列表的两次截图,图左侧为默认状态,当该好友拨打电话时,通过发送SIP状态的状态变更消息(Online Message)消息,可以实现如右侧显示的正在通话(On the phone)状态。
通过以上结合附图对本发明具体实施例的描述,本发明的其它方面及特征对本领域的技术人员而言是显而易见的。
本发明的即时通讯用户状态显示的系统和方法,通过对Jabber系统中的在线状态文字的重新解析,实现联系人特殊状态的显示,以及针对这些特殊状态传送一些特定参数,如:显示用户正在通话中的状态,并且显示出正在通话中的电话的号码。而且,其可以通过Jabber系统获得SIP协议的信息;通过对原有Jabber系统的在线状态文字的重新解析,并配合加密措施,可极大地扩展客户端的功能。
以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行解释。

Claims (12)

1、一种即时通讯用户状态显示系统,包括多个客户端,至少一Jabber服务器和至少一SIP服务器,其特征在于,还包括一附加状态信息模块,用于在状态通知-订阅元素的状态元素发送状态变更消息时,在状态元素的消息后附加至少一SIP状态的Jabber状态字符标识,所述标识用于标记Jabber服务器能够识别的用户请求显示的SIP状态信息。
2、根据权利要求1所述的即时通讯用户状态显示系统,其特征在于,所述标识包括至少一标记字段,至少一SIP状态字段,以及至少一特殊消息字段。
3、根据权利要求1或2所述的即时通讯用户状态显示系统,其特征在于,所述SIP状态或者为正在呼出状态,或者为正在连接状态,或者为正在呼叫并对方已经响铃状态,或者为有用户打入并进入响铃状态,或者为呼叫其它用户并进入到通话状态,或者为有用户打入并进入到通话状态,或者为通话结束并正在挂断状态。
4、一种即时通讯用户状态显示方法,其特征在于,包括下列步骤:
步骤A,当客户端拨出或接入电话时,则Jabber系统发送状态变更消息到服务器,并在状态变更消息内嵌入包括至少一SIP状态的Jabber状态字符标识的信息内容,所述标识用于标记Jabber服务器能够识别的用户请求显示的SIP状态信息;
步骤B,当服务器收到所述状态变更消息之后,将所述状态变更消息转发给所有订阅该用户状态并被许可的其它用户客户端内;
步骤C,客户端在接收到状态变更消息之后,重新解析并获取SIP状态并显示该动态字符串,并显示解析出的SIP状态。
5、根据权利要求4所述的即时通讯用户状态显示方法,其特征在于,所述步骤A中,所述在状态变更消息内嵌入包括至少一SIP状态的Jabber状态字符标识的信息内容,包括如下步骤:
步骤A1,Jabber客户端内的SIP状态发生变化时,获得并发送相应的状态变更消息到Jabber服务器;
步骤A2,Jabber服务器根据当前的SIP状态获得应发送的状态变更消息;
步骤A3,根据用户当前SIP状态,准备Jabber服务器的状态变更消息需要的字符;
步骤A4,在SIP状态的Jabber状态字符内填充相应的信息;
步骤A5,获取SIP状态的Jabber状态字符后,通过调用客户端原有Jabber状态字符发送函数,将新的Jabber状态字符组织成字符串,并将该字符串发送到服务器端,并通知Jabber服务器自身的状态发生变化。
6、根据权利要求5所述的即时通讯用户状态显示方法,其特征在于,所述步骤A2中,Jabber服务器根据当前的SIP状态获得应发送的状态变更消息,包括如下步骤:
步骤A21,判定当前SIP状态是否为注册SIP服务器成功状态;
步骤A22,如果SIP未注册SIP服务器或状态为仅注册,则无需写入SIP状态,返回未标记SIP状态的Jabber状态字符;
步骤A23,否则说明当前SIP有变更状态,则发送相应的状态变更消息,并清空SIP状态的Jabber状态字符的SIP状态字段和特殊消息字段。
7、根据权利要求5所述的即时通讯用户状态显示方法,其特征在于,所述步骤A3中,所述SIP状态或者为正在呼出状态,或者为正在连接状态,或者为正在呼叫并对方已经响铃状态,或者为有用户打入并进入响铃状态,或者为呼叫其它用户并进入到通话状态,或者为有用户打入并进入到通话状态,或者为通话结束并正在挂断状态。
8、根据权利要求4所述的即时通讯用户状态显示方法,其特征在于,所述步骤C包括如下步骤:
步骤C1,当收到状态变更消息之后,客户端接收状态变更处理函数,重新解析该状态值;
步骤C2,通过与SIP状态的Jabber状态字符的比较,判断该字符是否包含有SIP状态的SIP信息;
步骤C3,将SIP状态的Jabber状态字符解密解析,获取SIP状态并显示动态字符串。
9、根据权利要求8所述的即时通讯用户状态显示方法,其特征在于,所述步骤C2中,判断该字符是否包含有SIP状态的SIP信息,是指:
状态值与SIP状态的Jabber状态字符比较0~12字节,如果完全相同,则说明该状态消息包含SIP状态的SIP信息。如果不能进行匹配,则返回到客户端原有处理JABBER status函数。
10、根据权利要求8所述的即时通讯用户状态显示方法,其特征在于,所述步骤C3包括如下步骤:
步骤C31,取出对方SIP状态和SIP的信息;
步骤C32,取出服务器的SIP状态;
步骤C33,取出Jabber状态字符中SIP状态的特殊消息字段,获得该字符串;
步骤C34,根据自身的权限,显示解析出的SIP状态。
11、根据权利要求4所述的即时通讯用户状态显示方法,其特征在于,所述信息内容为加密的信息内容。
12、根据权利要求11所述的即时通讯用户状态显示方法,其特征在于,所述加密为DES加密。
CN 200710118658 2007-07-11 2007-07-11 一种即时通讯用户状态显示的系统和方法 Active CN101345742B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200710118658 CN101345742B (zh) 2007-07-11 2007-07-11 一种即时通讯用户状态显示的系统和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200710118658 CN101345742B (zh) 2007-07-11 2007-07-11 一种即时通讯用户状态显示的系统和方法

Publications (2)

Publication Number Publication Date
CN101345742A true CN101345742A (zh) 2009-01-14
CN101345742B CN101345742B (zh) 2012-12-12

Family

ID=40247631

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200710118658 Active CN101345742B (zh) 2007-07-11 2007-07-11 一种即时通讯用户状态显示的系统和方法

Country Status (1)

Country Link
CN (1) CN101345742B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102255821A (zh) * 2010-05-20 2011-11-23 腾讯科技(深圳)有限公司 一种联系人的状态输出方法和系统
CN103067262A (zh) * 2013-01-23 2013-04-24 深圳市六度人和科技有限公司 在即时通信客户端提示用户通话状态的系统和方法
CN103516691A (zh) * 2012-06-28 2014-01-15 鸿富锦精密工业(深圳)有限公司 Sip会话系统及sip终端状态通知方法
WO2014036903A1 (en) * 2012-09-04 2014-03-13 Huawei Technologies Co., Ltd. Efficient presence distribution mechanism for a large enterprise
CN112035501A (zh) * 2020-09-01 2020-12-04 中国银行股份有限公司 用户标识的更新方法、装置和设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100367735C (zh) * 2001-03-26 2008-02-06 腾讯科技(深圳)有限公司 一种显示即时通信用户状态信息的方法
CN1835440B (zh) * 2005-03-19 2011-09-14 腾讯科技(深圳)有限公司 一种在即时通信系统中显示通信状态的方法

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102255821A (zh) * 2010-05-20 2011-11-23 腾讯科技(深圳)有限公司 一种联系人的状态输出方法和系统
WO2011143965A1 (zh) * 2010-05-20 2011-11-24 腾讯科技(深圳)有限公司 一种联系人状态显示方法和系统
CN102255821B (zh) * 2010-05-20 2015-08-05 腾讯科技(深圳)有限公司 一种联系人的状态输出方法和系统
CN103516691A (zh) * 2012-06-28 2014-01-15 鸿富锦精密工业(深圳)有限公司 Sip会话系统及sip终端状态通知方法
WO2014036903A1 (en) * 2012-09-04 2014-03-13 Huawei Technologies Co., Ltd. Efficient presence distribution mechanism for a large enterprise
US9299111B2 (en) 2012-09-04 2016-03-29 Futurewei Technologies, Inc. Efficient presence distribution mechanism for a large enterprise
CN103067262A (zh) * 2013-01-23 2013-04-24 深圳市六度人和科技有限公司 在即时通信客户端提示用户通话状态的系统和方法
CN112035501A (zh) * 2020-09-01 2020-12-04 中国银行股份有限公司 用户标识的更新方法、装置和设备
CN112035501B (zh) * 2020-09-01 2023-09-19 中国银行股份有限公司 用户标识的更新方法、装置和设备

Also Published As

Publication number Publication date
CN101345742B (zh) 2012-12-12

Similar Documents

Publication Publication Date Title
KR100966959B1 (ko) 단말기 디바이스, 네트워크 디바이스, 메시지 검색 방법 및 컴퓨터 프로그램 저장 제품
CA2436061C (en) System and method for facilitating communication using presence and communication system
KR101106875B1 (ko) 무선 이동 단말기들을 위한 음성 및 텍스트 그룹 챗 기술들
JP4118800B2 (ja) プレゼンス表示システム及びゲートウエイ装置
JP4299242B2 (ja) プレゼンス情報の更新
US7385992B1 (en) Internet caller-ID integration
JP2005318503A (ja) プレゼンスサーバ、セッション制御サーバ、パケット中継システム、サーバ、及びシステム
WO2004053637A2 (en) Message screening system and method
TW200845649A (en) System and method for establishing conference events
KR20120040231A (ko) 인스턴트 메시징 서비스와 단문 메시지 서비스 간의 연동을 위한 방법 및 시스템
FR2911459A1 (fr) Procede de signalisation permettant la prise en compte de la raison de l&#39;appel
CN101345742B (zh) 一种即时通讯用户状态显示的系统和方法
US8300628B2 (en) Method and system for transmitting supplementary data, and communication terminal
CN102144380A (zh) 端对端地址转移
JP4206106B2 (ja) 通話接続方法、通話接続システムおよび通話接続プログラム
JP2009530729A (ja) インスタント・メッセージを端末に向けて送る方法及びシステム
CN100581197C (zh) 一种获取媒体特征信息的方法和系统以及终端设备
CN101102583A (zh) 用户终端标识的使用方法及装置
KR100475539B1 (ko) 무선 인스턴트 메신저를 이용한 실시간 음성정보 전송 방법 및 이를 구현한 프로그램이 저장된 기록매체
KR20010096157A (ko) 인터넷 인스턴트 메신저 서버를 위한 메시지 중계 시스템
WO2008148339A1 (fr) Procédé, agent d&#39;utilisateur servant à traiter un message d&#39;un modèle de dispositif de messagerie
GB2433375A (en) Caller ID in an internet protocol (IP) based communications network
KR100642215B1 (ko) Sip 프로토콜을 이용한 프리젠스 서비스 방법 및 이를 위한 확장된 프리젠스 정보를 위한 xml 데이터 구조가 저장되는 기록매체
JP2009288894A (ja) Imクライアント装置、imサーバ、imシステムおよび方法
JP2007041849A (ja) プレゼンスサーバ及びプレゼンス情報管理システム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: FORTINET INC.

Free format text: FORMER OWNER: FORTINET INFORMATION TECHNOLOGY (BEIJING) CO., LTD.

Effective date: 20090925

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20090925

Address after: California, USA

Applicant after: Fortinet, Inc.

Address before: Room 7, digital media building, No. 507 information road, Beijing, Haidian District, China: 100085

Applicant before: Fortinet,Inc.

C14 Grant of patent or utility model
GR01 Patent grant