专利名称:一种即时通讯用户状态显示的系统和方法
技术领域:
本发明涉及计算机网络即时通讯领域,特别是涉及一种即时通讯用户状态 显示的系统和方法。
背景技术:
即时通讯(Instant Messaging, IM)系统是通过即时通讯技术来实现在线 聊天、交流的软件。透过即时通讯功能,你可以知道你的亲友是否正在线上, 及与他们即时通讯。即时通讯比传送电子邮件所需时间更短,而且比拨电话更 方便,无疑是计算机网络年代最方便的通讯方式。
即时通讯(IM)是一个终端服务,允许两人或多人使用网路即时的传递 文字讯息、档案、语音与视频交流。即时通讯是一个终端连往一个即时通讯网 路的服务,不同于e-mail,它的交谈是即时的。
在计算机网络上,现有的即时通讯系统包括有MSN Messenger、 AOL Instant 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 识别符(JabberIDs)之间更一般的消息。
信息-查询(<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/〉)元素,这些元素包含人能看懂的关于该可用类型的
描述o
例如
from="juliet@capulet.com/balcony"to="romeo@montague.net/orchard"> <show>away</ show>
<status〉Stay but a little, I will come again.</status> </presence>
其中,显示(<sh0W/>)元素的可用值为
away—一Jabber用户或实体在线,但不能马上联系上; chat—一Jabber用户或实体在线并有兴趣聊天;
dnd—一Jabber用户或实体在线,但不想被打扰("dnd"表示"do not disturb");
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>)元 素表示的状态)。当客户端需向其他用户发送诸如会话发起协议(Session Initiation 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 状态字符标识的信息内容,包括如下步骤
步骤Al, 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包括如下步骤
步骤Cl,当收到状态变更消息之后,客户端接收状态变更处理函数,重 新解析该状态值;
步骤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,当客户端ll拨出或接入电话时,则Jabber系统发送状态变更消息 (Online Message)到服务器,并在状态变更消息(Online Message)内嵌入包 括至少一 SIP状态的Jabber状态字符标识的信息内容,所述标识用于标记 Jabber服务器14能够识别的用户请求显示的SIP状态信息;
本实施例中,所述SIP状态信息是记录状态以及该次拨叫号码的信息。
较佳地,所述信息内容为加密的信息内容。
所述在状态变更消息(Online Message)内嵌入包括至少一 SIP状态的 Jabber状态字符标识的信息内容,包括如下步骤
步骤SllO, Jabber客户端11 (Jabber Client)内的SIP状态发生变化时, 获得并发送相应的状态变更消息(Online Message)至J 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—MESS AGE—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状态字符(SipAwayDefinsge)内填充相 应的信息,用以给特定用户显示诸如电话号码等特定的SIP信息。
然后,在SIP状态的Jabber状态字符(SipAwayDefmsge)内填写其它信 息并加密该Jabber status字符。
因不能保证登录Jabber服务器14的其它客户端11皆使用本发明的附加状 态信息模块12,当第三方客户端11收到该状态变更消息(Online Message) 之后,如该字段没有加密,有可能被第三方客户端11破解出诸如拨打的电话 号码等非授权信息。所以此处对在SIP状态的Jabber状态(status)字符以及 之后的字符进行加密。
所述加密算法可以是数据加密标准(Data Encryption Standard, DES)算 法等,因使用的加密算法与本发明无关,所以此处不列出详细加密方法。
步骤S150,获取SIP状态的Jabber状态字符(SipAwayDefinsge)后,通 过调用客户端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 SipAwayDefinsge; 〃返回未标记sip状态的Jabber
status字符
〃关于SipAwayDefinsge定义,请参阅Jabber协议文本附录1关于全局 静态标记字符一SipAwayDefinsge
else { 〃如果SIP状态为电话中,则发送相应的"Online Message"消息
memset(&SipAwayMsge[12], 0 , 24*sizeof(char)); 〃保留SipAwayMsge的
Mark字段,(前12个字节)
〃清空SipAwayMsge的SipStatus和Special字段(后24个字节) 〃关于SipAwayDefinsge定义,请参阅Jabber协议文本附录2关于全局静态标记字符二: SipAwayMsge 〃SipAwayMsge字符的值含意请参考Jabber协议文本附录3关于全局Jabber Status字符内SIP 状态标记定义
if (_sipSates == sip—state—calling)
〃如果当前 sip 状态为正在呼出,贝U设置 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 LsipSates = 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
信息o
〃此处举例为填充拨打的电话号码。 //填写其它信息并加密该Jabber status字符
—snprintf(&SipAwayMsge[14] ,21,"0/0s", cGlobalSipInfo); 〃 此处的
cGlobalSipInfo为全局的SIP信息,此处为拨打的电话号码。
DesEncrypt(&SipAwayMsge[12], 23); 〃此处采用Des加密解密算法,因该算法与本专 利无关,所以此处不列出详细加密方法。
return &SipAwayMsge
;
〃
步骤S200,当服务器收到这个状态变更消息之后,将该状态变更消息转 发给所有订阅该用户状态并被许可的其它用户客户端ll内,转发给该用户好 友列表上所有上线的Jabber客户端11。
转发该状态变更消息的过程是Jabber系统已经实现的现有技术,因此,在 本发明实施例中不再一一详细描述。
步骤S300,客户端11在接收到状态变更消息之后,重新解析并获取SIP 状态并显示该动态字符串,并显示解析出的SIP状态(status)。
步骤S300具体包括下列步骤
S310:客户端11接收状态(Status)变更处理函数,当收到其它好友的 状态(status)变更消息之后,调用GetExpandStatusInfo函数重新解析该状态 (Status)值。GetExpandStatusInfo(char *—Statuslnfo)
S320:在Ge伍xpandStatusInfo函数内,通过状态(Status)值与SIP状态 的Jabber状态字符(SipAwayDefmsge)的比较,判断该字符是否包含有SIP 状态的SIP信息。
SipAwayDefmsge字符的定义请参阅Jabber协议文本附录1关于全局静态 标记字符一SipAwayDefmsge的描述,本发明实施例中不再——详细描述。
比较方式为状态(Status)值与SipAwayDefmsge比较0 12字节,如果 完全相同,则说明该状态(status)消息包含SIP状态的SIP信息。如果不能 进行匹配,则返回到客户端11原有处理JABBER status函数。
实现代码如下
If (memcmp (&SipAwayDefmsge
, &—StatusInfo[O], 12) != 0){ Return;
S330,将SIP状态的Jabber状态字符解密解析,获取SIP状态并显示动态 字符串。
具体包括下列步骤
步骤S331 ,将收到的SIP状态的Jabber状态字符使用DES算法进行解密; 实现代码如下
DesDecrypt(&—Statuslnfo [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系统的在线状态文字的重新解析,并配合加密措施,可极大地扩展客 户端的功能。
以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只 是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行 解释。
权利要求
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状态 字符标识的信息内容,包括如下步骤步骤Al, 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包括如下步骤步骤Cl,当收到状态变更消息之后,客户端接收状态变更处理函数,重 新解析该状态值;步骤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、 根据权利要求ll所述的即时通讯用户状态显示方法,其特征在于, 所述加密为DES加密。
全文摘要
本发明公开了一种即时通讯用户状态显示的系统和方法。该系统包括多个客户端,至少一Jabber服务器和至少一SIP服务器,还包括一附加状态信息模块,用于在状态通知-订阅元素的状态元素发送状态变更消息时,在状态元素的消息后附加至少一SIP状态的Jabber状态字符标识,所述标识用于标记Jabber服务器能够识别的用户请求显示的SIP状态信息。所述标识包括至少一标记字段,至少一SIP状态字段,以及至少一特殊消息字段。其通过对Jabber系统的在线状态文字的重新解析,实现联系人特殊状态的显示,以及实现一些特殊的功能,可极大地扩展客户端的功能。
文档编号H04L29/06GK101345742SQ200710118658
公开日2009年1月14日 申请日期2007年7月11日 优先权日2007年7月11日
发明者迅 吕 申请人:飞塔信息科技(北京)有限公司