哪一天 哪一天 我有吃有穿有住有钱 不再流浪 流浪
« »
April 16, 2009程序设计

150 views

jabber协议概述中文版(转载四)

5. 元素

信息/查询(IQ)在Jabber中在两个实体间构建一个根本的会话,并且允许实体间来回传送XML格式的请求和响应。信息/查询主要的用处是取得或设置公共的用户信息,比如名字,电子邮件,地址等等。但它的灵活设计使得任何种类的会话都可以发生。任何通过一个Jabber ID标识的实体都能通过一个IQ与其它实体进行会话。
5.1. “type”属性

元素的“type”属性用于决定信息/查询是请求还是响应。下面是“type”属性的可用值:
5.1.1. type=”error”

表示查询失败。实际错误在元素的子元素中描述。

例子:

Forbidden
5.1.2. type=”get”

找回指派给一个查询名字空间的信息。如果没有设置属性,默认情况,这个属性包含在查询中。一个type=”get”的元素由一个子元素构成,这个子元素通常是,但也可以是或另一个已有的子元素。不过,指定的子元素必须左空,以便接收一个用户所需提供的信息的空间的清单。一个成功的get查询的结果type=”result”的元素,是元素嵌套在包含了所需信息的指定子元素(如或)。

例子:
5.1.3. type=”result”

表示包是一个type=”get”或type=”set”的查询的成功响应。这个成功查询的结果是一个type=”result”的元素,该元素嵌套在一个包含所查询的信息的子元素中(如、)。一个成功的查询或获取查询结果的返回是一个空的type=”result”的元素。一个不成功的返回是一个type=”error”的元素。通常与“id”属性的获取、设定查询有关。

例子:

vCard data goes here
5.1.4. type=”set”

表示包是对设值或更改现有数据值。一个type=”set”的元素总是包含一个指定的子元素,通常是,也可以是或者其它可以接受的子元素。一个设置命令查询的成功返回是一个空的type=”result”的元素。

例子:

vCard data goes here
5.2. 其它属性

除了“type”属性外,IQ元素还可以通过下面的属性进行修改。
5.2.1. “from”属性

表示iq包的发送者。从XML观点来说,这个属性是所有元素所必须的,实际应用中这个属性是服务器来增加和修改的(为防止某些欺骗),因此客户端的开发人员不需要过多关注这个属性。

例子:
5.2.2. “id”属性

一个iq包只有唯一的标识。Jabber客户端或客户库生成“id”属性,客户端通过它来标识包,以完成对包的跟踪(如:一个type=”result”对应一个type=”get”或type=”set”)。“id”属性是可选的,并且不能用于系统的其它地方。

例子:
5.2.3 “to”属性

表示iq包的接收者。在Jabber客户端,对应“to”属性的Jabber ID的格式为user@host/resource。user@host也是可以的,如果用户在线,user@host将被置换成user@host/resource,如果用户不在线,user@host将被直接指向一个离线模块(对于类似服务器端网关这种非用户实体,情况又有所不同,因为它们不拥有资源,并且只是简单通过Jabber ID的一个“server”端口进行标识。Jud.jabber.org——Jabber用户目录就是这样一个例子)。如果包没有属性,服务器将对该包进行处理。

例子:
5.3 的子元素

下面介绍元素的子元素。
5.3.1.

当iq的属性类型被设置为“error”时,将用到本属性。错误代码根据一个含有错误数的“type”属性进行定义,员司包含该错误的文本描述。比如,下面就是一个坏请求:

Bad Request

在附录中,列有错误编码及其对应的错误描述。
5.3.2.

元素为客户端-服务器之间交互提供一层安全保护。它被用户jabber:iq:register和jabber:iq:search名字空间中。

当一个客户端发起一个与服务其之间的交互时,服务器将发送一个包含一个唯一值的给客户端。客户端在返回的消息中,包含上诉唯一值到子元素中。这样,服务器就认为该客户端时接收到原来密码的同一实体。
5.3.3.

元素中的子元素定义所执行的查询的类型。特殊情况下,查询可以拥有一个特殊的名字空间,这个名字空间是一个通过“xmlns”属性定义的子元素。一个元素中只能有一个子元素。

下面的例子是当我通过我的Linux机器上的Grabber客户端登陆到服务器上,将出现的XML。

stpeter

Gabber

f1e881517e9917bb815fed112d81d32b4e4b3aed

就象你看到的那样,认证查询通过客户端认证名字空间(jabber:iq:auth)向服务器发送认证信息。一般,Jabber核心协议保留jabber:iq:*这样的名字空间。而开发者可以通过增加jabber:iq:*名字空间对Jabber核心进行扩展。这些将在下面的名字空间中进行更完整的描述。

一个空子元素可以与元素一起发送,这样可以找回与子元素中指定的名字空间相关的一个Jabber实体的信息。比如,找回一个客户端的花名册(“联系人名单”),下面的XML可以被发送:

相关日志

日志信息 »

该日志于2009-04-16 23:23由 admin 发表在程序设计分类下, 通告目前不可用,你可以至底部留下评论。

主机推荐 »

赞助商链接 »

没有评论

发表评论 »

返回顶部