archive-org.com » ORG » J » JABBERCN.ORG

Total: 303

Choose link from "Titles, links and description words view":

Or switch to "Titles and links view".
  • XEP-0016 - Jabber/XMPP中文翻译计划
    这个 list 元素必须包含一个或多个 item 元素 通过在该列表中包含所有元素 而非 增量 来定义该用户期待的修改 示例23 客户端编辑一个隐私列表 iq from romeo example net orchard type set id edit1 query xmlns jabber iq privacy list name public item type jid value tybalt example com action deny order 3 item type jid value paris example org action deny order 5 item action allow order 68 list query iq 示例24 服务器承认列表编辑成功 iq type result id edit1 to romeo example net orchard 注意 对于任何给定的条目 order 属性的值不是固定 所以在前一个例子中 如果用户想在 tybalt example com 条目和 paris example org 条目之间增加4个条目 该用户的客户端必须在提交该列表给服务器之前重新给条目编号 现在服务器必须发送一个 privacy list push 给所有已连接资源 示例25 隐私列表推送列表编辑 iq to romeo example net orchard type set id push1 query xmlns jabber iq privacy list name public query iq iq to romeo example net home type set id push2 query xmlns jabber iq privacy list name public query iq 根据 XMPP核心 7 中定义的IQ节的语义 每个已连接资源必须返回一个IQ result给服务器 如下 示例26 承认收到隐私列表推送 iq from romeo example net orchard type result id push1 iq from romeo example net home type result id push2 新增隐私列表 新增一个新的列表和编辑一个现有的列表使用相同的协议 如果该列表名字和现有列表匹配 新增一个列表的请求将覆盖那个旧的列表 和列表编辑一样 服务器也必须发送一个 隐私列表推送 给所有已连接资源 移除隐私列表 为了移除一个隐私列表 该用户必须发送一个类型为 set 含有 jabber iq privacy 命名空间限定的 query 元素的IQ节 该节包含一个空的 list 子元素 该子元素拥有一个 name 属性 属性值为用户将要移除的列表名称 示例27 客户端移除一个隐私列表 iq from romeo example net orchard type set id remove1 query xmlns jabber iq privacy list name private query iq 示例28 服务器承认列表移除成功 iq type result id remove1 to romeo example net orchard 如果一个用户场尝试移除一个当前被应用于至少一个和正在发送的资源不同的资源的列表 服务器必须返回一个 conflict 节错误给该用户 即 该用户在尝试移除它之前必须首先把另一个列表设置为active或default 如果该用户尝试移除一个列表 但是那个名字所代表的列表不存在 服务器必须返回一个 item not found 节错误给该用户 如果该用户尝试在同一个请求中移除多个列表 服务器必须返回一个 bad request 节错误给该用户 屏蔽消息 服务器端的隐私列表允许一个用户基于实体的JID 名册组 或订阅状态 或全局地 来屏蔽从其他实体来的消息 以下例子展示了该协议 注意 为了简洁起见 类型为 result 的IQ节不放在接下来的例子中 隐私列表推送 也不出现 示例29 用户基于JID屏蔽 iq from romeo example net orchard type set id msg1 query xmlns jabber iq privacy list name message jid example item type jid value tybalt example com action deny order 3 message item list query iq 作为创建和应用前面的列表的结果 该用户将不会从指定JID的实体收到消息 示例30 用户基于名册组屏蔽 iq from romeo example net orchard type set id msg2 query xmlns jabber iq privacy list name message group example item type group value Enemies action deny order 4 message item list query iq 作为创建和应用前面的列表的结果 该用户将不会从指定名册组中的任何实体收到消息 示例31 用户基于订阅类型屏蔽 iq from romeo example net orchard type set id msg3 query xmlns jabber iq privacy list name message sub example item type subscription value none action deny order 5 message item list query iq 作为创建和应用前面的列表的结果 该用户将不会从指定订阅类型的任何实体收到消息 示例32 用户全局屏蔽 iq from romeo example net orchard type set id msg4 query xmlns jabber iq privacy list name message global example item action deny order 6 message item list query iq 作为创建和应用前面的列表的结果 该用户将不会从任何其他用户收到消息 屏蔽入站出席信息通知 服务器端隐私列表允许用户基于实体的JID 名册组 或订阅状态 或全局地 屏蔽从其他实体来的出席信息通知 以下例子展示了该协议 注意 出席信息通知不包括出席信息订阅 只包括因为该用户当前订阅了某个联系人的出席信息 所以广播给该用户的出席信息 所以只包括没有 type 属性或 type unavailable 的出席信息节 示例33 用户基于JID屏蔽 iq from romeo example net orchard type set id presin1 query xmlns jabber iq privacy list name presin jid example item type jid value tybalt example com action deny order 7 presence in item list query iq 作为创建和应用前面的列表的结果 该用户将不会从指定JID的实体收到出席信息通知 示例34 用户基于名册组屏蔽 iq from romeo example net orchard type set id presin2 query xmlns jabber iq privacy list name presin group example item type group value Enemies action deny order 8 presence in item list query iq 作为创建和应用前面的列表的结果 该用户将不会从指定名册组中的任何实体收到出席信息通知 示例35 用户基于订阅类型屏蔽 iq from romeo example net orchard type set id presin3 query xmlns jabber iq privacy list name presin sub example item type subscription value to action deny order 9 presence in item list query iq 作为创建和应用前面的列表的结果 该用户将不会从指定订阅类型的任何实体收到出席信息通知 示例36 用户全局屏蔽 iq from romeo example net orchard type set id presin4 query xmlns jabber iq privacy list name presin global example item action deny order 11 presence in item list query iq 作为创建和应用前面的列表的结果 该用户将不会从任何其他用户收到出席信息通知 注意 如果一个客户端屏蔽了从一个以前可用的实体来的出席信息通知 该用户的服务器应该代替那个联系人发送unavailable出席信息给该用户 译者注 这合适吗 合适吗 合适吗 屏蔽出站出席信息通知 服务器端隐私列表允许用户基于实体的JID 名册组 或订阅状态 或全局地 屏蔽发给其他实体的出席信息通知 以下例子展示了该协议 注意 出席信息通知不包括出席信息订阅 只包括因为那些联系人当前订阅了该用户的出席信息 所以广播给那些联系人的出席信息 所以只包括没有 type 属性或 type unavailable 的出席信息节 示例37 用户基于JID屏蔽 iq from romeo example net orchard type set id presout1 query xmlns jabber iq privacy list name presout jid example item type jid value tybalt example com action deny order 13 presence out item list query iq 作为创建和应用前面的列表的结果 该用户将不会向指定JID的实体发送出席信息通知 示例38 用户基于名册组屏蔽 iq from romeo example net orchard type set id presout2 query xmlns jabber iq privacy list name presout group example item type group value Enemies action deny order 15 presence out item list query iq 作为创建和应用前面的列表的结果 该用户将不会向指定名册组中的任何实体发送出席信息通知 示例39 用户基于订阅类型屏蔽 iq from romeo example net orchard type set id presout3 query xmlns jabber iq privacy list name presout sub example item type subscription value from action deny order 17 presence out item list query iq 作为创建和应用前面的列表的结果 该用户将不会向指定订阅类型的任何实体发送出席信息通知 40 用户全局屏蔽 iq from romeo example net orchard type set id presout4 query xmlns jabber iq privacy list name presout global example item action deny order 23 presence out item list query iq 作为创建和应用前面的列表的结果 该用户将不会向任何其他用户发送出席信息通知 注意 如果一个客户端屏蔽了对一个联系人的出站出席信息通知 该用户的服务器必须发送unavailable出席信息给该联系人 但仅限于根据 RFC 6121 定义的规则被允许从该用户收到出席信息通知的联系人 屏蔽IQ节 服务器端隐私列表允许用户基于实体的JID 名册组 或订阅状态 或全局地 屏蔽从其他实体发来的IQ节 以下例子展示了该协议 示例41 用户基于JID屏蔽 iq from romeo example net orchard type set id iq1 query xmlns jabber iq privacy list name iq jid example item type jid value tybalt example com action deny order 29 iq item list query iq 作为创建和应用前面的列表的结果 该用户将不会收到从指定JID的实体发来的IQ节 示例42 用户基于名册组屏蔽 iq from romeo example net orchard type set id iq2 query xmlns jabber iq privacy list name iq group example item type group value Enemies action deny order 31 iq item list query iq 作为创建和应用前面的列表的结果 该用户将不会从指定名册组中的任何实体收到IQ节 示例43 用户基于订阅类型屏蔽 iq from romeo example net orchard type set id iq3 query xmlns jabber iq privacy list name iq sub example item type subscription value none action deny order 17 iq item list query iq 作为创建和应用前面的列表的结果 该用户将不会从指定订阅类型的任何实体收到IQ节 示例44 用户全局屏蔽 iq from romeo example net orchard type set id iq4 query xmlns jabber iq privacy list name iq global example item action deny order 1 iq item list query iq 作为创建和应用前面的列表的结果 该用户将不会从任何其他用户收到IQ节 屏蔽所有通讯 服务器端隐私列表允许用户基于实体的JID 名册组 或订阅状态 或全局地 屏蔽从其他实体收到或发来的节 注意这包括了订阅相关的被 屏蔽入站出席信息通知 排除了的出席信息节 以下例子展示了该协议 示例45 用户基于JID屏蔽 iq from romeo example net orchard type set id all1 query xmlns jabber iq privacy list name all jid example item type jid value tybalt example com action deny order 23 list query iq 作为创建和应用前面的列表的结果 该用户将不会从指定JID的实体收到或发送任何节 示例46 用户基于名册组屏蔽 iq from romeo example net orchard type set id all2 query xmlns jabber iq privacy list name all group example item type group value Enemies action deny order 13 list query iq 作为创建和应用前面的列表的结果

    Original URL path: http://wiki.jabbercn.org/XEP-0016 (2016-04-25)
    Open archived version from archive


  • XEP-0030 - Jabber/XMPP中文翻译计划
    from catalog shakespeare lit to romeo montague net orchard id items2 query xmlns http jabber org protocol disco items item jid catalog shakespeare lit node books name Books by and about Shakespeare item jid catalog shakespeare lit node clothing name Wear your literary taste with pride item jid catalog shakespeare lit node music name Music from the time of Shakespeare query iq 在返回上面的查询时 也许有更多的节点与 第一级 节点相关联 比如 节点可能是一个类别 有下级条目 请求实体可以通过向这个JID发送请求 并在请求中说明感兴趣的节点 来进一步查询节点 例18 请求更多的节点 iq type get from romeo montague net orchard to catalog shakespeare lit id items3 query xmlns http jabber org protocol disco items node music iq 然后服务返回与 父 节点相关的更深层的节点 在下面的例子中 服务本身将返回的节点按字母顺序排序 不过这种结构是实现的问题而不是协议的要求 例19 服务返回更深层的节点 iq type result from catalog shakespeare lit to romeo montague net orchard id items3 query xmlns http jabber org protocol disco items node music item jid catalog shakespeare lit node music A item jid catalog shakespeare lit node music B item jid catalog shakespeare lit node music C item jid catalog shakespeare lit node music D query iq 如果想要 请求实体可以继续查询更深层的节点 例20 请求更深层节点 iq type get from romeo montague net orchard to catalog shakespeare lit id items4 query xmlns http jabber org protocol disco items node music D iq 例21 服务返回更多的节点 iq type result from catalog shakespeare lit to romeo montague net orchard id items4 query xmlns http jabber org protocol disco items node music D item jid catalog shakespeare lit node music D dowland firstbooke name John Dowland First Booke of Songes or Ayres item jid catalog shakespeare lit node music D dowland solace name John Dowland A Pilgrimes Solace query iq 节点层次结构 前面的例子显示了节点的层次结构 里面的有些节点是分支 也即包含更深层的节点 有些节点是叶子 即不包含更深层的节点 应该 用 hierarchy 这个category来区分这些节点 分支 和 叶子 表示这个种类category的具体类型type 如果使用了分层种类 层次结构中的每个节点 必须 标识为要么是分支要么是叶子 然而 因为一个节点 可以 有多个身份 所以任一节点也 可以 有一个除了 层次 分支 或 层次 叶子 结构外的身份 因此 上面显示的例子中 一个向 music D 的disco info请求会产生 identity category hierarchy type branch 而向 music D dowland firstbooke 节点发出的请求会产生 identity category hierarchy type leaf 每个节点会产生恰当的附加身份 实体和其条目的关系 本节要说明的是一个实体和它的相关条目之间更详细的关系 一般情况下 由一个实体在disco items结果中返回的条目 必须 是与实体有隶属关系的条目 或者是实体直接控制条目本身 比如 实体拥有的Publish Subscribe节点 或者实体至少能以Jabber网络中规范的方式提供或确保这些条目 例如 群聊房间直接寄宿于一个多用户聊天服务或一个通过网关提供访问的IRC频道 这样的关系并不限制所属实体的地址与相关实体地址间的关系 特别地 下面任何一种情况都是非常合适的 查询一个实体 JID1 的条目时 接收到可定址为JID的条目列表 每个相关条目都有自己的JID 但这些JID都与JID1不相同 查询一个实体 JID1 的条目时 接收到不可定址为JID的条目列表 每个相关条目有各自的JID Node 其中JID与JID1相同但每个NodeId都是唯一的 查询一个实体 JID1 NodeID1 的条目时 接收到可定址为JID的条目列表 每个相关条目有自己的JID 但没有JID与JID1相同 查询一个实体 JID1 NodeId1 的条目时 接收到不能定址为JID的细节列表 每个相关条目有自己的JID node 但是没有JID node与JID1 NodeID1相同 并且每个NodeID都在相关JID的上下文中都是唯一的 另外 返回的结果也 可以 是混合型的 这样查询一个JID或JID node会产生 1 定址为JID的项和 2 定址为JID node这两种的组合 考虑一下实体的这种情况 它拥有多个 发布 订阅 节点 例如 一个人拥有多个音乐演奏家节点 下面的例子演示了disco items查询及其结果会是什么样子 使用了在 User Tune 9 中定义的协议 例22 用户请求有关实体的音乐 iq from juliet capulet com chamber id items4 to romeo montague net type get query xmlns http jabber org protocol disco items node http jabber org protocol tune iq 被查询的实体现在返回一个它控制的 发布 订阅publish subscribe 节点的列表 每个节点寄宿于不同的发布订阅 pubsub 服务 例23 实体返回多项条目 iq from romeo montague net id items4 to juliet capulet com chamber type get query xmlns http jabber org protocol disco items node http jabber org protocol tune item jid pubsub shakespeare lit name Romeo apos s CD player node s623nms9s3bfh8js item jid pubsub montague net node music R Romeo iPod item jid tunes characters lit node g8k4kds9sd89djf3 query iq 发布可用的条目 这个特性已经被移到定义 XMPP 发行 订阅 技术的 XEP 0060 中去了 实现注意事项 信息请求数 当发出请求的应用是一个客户端的时候 在用户收到好友名册并收到名册中所有联系人的出席信息 例如 展示可用 后 它也许想得到所有联系人的服务发现信息 不幸的是 用户的花名册可能很长 结果登录后会向外发出大量的disco info查询和接收进来大量的disco info响应 基于可扩展性和带宽利用的原因 并不希望有这种 发现洪流 因此 客户端应用 应该 用 实体能力 10 来确定它们接收到了出席信息的那些实体的能力 而 不应该 向这些实体发送disco info请求 请求的条目数 为了获取实体及相关条目的完整信息 发出请求的应用程序需要 遍历 细节树 很自然 这会产生大量的请求和响应 如果条目列表很长的话 比如 超过20条 发出请求的应用程序接下来 不应该 对所有的条目发送请求 日常需要维护大量条目的那些实体 如IRC网关或NNTP服务 应该 将节点组织成层次结构 并且 或者通过像 Jabber Search 11 之类的协议 提供更健壮的搜索能力 不应该 通过服务发现返回极其巨大的结果集 响应一致性 本文档推荐但并不要求响应实体对来自不同的请求实体的相同的请求返回一样的结果 比如 一个实体基于对请求实体的信任度或是已知能力的不同 可能返回不同的细节或特性列表 然而 响应实体 应该 对发送到相同的 JID node 组合的所有disco info请求返回相同的 identity 元素 category type 错误条件 如果特定的实体 JID或JID node 不支持disco命名空间 拒绝对特定的请求实体或任何请求实体返回disco结果 它 应该 分别返回适当的错误信息 象 service unavailable forbidden 或 not allowed 等等 示例如下 例24 JID node错误 iq type error from mim shakespeare lit to romeo montague net orchard id info3 query xmlns http jabber org protocol disco info node http jabber org protocol commands error code 405 type cancel not allowed xmlns urn ietf params xml ns xmpp stanzas error iq 根据应用的不同 也可以有其他的错误条件 下表总结了常见的错误条件 它们在服务发现Service Discovery的上下文中可能有特殊的含义 关于错误条件的语法和语义的信息 见 错误条件映射 12 表1 错误条件 条件 原因 item not found 指定目标实体的JID或JID NodeID并不存在 并且依据隐私及安全事项和策略 这一事实可以暴露 service unavailable 目标实体不支持这一协议 或者指定的目标实体并不存在 但这一事实因为隐私及安全事项不能暴露 其他在 XMPP Core 中说明的错误条件也 可以 返回 forbidden not allowed not authorized 等等 包括应用专有的错误条件 正象上面说明的那样 如果一个实体没有相关的子条目 它 必须 返回一个空的 query 元素 而不是一个错误 来响应disco items请求 安全事项 当实体暴露 通过disco info响应 它支持的特定的协议或特性的时候 某些攻击会更容易发生 然而 一般来说 服务发现不会引入新的漏洞 因为恶意实体会通过发送对这些协议的特定的请求而不是服务发现请求 来发现响应实体支持哪些协议和特性 当响应实体应答从不同的请求实体接收到的服务发现请求的时候 它没有义务返回相同的服务发现响应 它 可以 在响应前执行授权检测 以决定怎样 或是否 响应 服务器 必须 小心地控制对任何可能导致目录获取攻击或泻露已连接或可用资源的功能的访问 这些功能由服务器对发送到寄宿其中的纯JID 地址型如account domain tld 的disco info和disco items请求的响应组成 因为服务器要代表这个帐户响应这样的请求 处理发送到纯JID的服务发现请求时应用如下规则 1 为了响应disco info请求 如果下列条件之一为真 服务器 必须 返回 service unavailable 错误 目标实体不存在 无论请求指定的是否是一个节点 请求实体未经授权从目标实体接收出席信息 也即 出席信息订阅的类型是 both 或 from 或者请求实体不被信任 例如 在一个信任网络中的另一个服务器 2 为了响应disco items请求 服务器 必须 返回一个空结果集 如果 目标实体不存在 无论请求指定的是否是一个节点 请求没有指定节点 唯一的条目是可用的资源 象在 RFC3921 中定义的那样 并且请求实体未经授权从目标实体接收出席信息 也即 出席信息订阅的类型是 both 或 from 或者请求实体不被信任 例如 在一个信任网络中的另一个服务器 13 IANA事项 本文档与 互联网编号分配授权机构 14 无关 XMPP登记事项 协议名字空间 XMPP Registrar 15 在它的协议名字空间注册项中包含了 http jabber org protocol disco info 和 http jabber org protocol disco items 名字空间 登记处 身份种类及类型登记 XMPP登记处 XMPP Registrar 维护着命名空间 http jabber org protocol disco info 里 identity 元素的属性的 category 和 type 的注册值 见 http www xmpp org registrar disco categories html 过程 为了向注册项提交新值 注册人将按如下的形式定义XML段 然后将其包含在相关的XMPP扩展协议中或是发送邮件到 registrar xmpp org category name the name of the category all lower case name desc a natural language description of the category desc type name the name of the specific type all lower case name desc a natural language description of the type desc doc the document e g XEP in which this type is specified doc type category 注册人每次可以注册一个以上的种类 每个种类包含在独立的 category 元素中 每个注册人也可以每次注册一个以上的类型 每个类型包含在独立的 type 子元素中 已有种类中的新类型的注册必须包含完整的XML片段 但不应包含种类的描述 仅有种类的名称 初始提交 本文档定义了一个种类的 层次结构 它仅包含两个类型 branch 和 leaf 相关的注册提交项如下 category name hierarchy name desc An entity that exists in the context of a service discovery node hierarchy desc type name branch name desc A container node for other entities in a service discovery node hierarchy desc doc XEP 0030 doc type type name leaf name desc A terminal node in a service discovery node hierarchy desc doc XEP 0030 doc type category 特性注册 XMPP登记处维护着一个特性注册项 用于遵循 http jabber org protocol disco info 名字空间的 feature 元素的 var 属性的值 见 http xmpp org registrar disco features html 过程 为了向注册表提交新值 注册人必须按如下格式定义一个XML片段 将它包含在相关的XMPP扩展协议中 或者发到 registrar xmpp org feature var name of feature or namespace desc a natural language description of the feature

    Original URL path: http://wiki.jabbercn.org/XEP-0030 (2016-04-25)
    Open archived version from archive

  • XEP-0045 - Jabber/XMPP中文翻译计划
    iq from southampton henryv shakespeare lit id ban1 to kinghenryv shakespeare lit throne type result 服务必须 MUST 也移除任何还在房间中的被禁止的用户 通过发送 unavailable 类型的出席信息节给每个被禁止的房客 在扩展的出席信息中包含一个状态码 301 可选地带上 reason 如果服务提供的话 以及执行这个禁止动作的用户的纯JID 例子 102 服务移除被禁止的用户 presence from southampton henryv shakespeare lit cambridge to earlofcambridge shakespeare lit stabber type unavailable x xmlns http jabber org protocol muc user item affiliation outcast role none actor jid kinghenryv shakespeare lit reason Treason reason item status code 301 x presence 包含状态码可使客户端能够提交他们自己的通知消息 例如 适当的用户位置的信息 可选的包含原因 reason 元素以及执行者 actor 使得被踢的用户能理解为什么他或她被踢了 以及被踢的用户可以找谁去理论 通知主持人之后 服务必须 MUST 接着通知剩余的房客那个被禁止的房客已经不在房间里了 即从被禁止用户发送 unavailable 类型的出席信息节给所有剩余的房客 就像房客自愿退出房间时所做的一样 包含状态码 status 以及可选的原因 reason 和执行者 actor 例子 103 服务通知剩余的房客 presence type unavailable from southampton henryv shakespeare lit cambridge to exeter shakespeare lit pda x xmlns http jabber org protocol muc user item affiliation outcast jid earlofcambridge shakespeare lit stabber role none status code 301 x presence 就像 踢出房客 一样 一个用户不能被自己岗位低的管理员禁止 所以 如果一个管理员尝试禁止一个所有者 服务必须 MUST 拒绝这个请求并返回一个 not allowed 错误给发送者 例子 104 服务对尝试禁止更高岗位用户返回错误 iq from kinghenryv shakespeare lit throne id ban1 to southampton henryv shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation outcast jid earlofcambridge shakespeare lit reason Treason reason item query error type cancel not allowed xmlns urn ietf params xml ns xmpp stanzas error iq 如果一个管理员或所有者尝试禁止他自己 服务必须 MUST 拒绝这个请求并返回一个 conflict 错误给发送者 注意 这和踢出自己时推荐的服务行为不同 踢自己的行为服务是允许的 修改黑名单 房间管理员可能希望修改黑名单 注意 黑名单总是基于用户的纯JID 要修改黑名单 管理员首先向房间查询所有岗位为 outcast 的用户以得到黑名单 例子 105 管理员请求黑名单 iq from kinghenryv shakespeare lit throne id ban2 to southampton henryv shakespeare lit type get query xmlns http jabber org protocol muc admin item affiliation outcast query iq 服务必须 MUST 接着返回黑名单给管理员 每个条目必须 MUST 包含 affiliation 和 jid 属性但不应该 SHOULD NOT 包含 nick 和 role 属性 例子 106 服务发送黑名单给管理员 iq from southampton henryv shakespeare lit id ban2 to kinghenryv shakespeare lit throne type result query xmlns http jabber org protocol muc admin item affiliation outcast jid earlofcambridge shakespeare lit reason Treason reason item query iq 管理员可以 MAY 接着修改黑名单 为此 管理员必须 MUST 发送变更的条目 即 仅是 delta 给服务 每个条目必须 MUST 包含 affiliation 属性 通常设为 outcast 来禁止或 none 来取消禁止 和 jid 属性 但不应该 SHOULD NOT 包含 nick 属性 不能 MUST NOT 包含 role 属性 它用来管理角色 例如与会者 而不是被排斥者岗位 另外 reason 和 actor 元素是可选的 OPTIONAL 例子 107 管理员发送修改的黑名单给服务 iq from kinghenryv shakespeare lit throne id ban3 to southampton henryv shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation outcast jid earlofcambridge shakespeare lit reason Treason reason item item affiliation outcast jid lordscroop shakespeare lit reason Treason reason item item affiliation outcast jid sirthomasgrey shakespeare lit reason Treason reason item query iq 更新黑名单之后 服务必须 MUST 通知管理员成功了 例子 108 服务通知管理员成功了 iq from southampton henryv shakespeare lit id ban3 to kinghenryv shakespeare lit throne type result 服务必须 MUST 接着移除受影响的房客 如果他们在房间里 并从他们发送更新的出席信息 包含适当的状态码 给所有剩余的房客 如 禁止用户 用例所述 服务应该 SHOULD 也移除从保留房间昵称列表中移除每个被禁止的用户的保留昵称 如果必要 当一个实体被一个房间禁止 实现应该 SHOULD 按以下顺序匹配 JIDs 这些匹配规则和 RFC 3921 中定义的隐私列表的匹配规则是相同的 user domain resource 仅匹配特定的资源 user domain 匹配任何资源 domain resource 仅匹配特定资源 domain 匹配域名本身 就像任何 user domain 或 domain resource 一样 一些管理员可能希望在一个 MUC 服务中的所有房间里禁止所有和特定域名相关的用户 这个功能是一个服务级的特性 所以超过了本文的范围 它定义在 XEP 0133 里 授予成员资格 管理员可以授予成员资格给一个用户 方法是把用户的岗位改为 member 通常如果用户在房间里 基于昵称 如果用户不在房间里 则基于纯JID 在这两种情况下如果提供了昵称 那么这个昵称就是用户在这个房间的缺省昵称 如果实现支持那个功能的话 例子 109 管理员授予成员资格 iq from crone1 shakespeare lit desktop id member1 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation member jid hag66 shakespeare lit query iq reason 元素是可选的 OPTIONAL 例子 110 管理员授予成员资格 包含一个原因Reason iq from crone1 shakespeare lit desktop id member1 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation member jid hag66 shakespeare lit reason A worthy witch indeed reason item query iq 服务必须 MUST 把这个用户添加到成员列表 然后通知管理员成功了 例子 111 服务通知管理员成功了 iq from darkcave chat shakespeare lit id member1 to crone1 shakespeare lit desktop type result 如果该用户在房间里 服务必须 MUST 接着以这个用户的名义发送更新的出席信息给所有房客 在这个出席信息里包含了一个满足 http jabber org protocol muc user 名字空间的 x 元素 x 元素则包含一个 item 子元素 其 affiliation 属性值为 member 指明授予了成员资格 例子 112 服务发送成员资格通知给所有房客 presence from darkcave chat shakespeare lit thirdwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation member jid hag66 shakespeare lit pda role participant x presence 如果该用户不在房间里 服务可以 MAY 从房间本身发送一个消息给房间的房客们 在这个消息里包含了一个满足 http jabber org protocol muc user 名字空间的 x 元素 x 元素则包含一个 item 子元素 其 affiliation 属性值为 member 指明授予了成员资格 例子 113 服务发送成员资格通知给所有房客 message from chat shakespeare lit to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation member jid hag66 shakespeare lit role none x message 撤销成员资格 一个管理员可能想撤销一个用户的成员资格 通过把该用户的岗位改为 none 例子 114 管理员撤销成员资格 iq from crone1 shakespeare lit desktop id member2 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation none jid hag66 shakespeare lit query iq reason 元素是可选的 OPTIONAL 例子 115 管理员撤销成员资格 包含一个原因Reason iq from crone1 shakespeare lit desktop id member2 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation none jid hag66 shakespeare lit reason Not so worthy after all reason item query iq 服务必须 MUST 从成员列表中移除该用户然后通知主持人成功了 例子 116 服务通知主持人成功了 iq from darkcave chat shakespeare lit id member2 to crone1 shakespeare lit desktop type result 服务必须 MUST 接着以这个用户的名义发送更新的出席信息节给所有房客 在这个出席信息里包含了一个满足 http jabber org protocol muc user 名字空间的 x 元素 x 元素则包含一个 item 子元素 其 affiliation 属性值为 none 指明失去了成员资格 例子 117 服务通知失去成员资格 presence from darkcave chat shakespeare lit thirdwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation none jid hag66 shakespeare lit pda role participant x presence 如果房间是仅限会员的 服务必须 MUST 从房间移除这个用户 包含一个状态码 321 来指明用户被移除是因为岗位变更 并通知所有剩余的房客 例子 118 服务移除非会员 presence from darkcave chat shakespeare lit thirdwitch to crone1 shakespeare lit desktop type unavailable x xmlns http jabber org protocol muc user item affiliation none role none actor jid bard shakespeare lit item status code 321 x presence presence from darkcave chat shakespeare lit thirdwitch to crone1 shakespeare lit desktop type unavailable x xmlns http jabber org protocol muc user item affiliation none role none status code 321 x presence 修改成员列表 在一个仅限会员的房间的上下文里 成员列表本质上是一个允许人们加入房间的白名单 whitelist 任何不是成员的人等于是被禁止加入该房间 即使他们的岗位不是 outcast 在一个开放房间的上下文里 成员列表只是一个注册了这个房间的用户 纯JID和保留的昵称 的列表 这些用户可以出现在一个房间名册里 有他们自己的保留房间昵称 在搜索结果或类似FAQ里被返回给 查询者 推荐 RECOMMENDED 在仅限会员的房间里只让房间管理员拥有修改成员列表的权力 为此 管理员首先请求成员列表 通过查询房间里所有岗位为 member 的用户来实现 例子 119 管理员请求成员列表 iq from crone1 shakespeare lit desktop id member3 to darkcave chat shakespeare lit type get query xmlns http jabber org protocol muc admin item affiliation member query iq 注意 在一个仅限会员的房间里 服务也应该 SHOULD 返回成员列表给任何房客 即 当一个房间的成员请求房间列表时 它不应该 SHOULD NOT 生成一个 forbidden 错误 这个功能可帮助客户端展示所有现有的成员 即使他们中的一些人不在房间里 例如 帮助成员确定是否另一个用户应该被邀请 服务也应该 SHOULD 允许任何成员接收成员列表 即使还不是一个房客 译注 即未进入房间 服务必须 MUST 接着返回全部的成员列表给管理员 遵循 http jabber org protocol muc admin 名字空间 每个条目必须 MUST 包含 affiliation 和 jid 属性 每个正在房间里的成员可以 MAY 包含 nick 和 role 属性 例子 120 服务发送成员列表给管理员 iq from darkcave chat shakespeare lit id member3 to crone1 shakespeare lit desktop type result query xmlns http jabber org protocol muc admin item affiliation member jid hag66 shakespeare lit nick thirdwitch role participant query iq 管理员可以 MAY 接着修改成员列表 为此 管理员必须 MUST 发送变更的条目 即 仅 delta 给服务 每个条目必须 MUST 包含 affiliation 属性 通常值设为 member 或 none 和 jid 属性 但不应该 SHOULD NOT 包含 nick 属性 并且不能 MUST NOT 包含 role 属性 它是用来管理角色的 例如与会者 而不是成员的岗位 例子 121 管理员发送修改的成员列表给服务 iq from crone1 shakespeare lit desktop id member4 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation none jid hag66 shakespeare lit item affiliation member jid hecate shakespeare lit query iq 服务必须 MUST 修改成员列表然后通知主持人成功了 例子 122 服务通知主持人成功了 iq from darkcave chat shakespeare lit id member4 to crone1 shakespeare lit desktop type result 服务必须 MUST 变更任何受影响的用户的岗位 如果该用户已经从成员列表中移除了 服务必须 MUST 把该用户的岗位从 member 变更为 none 如果该用户已经被加入到成员列表 服务必须 MUST 把该用户的岗位改成 member 如果一个被移除的成员正在一个仅限会员的房间 服务应该 SHOULD 踢出这个房客 如前文所述 通过把被移除的成员的角色改成 none 并发送适当的出席信息给这个被移除的成员来实现 无论是否被移除的那个用户在或不在一个仅限会员的房间里 服务必须 MUST 随后拒绝这个用户的进入 对所有的房间类型来说 服务必须 MUST 以这个用户的名义发送更新的出席信息给所有的房客 这个出席信息拥有一个满足 http jabber org protocol muc user 名字空间的 x 元素并包含一个 item 子元素 这个子元素的 affiliation 属性值设为 none 以指明这个岗位的变更 例子 123 服务发送失去成员资格的通知给所有房客 presence from darkcave chat shakespeare lit thirdwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation none jid hag66 shakespeare lit pda role participant x presence 另外 服务必须 SHOULD 发送一个邀请给任何已加入到仅限会员的房间里的成员名单中的用户 如果该用户目前在该房间还没有岗位 例如作为一个管理员或所有者 这类用户在定义时不在房间里 同时要注意这个例子里使用了一个密码password而不是原因reason 这两个子元素都是可选的 OPTIONAL 例子 124 房间发送邀请给新成员 message from darkcave chat shakespeare lit to hecate shakespeare lit x xmlns http jabber org protocol muc user invite from bard shakespeare lit password cauldronburn password x message 因为只有管理员们和所有者们应该 SHOULD 被允许修改成员列表 一个实现可以 MAY 提供一个配置选项 在仅限会员的房间里开放邀请权限给任何成员 这种情况下 任何被发送的邀请都应该 SHOULD 自动触发被邀请者加入成员列表 无论如何 如果邀请权限被限于管理员们 而普通成员尝试发送邀请 服务必须 MUST 拒绝这个邀请的的请求并返回一个 forbidden 错误给发送者 例子 125 服务在普通成员尝试邀请其他人加入仅限会员的房间时返回错误 message from darkcave chat shakespeare lit to hag66 shakespeare lit pda type error x xmlns http jabber org protocol muc user invite to hecate shakespeare lit reason Hey Hecate this is the place for all good witches reason invite x error type auth forbidden xmlns urn ietf params xml ns xmpp stanzas error message 从开放房间发送的邀请不能 MUST NOT 触发被邀请者加入成员列表 如果一个用户被加入一个开放房间的成员列表并且该用户在该房间内 服务必须 MUST 以该用户的名义发送更新的出席信息给所有房客 这个出席信息拥有一个满足 http jabber org protocol muc user 名字空间的 x 元素并包含一个 item 子元素 这个子元素的 affiliation 属性值设为 member 以指明这个岗位的变更 例子 126 服务发送成员资格通知给所有房客 presence from darkcave chat shakespeare lit hecate to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation member jid hecate shakespeare lit broom role participant x presence 授予主持人权限 管理员可能想授予主持人权限给一个与会者或游客 通过把用户的角色改为 moderator 例子 127 管理员授予主持人权限 iq from crone1 shakespeare lit desktop id mod1 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item nick thirdwitch role moderator query iq reason 元素是可选的 OPTIONAL 例子 128 管理员授予主持人权限 包含一个原因Reason iq from crone1 shakespeare lit desktop id mod1 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item nick thirdwitch role moderator reason A worthy witch indeed reason item query iq 服务必须 MUST 添加这个用户到主持人列表然后通知管理员成功了 例子 129 服务通知管理员成功了 iq from darkcave chat shakespeare lit id mod1 to crone1 shakespeare lit desktop type result 服务必须 MUST 接着以该用户的名义发送更新的出席信息给所有的房客 这个出席信息拥有一个满足 http jabber org protocol muc user 名字空间的 x 元素并包含一个 item 子元素 这个子元素的 role 属性值设为 moderator 以指明添加了主持人权限 例子 130 服务发送主持人权限通知给所有房客 presence from darkcave chat shakespeare lit thirdwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation member jid hag66 shakespeare lit pda role moderator x presence 撤销主持人权限 管理员可能想撤销用户的主持人权限 一个管理员只可以 MAY 撤销岗位为 member 或 none 也就是 非管理员和所有者 的用户的主持人权限 权限的撤销是通过把用户的角色改为 participant 实现的 例子 131 管理员撤销主持人权限 iq from crone1 shakespeare lit desktop id mod2 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item nick thirdwitch role participant query iq reason 元素是可选的 OPTIONAL 例子 132 管理员撤销主持人权限 包含一个原因Reason iq from crone1 shakespeare lit desktop id mod2 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item nick thirdwitch role participant reason Not so worthy after all reason item query iq 服务必须 MUST 从主持人列表移除这个用户然后通知管理员成功了 例子 133 服务通知管理员成功了 iq from darkcave chat shakespeare lit id mod2 to crone1 shakespeare lit desktop type result 服务必须 MUST 接着以该用户的名义发送更新的出席信息给所有的房客 这个出席信息拥有一个满足 http jabber org protocol muc user 名字空间的 x 元素并包含一个 item 子元素 这个子元素的 role 属性值设为 participant 以指明移除了主持人权限 例子 134 服务通知失去了主持人权限 presence from darkcave chat shakespeare lit thirdwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation member jid hag66 shakespeare lit pda role participant x presence 大家知道 管理员不 MUST NOT 被允许从岗位为 owner 或 admin 的用户撤销主持人权限 如果一个管理员尝试撤销这类用户的权限 服务必须MUST 拒绝这个请求并返回一个 not allowed 错误给发送者 例子 135 服务在用户尝试撤销管理员或所有者的主持人权限时返回错误 iq from darkcave chat shakespeare lit id modtest to crone1 shakespeare lit desktop type error query xmlns http jabber org protocol muc admin item nick secondwitch role participant query error type cancel not allowed xmlns urn ietf params xml ns xmpp stanzas error iq 修改主持人列表 管理员可能希望修改主持人列表 为此 管理员首先通过请求房间内所有角色为 moderator 的用户来请求主持人列表 例子 136 管理员请求主持人列表 iq from crone1 shakespeare lit desktop id mod3 to darkcave chat shakespeare lit type get query xmlns http jabber org protocol muc admin item role moderator query iq 服务必须 MUST 接着返回主持人列表给管理员 每个条目必须 MUST 包含 jid nick role 属性并应该 SHOULD 包含 affiliation 属性 例子 137 服务发送主持人列表给管理员 iq from darkcave chat shakespeare lit id mod3 to crone1 shakespeare lit desktop type result query xmlns http jabber org protocol muc admin item affiliation member jid hag66 shakespeare lit pda nick thirdwitch role moderator query iq 管理员可以 MAY 接着修改主持人列表 为此 管理员必须 MUST发送修改的条目 即 仅 delta 给服务 每个条目必须 MUST 包含 jid 属性和 role 属性 通常值设为 member 或 participant 但不应该 SHOULD NOT 包含 nick 属性并且不能 MUST NOT 包含 affiliation 属性 它被用于管理类似管理员这样的岗位而不是主持人这样的角色 例子 138 管理员发送修改了的主持人列表给服务 iq from crone1 shakespeare lit desktop id mod4 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item jid hag66 shakespeare lit pda role participant item jid hecate shakespeare lit broom role moderator query iq 服务必须 MUST 修改主持人列表并通知管理员成功了 例子 139 服务通知管理员成功了 iq from darkcave chat shakespeare lit id mod4 to crone1 shakespeare lit desktop type result 服务必须 MUST 随后以所有受影响的用户发送更新的出席信息给所有的房客 支出主持人权限的变更 通过发送前面用例所述的适当的扩展出席信息 显然 房间所有者或房间管理员的主持人权限不能被撤销 如果一个房间管理员尝试通过修改主持人列表来撤销这类用户的主持人权限 服务必须 MUST 拒绝请求并返回一个 not allowed 错误给发送者 例子 140 服务在用户尝试撤销管理员或所有者的主持人权限时返回错误 iq from darkcave chat shakespeare lit id modtest to hag66 shakespeare lit pda type error query xmlns http jabber org protocol muc admin item jid hecate shakespeare lit broom nick Hecate role participant query error type cancel not allowed xmlns urn ietf params xml ns xmpp stanzas error iq 批准注册申请 如果一个服务不自动接受注册到房间的请求 它可以 MAY 为房间管理员提供一个方法来批准或拒绝来自 Jabber 的注册请求 替代方案是 它可能提供一个 web 接口或一些其他管理工具 对这个服务来说 最简单的办法就是 当接收到注册请求时发送一个 message 节给房间管理员 们 这里的 message 节包含一个数据表格 Data Form asking 用来询问管理员是否批准用户的注册申请 推荐 RECOMMENDED 以下数据表格 Data Form 但是实现可以 MAY 使用完全不同的表格 或or 在下面的表格基础上补充字段 例子 141 注册申请批准表格 message from darkcave chat shakespeare lit id approve to crone1 shakespeare lit pda x xmlns jabber x data type form title Registration request title instructions To approve this registration request select the quot Allow this person to register with the room quot checkbox and click OK To skip this request click the cancel button instructions field var FORM TYPE type hidden value http jabber org protocol muc register value field field var muc register first type text single label Given Name value Brunhilde value field field var muc register last type text single label Family Name value Entwhistle Throckmorton value field field var muc register roomnick type text single label Desired Nickname value thirdwitch value field field var muc register url type text single label User URL value http witchesonline hag66 value field field var muc register email type text single label Email Address value hag66 witchesonline value field field var muc register faqentry type text single label FAQ Entry value Just another witch value field field var muc register allow type boolean label Allow this person to register with the room value 0 value field x message 如果管理员批准了注册申请 服务将把该用户注册到房间 更多高级的批准机制 例如 使用特定命令 Ad Hoc Commands 19 来接收注册申请列表 就像 Publish Subscribe 20 里所做的一样 超出了本文的范围 所有者用例 每个房间必须 MUST 至少有一个所有者 而所有者 或一个成功者 在一个房间的生命周期里是这个房间长期存在的属性 例如 所有者在退出一个持久性的房间时不会失去所有权 本文假定 初始的 房间所有者是那个新建了该房间的用户并且有一个房间所有者有权修改房间配置选项的定义 例如房间类型 理想情况下 房间所有者不仅能指定房间类型 密码保护的 仅限会员的 等等 而且包括如本文的 XEP 0045 需求 需求 章节所述的房间特定属性 另外 如果所有者能指定其他所有者们的JID也是不错的 但那将取决于具体实现 为了让配置选项更加广泛提供必要的伸缩性 房间配置将使用 Data Forms XEP 0004 通过使用由 http jabber org protocol muc 名字空间触发 也就是 如果一个实体在它请求加入房间的 join request 里不包含 MUC 名字空间 那么服务将立刻新建房间 在新建房间之前不等待通过数据表格进行配置 这保证了和旧的 groupchat 1 0 协议的向后兼容 无论如何 如果房间的 join create 请求包含了 MUC 扩展 那么服务在新建和解锁该房间之前将通过数据表格请求配置 注意 以下展示的配置选项列出了本文的需求章节的所有特性和房间类型 无论如何 实际的配置选项和表格布局将取决于实现和具体的布署 而且 这些只是例子 不代表这些就是房间可以拥有的所有允许或需要的配置选项 一个特定的实现或布署可以 MAY 选择提供额外的配置选项 敏感词过滤 设置房间的缺省语言 消息记录 等等 这就是为什么在这里使用 jabber x data 协议是很有价值的 新建房间 一般注意事项 新建房间的权限可以 MAY 限制在特定的用户群或可以 MAY 保留给一个服务级别的管理员 如果访问被拒绝而一个用户试图新建一个房间 服务必须MUST 返回一个 not allowed 错误 例子 142 服务通知用户不能新建房间 presence from darkcave chat shakespeare lit thirdwitch to hag66 shakespeare lit pda type error x xmlns http jabber org protocol muc error type cancel not allowed xmlns urn ietf params xml ns xmpp stanzas error presence 如果访问不限制 服务必须 MUST 允许用户按以下步骤新建房间 从房间创建的视角来看 本质上有两种房间 即时房间 Instant rooms 可以立刻访问并基于某些缺省配置自动创建 保留房间 Reserved rooms 在任何人访问之前由房间配置者手动创建 新建和配置这些房间的流程如下 用户必须 MUST 发送出席信息到 room service nick 并声明他或她对MUC协议的支持 通过包含一个扩展的出席信息 并包含在一个空的满足 http jabber org protocol muc 名字空间的 x 子元素里 注意这里不包含 owner 或 user 后缀 如果用户被允许新建房间并且房间还不存在 服务必须 MUST 根据一些缺省配置新建此房间 指定请求的用户成为初始的房间拥有者 并增加这个拥有者到该房间但不允许任何别的用户进入该房间 有效地锁定 locking 该房间 从房间发送由所有者收到的初始的出席信息节必须 MUST 包含扩展的出席信息以指出该用户的状态为一个所有者并承认房间已经被创建了 通过状态码 201 并等待配置 如果初始的房间所有者想新建和配置一个保留房间 房间所有者必须 MUST 接着请求一个配置 通过发送类型为 get 的IQ节并包含一个空的满足 http jabber org protocol muc owner 名字空间的 query 元素给该房间 然后完成第4和第5步 如果房间所有者喜欢新建一个即时房间 该房间所有者必须 MUST 发送一个遵循 http jabber org protocol muc owner 名字空间的 query 元素并包含一个遵循 jabber x data 名字空间的空的类型为 submit 的 x 元素 然后跳到第6步 如果房间所有者请求了一个配置表格 服务必须 MUST 发送一个包含配置表格并遵循 jabber x data 名字空间的 IQ 给房间拥有者 如果没有配置选项可用 房间必须 MUST 返回一个空的 query 元素给房间所有者 初始的房间所有者应该 SHOULD 为该房间提供一个开始的配置 或接受缺省配置 通过发送 set 类型并包含完整的配置表格的 IQ 另外 房间所有者可以 MAY 取消配置过程 实现可以 MAY 设置一个初始化配置的超时 这样如果房间所有者再给定的超时时间内不配置房间 房间所有者就被假定已经接受了缺省得配置或取消了配置过程 一旦服务从初始房间所有者接收了完整的配置表格 或接收到了一个即时房间的请求 服务必须 MUST 解锁 unlock 这个房间 即 允许其他用户进入此房间 并发送 result 类型的 IQ 给房间所有者 如果服务接收到了取消 指令 它必须 MUST 销毁这个房间 以下例子展示了这个协议流程 首先 Jabber用户必须 MUST 发送出席信息给房间 包含空的 x 元素 遵循 http jabber org protocol muc 名字空间 当他寻求进入一个房间时也发送和这同样的节 例子 143 Jabber用户新建一个房间并声明对多用户聊天的支持 presence from crone1 shakespeare lit desktop to darkcave chat shakespeare lit firstwitch x xmlns http jabber org protocol muc presence 如果该房间不存在 服务应该 SHOULD 新建这个房间 取决于关于新建房间的本地策略 指定发出请求的用户的纯JID成为所有者 添加这个所有者到房间 并通过发送以下格式的出席信息节承认房间新建成功 例子 144 服务承认房间新建成功 presence from darkcave chat shakespeare lit firstwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation owner role moderator status code 110 status code 201 x presence 接收到该房间已经创建的通知之后 房间所有者需要决定是否接受缺省的房间配置 即 新建一个即时房间 instant room 还是做一些不同于缺省房间设置的配置 即 新建一个保留房间 reserved room 完成这两个用例的协议流程展示如下 注意 如果如上的发送到一个不存在的房间里的出席信息节没有包含一个遵循 http jabber org protocol muc 名字空间的 x 元素 服务应该SHOULD 立刻新建一个缺省的房间 即 它必须 MUST 假定客户端支持 groupchat 1 0 而不是 Multi User Chat 所以在等待房间创建者决定是创建即时房间还是保留房间的时候 它不能 MUST NOT 锁定这个房间 新建即时房间 如果初始的房间所有者想接受缺省的房间配置 即 新建一个即时房间 instant room 房间所有者必须 MUST 拒绝初始配置表格 通过发送一个 IQ set 给 room service 本身 包含一个遵循 http jabber org protocol muc owner 名字空间的 query 元素 这里 query 的唯一子元素是一个空的遵循 jabber x data 名字空间的 x 元素并且拥有一个 type 属性值为 submit 例子 145 所有者请求即时房间 iq from crone1 shakespeare lit desktop id create1 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc owner x xmlns jabber x data type submit query iq 服务必须 MUST 接着解锁该房间并允许其他实体加入它 新建保留房间 如果初始的房间所有者想新建并配置一个保留房间 这个房间所有者必须 MUST 请求初始配置表格 通过发送一个 IQ get 给 room service 本身 包含一个空的遵循 http jabber org protocol muc owner 名字空间的 query 元素 例子 146 所有者请求配置表单 iq from crone1 shakespeare lit desktop id create1 to darkcave chat shakespeare lit type get query xmlns http jabber org protocol muc owner iq 如果房间还不存在 服务必须 MUST 返回一个初始的房间配置表单给该用户 注意 以下例子展示一个配置选项的典型例子 已登记用于房间创建和配置的所有 x data 字段列表由 XMPP Registrar 维护 参见本文的 XMPP注册项事项 章节 例子 147 服务发送配置表单 iq from darkcave chat shakespeare lit id create1 to crone1 shakespeare lit desktop type result query xmlns http jabber org protocol muc owner x xmlns jabber x data type form title Configuration for darkcave Room title instructions Your room darkcave macbeth has been created The default configuration is as follows No logging No moderation Up to 20 occupants No password required No invitation required Room is not persistent Only admins may change the subject Presence broadcasted for all users To accept the default configuration click OK To select a different configuration please complete this form instructions field type hidden var FORM TYPE value http jabber org protocol muc roomconfig value field field label Natural Language Room Name type text single var muc roomconfig roomname field label Short Description of Room type text single var muc roomconfig roomdesc field label Natural Language for Room Discussions type text single var muc roomconfig lang field label Enable Public Logging type boolean var muc roomconfig enablelogging value 0 value field field label Allow Occupants to Change Subject type boolean var muc roomconfig changesubject value 0 value field field label Allow Occupants to Invite Others type boolean var muc roomconfig allowinvites value 0 value field field label Maximum Number of Occupants type list single var muc roomconfig maxusers value 20 value option label 10 value 10 value option option label 20 value 20 value option option label 30 value 30 value option option label 50 value 50 value option option label 100 value 100 value option option label None value none value option field field label Roles for which Presence is Broadcast type list multi var muc roomconfig presencebroadcast value moderator value value participant value value visitor value option label Moderator value moderator value option option label Participant value participant value option option label Visitor value visitor value option field field label Roles and Affiliations that May Retrieve Member List type list multi var muc roomconfig getmemberlist value moderator value value participant value value visitor value option label Moderator value moderator value option option label Participant value participant value option option label Visitor value visitor value option field field label Make Room Publicly Searchable type boolean var muc roomconfig publicroom value 1 value field field label Make Room Persistent type boolean var muc roomconfig persistentroom value 0 value field field label Make Room Moderated type boolean var muc roomconfig moderatedroom value 0 value field field label Make Room Members Only type boolean var muc roomconfig membersonly value 0 value field field label Password Required to Enter type boolean var muc roomconfig passwordprotectedroom value 0 value field field type fixed value If a password is required to enter this room you must specify the password below value field field label Password type text private var muc roomconfig roomsecret field label Who May Discover Real JIDs type list single var muc roomconfig whois option label Moderators Only value moderators value option option label Anyone value anyone value option field field type fixed value You may specify additional people who have administrative privileges in the room Please provide one Jabber ID per line value field field label Room Admins type jid multi var muc roomconfig roomadmins field type fixed value You may specify additional owners for this room Please provide one Jabber ID per line value field field label Room Owners type jid multi var muc roomconfig roomowners x query iq 注意 whois 配置选项指定该房间是非匿名的 值为 anyone 半匿名的 值为 moderators 还是全匿名的 值为 none 不显示在这 如果没有配置选项可用 服务必须 MUST 返回空的 query 元素给房间所有者 例子 148 服务通知所有者没有配置可用 iq from darkcave chat shakespeare lit id create1 to crone1 shakespeare lit desktop type result query xmlns http jabber org protocol muc owner iq 房间所有者应该 SHOULD 接着填好表单并提交给服务 例子 149 所有者提交配置表单 iq from crone1 shakespeare lit desktop id create2 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc owner x xmlns jabber x data type submit field var FORM TYPE value http jabber org protocol muc roomconfig value field field var muc roomconfig roomname value A Dark Cave value field field var muc roomconfig roomdesc value The place for all good witches value field field var muc roomconfig enablelogging value 0 value field field var muc roomconfig changesubject value 1 value field field var muc roomconfig allowinvites value 0 value field field var muc roomconfig maxusers value 10 value field field var muc roomconfig publicroom value 0 value field field var muc roomconfig persistentroom value 0 value field field var muc roomconfig moderatedroom value 0 value field field var muc roomconfig membersonly value 0 value field field var muc roomconfig passwordprotectedroom value 1 value field field var muc roomconfig roomsecret value cauldronburn value field field var muc roomconfig whois value moderators value field field var muc roomconfig roomadmins value wiccarocks shakespeare lit value value hecate shakespeare lit value field x query iq 如果房间创建成功 服务必须 MUST 通知新的房间所有者成功了 例子 150 服务通知新房间所有者成功 iq from darkcave chat shakespeare lit id create2 to crone1 shakespeare lit desktop type result 如果因为指定的房间配置违反了一个或多个服务策略而导致房间创建失败 例如 因为密码保护房间的密码为空 服务必须 MUST 返回一个 not acceptable 错误 例子 151 服务通知所有者请求的配置选项不被接受 iq from darkcave chat shakespeare lit id create2 to crone1 shakespeare lit desktop type error error type modify not acceptable xmlns urn ietf params xml ns xmpp stanzas error iq 另一方面 房间所有者可以 MAY 取消配置过程 例子 152 所有者取消初始的配置 iq from crone1 shakespeare lit desktop id create2 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc owner x xmlns jabber x data type cancel query iq 如果房间所有者取消了初始的房间配置 服务应该 SHOULD 销毁房间 确保发送不可用出席信息给房间所有者 详见 销毁房间 用例 如果房间所有者在提交表单之前因为任何原因下线了 例如 失去连接 服务将接收到一个类型为 unavailable 的出席信息节 从所有者到所有者的 room service nick 或到 room service 或两者 服务必须 MUST 接着销毁这个房间 发送一个 unavailable 类型的出席信息节 从房间到所有者 包含一个 destroy 元素以及 reason 子元素 如果提供了 参见本文的 销毁房间 章节 申请唯一房间名 在一些场合 例如 当 把一对一聊天转为会议 房间创建者可能想在尝试新建房间之前请求一个唯一的房间名 例如 避免可能的房间冲突 为此 服务可以 MAY 如本章所述支持这个特性 如果服务支持这个特性 它必须 MUST 在对服务发现信息请求应答时返回一个 http jabber org protocol muc unique 特性 房间创建者通过发送一个 IQ get 给服务本身来请求唯一房间名 这个IQ节中包含一个空的 unique 元素 遵循 http jabber org protocol muc unique 名字空间 例子 153 实体请求唯一房间名 iq from crone1 shakespeare lit desktop id unique1 to chat shakespeare lit type get unique xmlns http jabber org protocol muc unique iq 如果服务支持这个特性 它应该 SHOULD 以 XML 字符数据的方式返回一个唯一房间名 包含一个 unique 元素 但不创建该房间 例子 154 服务返回唯一房间名 iq from chat shakespeare lit id unique1 to crone1 shakespeare lit desktop type result unique xmlns http jabber org protocol muc unique 6d9423a55f499b29ad20bf7b2bdea4f4b885ead1 unique iq 服务可以 MAY 拒绝返回一个唯一房间名给一个没有资格创建房间的实体 或那些发送请求唯一房间名过多次数的实体 等等 服务可以 MAY 使用算法保证房间名的创建在服务上下文中是唯一的 例如 对发出请求的JID datetime 和random salt的SHA 1 哈希运算 房间创建者将接着使用 XML 字符数据 unique 元素作为它请求的房间JID的节点标识符 ID 例子 155 所有者以唯一名创建房间 presence from crone1 shakespeare lit desktop to 6d9423a55f499b29ad20bf7b2bdea4f4b885ead1 chat shakespeare lit firstwitch x xmlns http jabber org protocol muc presence 随后的房间配置 在指定房间的初始配置之后的任何时间 房间所有者可能想修改房间配置 为此 房间所有者必须 MUST 向房间发出一个新的配置表单请求 通过发送一个 IQ 到 room service 包含一个空的 query 元素 遵循 http jabber org protocol muc owner 名字空间 例子 156 所有者请求配置表单 iq from crone1 shakespeare lit desktop id config1 to darkcave chat shakespeare lit type get query xmlns http jabber org protocol muc owner iq 如果 from 地址的 user host 部分和房间所有者的纯JID不符 服务必须 MUST 返回一个 forbidden 错误给发送者 例子 157 服务禁止非所有者的访问配置 iq from darkcave chat shakespeare lit id configures to wiccarocks shakespeare lit laptop type error query xmlns http jabber org protocol muc owner error type auth forbidden xmlns urn ietf params xml ns xmpp stanzas error iq 另外 服务必须 MUST 以当前使用的选项组作为缺省值发送一个配置表单给房间所有者 例子 158 服务发送配置表单给所有者 iq from darkcave chat shakespeare lit id config1 to crone1 shakespeare lit desktop type result query xmlns http jabber org protocol muc owner x xmlns jabber x data type form title Configuration for darkcave Room title instructions Complete this form to make changes to the configuration of your room instructions field type hidden var FORM TYPE value http jabber org protocol muc roomconfig value field field label Natural Language Room Name type text single var muc roomconfig roomname value A Dark Cave value field field label Short Description of Room type text single var muc roomconfig roomdesc value The place for all good witches value field field label Enable Public Logging type boolean var muc roomconfig enablelogging value 0 value field field label Allow Occupants to Change Subject type boolean var muc roomconfig changesubject value 0 value field field label Allow Occupants to Invite Others type boolean var muc roomconfig allowinvites value 0 value field field label Maximum Number of Occupants type list single var muc roomconfig maxusers value 10 value option label 10 value 10 value option option label 20 value 20 value option option label 30 value 30 value option option label 50 value 50 value option option label 100 value 100 value option option label None value none value option field field label Roles for which Presence is Broadcast type list multi var muc roomconfig presencebroadcast value moderator value value participant value value visitor value option label Moderator value moderator value option option label Participant value participant value option option label Visitor value visitor value option field field label Roles and Affiliations that May Retrieve Member List type list multi var muc roomconfig getmemberlist value moderator value value participant value value visitor value option label Moderator value moderator value option option label Participant value participant value option option label Visitor value visitor value option field field label Make Room Publicly Searchable type boolean var muc roomconfig publicroom value 0 value field field label Make Room Persistent type boolean var muc roomconfig persistentroom value 0 value field field label Make Room Moderated type boolean var muc roomconfig moderatedroom value 0 value field field label Make Room Members Only type boolean var muc roomconfig membersonly value 0 value field field label Password Required for Entry type boolean var muc roomconfig passwordprotectedroom value 1 value field field type fixed value If a password is required to enter this room you must specify the password below value field field label Password type text private var muc roomconfig roomsecret value cauldronburn value field field label Who May Discover Real JIDs type list single var muc roomconfig whois value moderators value option label Moderators Only value moderators value option option label Anyone value anyone value option field field type fixed value You may specify additional people who have administrative privileges in the room Please provide one Jabber ID per line value field field label Room Admins type jid multi var muc roomconfig roomadmins value wiccarocks shakespeare lit value value hecate shakespeare lit value field field type fixed value You may specify additional owners for this room Please provide one Jabber ID per line value field field label Room Owners type jid multi var muc roomconfig roomowners x query iq 如果没有配置选项可用 服务必须 MUST 返回一个空的 query 元素给房间所有者 如前面的用例所示 该房间所有者应该 SHOULD 接着以更新的配置信息提交表单 另外 房间所有者可以 MAY 取消这次配置过程 例子 159 所有者取消随后的配置 iq from crone1 shakespeare lit desktop id config2 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc owner x xmlns jabber x data type cancel query iq 如果房间所有者取消随后的配置 服务必须 MUST 让该房间的配置保持和房间所有者请求这次配置之前一样 如果一次房间配置变更导致一个房间管理员失去管理权限 而这个管理员正在房间里 该房间必须 MUST 为那个管理员发送更新的出席信息给所有房客 表明状态的变更 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为 member 或 role 属性值为 participant 或 visitor 以适当地表达岗位级别和房间类型 例子 160 服务通知失去管理员岗位 presence from darkcave chat shakespeare lit secondwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation member jid wiccarocks shakespeare lit laptop role participant x presence 如果一次房间配置变更导致一个用户获得管理员权限 而这个用户正在房间里 房间必须 MUST 为那个用户发送更新的出席信息给所有房客 表明状态的变更 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为 admin 或 role 属性值为 admin 例子 161 服务通知所有用户有人获得管理员岗位 presence from darkcave chat shakespeare lit secondwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation admin jid wiccarocks shakespeare lit laptop role moderator x presence 如果一次房间配置变更导致一个房间所有者失去所有者权限 而这个所有者正在房间里 该房间必须 MUST 为那个所有者发送更新的出席信息给所有房客 表明状态的变更 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为 admin 或 role 属性值为根据岗位和房间类型确定的适当的值 推荐为 moderator 例子 162 服务通知失去所有者岗位 presence from darkcave chat shakespeare lit secondwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation admin jid wiccarocks shakespeare lit laptop role moderator x presence 如果没有其他所有者 服务不能 MUST NOT 允许一个所有者撤销他或她自己的所有权 如果一个所有者企图这么干 服务必须 MUST 返回一个 conflict 错误给这个所有者 然而 如果有其他所有者 服务应该 SHOULD 允许一个所有者撤销自己的所有者权限 如果一次房间配置变更导致一个用户获得所有者权限 而这个用户正在房间里 房间必须 MUST 为那个用户发送更新的出席信息给所有房客 表明状态的变更 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为 owner 或 role 属性值为根据岗位和房间类型确定的适当的值 推荐为 moderator 例子 163 服务通知所有用户有人获得所有者权限 presence from darkcave chat shakespeare lit secondwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation owner jid wiccarocks shakespeare lit laptop role moderator x presence 如果一次房间配置变更导致房间类型变成仅限会员 但还有非成员在房间里 服务必须 MUST 从房间移除任何非成员 并在发送给那些剩余的房客的 不可用 出席信息节里包含状态码 322 配置变更通知 当一个房间的配置变更会对房间的隐私和安全策略产生影响时 该房间必须 MUST 发送通知给所有房客 这个通知将包括一个 message 节 包含一个遵循 http jabber org protocol muc user 名字空间的 x 元素 x 元素则只有一个 status 子元素 其 code 属性为一个适当的值 这是例子 例子 164 配置状态码 message from darkcave chat shakespeare lit to crone1 shakespeare lit desktop type groupchat x xmlns http jabber org protocol muc user status code 170 x message 房间配置中和隐私相关的策略变更导致生成这些状态码 如下 如果房间日志功能可用了 状态码 170 如果房间日志现在禁止了 状态码 171 如果房间现在是非匿名的了 状态码 172 如果房间现在是半匿名的了 状态码 173 如果房间现在是全匿名的了 状态码 174 对更多其他配置变更 房间应该 SHOULD 发送状态码 104 这样感兴趣的房客如果想要的话可以接受到更新的房间配置 授予所有者权限 如果实现允许 一个所有者可以 MAY 授予所有权给其他用户 只要把用户的岗位改成 owner 例子 165 所有者授予所有权 iq from crone1 shakespeare lit desktop id owner1 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation owner jid hecate shakespeare lit query iq reason 元素是可选的 OPTIONAL 例子 166 所有者授予所有权 饱含一个原因 Reason iq from crone1 shakespeare lit desktop id owner1 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation owner jid hecate shakespeare lit reason A worthy witch indeed reason item query iq 服务必须 MUST 把用户添加到所有者列表并通知所有者成功了 例子 167 服务通知所有者成功了 iq from darkcave chat shakespeare lit id owner1 to crone1 shakespeare lit desktop type result 如果该用户在房间里 服务必须 MUST 接着以这个用户的名义发送更新的出席信息给所有房客 表明已授予所有权 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为 owner 并且 role 属性值为根据岗位和房间类型确定的适当的值 推荐为 moderator 例子 168 服务发送所有权通知给所有房客 presence from darkcave chat shakespeare lit hecate to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation owner jid hecate shakespeare lit role moderator x presence 如果该用户不在房间 服务可以 MAY 从房间本身发送一个消息给房间的房客们 表明已授予所有权 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为 owner 例子 169 服务发送所有权通知给所有房客 message from chat shakespeare lit to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation member jid hecate shakespeare lit role none x message 撤销所有者权限 实现可以 MAY 允许一个所有者撤销其他用户的所有权 只要把用户的岗位改成非 owner 例子 170 所有者撤销所有权 iq from crone1 shakespeare lit desktop id owner2 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation admin jid hecate shakespeare lit query iq reason 元素是可选的 OPTIONAL 例子 171 所有者撤销所有权 包含一个原因 iq from crone1 shakespeare lit desktop id owner2 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation admin jid hecate shakespeare lit reason Not so worthy after all reason item query iq 如果没有其它所有者 服务不能 MUST NOT 允许一个所有者撤销他或她自己的所有权 如果一个所有者尝试这么干 服务必须 MUST 返回一个 conflict 错误给该所有者 然而 如果有其他所有者 服务应该 SHOULD 允许一个所有者撤销自己的所有权 如果一个实现不允许所有者撤销另一个用户的所有权 实现必须 MUST 返回一个 not authorized 错误给做出这个请求的所有者 注意 允许一个所有者移除其它用户的所有权能给房间管理一个折衷的控制模式 所以这个特性是可选的 OPTIONAL 并且鼓励实现支持通过一个只有拥有服务范围管理权限的用户使用的接口来移除所有者 其它情况下 服务必须 MUST 把用户从所有者列表移除并通知所有者成功了 例子 172 服务通知所有者成功了 iq from darkcave chat shakespeare lit id owner2 to crone1 shakespeare lit desktop type result 如果该用户在房间里 服务必须 MUST 接着以这个用户的名义发送更新的出席信息给所有房客 表明已失去所有权 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为非 owner 并且 role 属性值为根据岗位和房间类型确定的适当的值 例子 173 服务通知失去所有权 presence from darkcave chat shakespeare lit secondwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation admin jid hecate shakespeare lit role moderator x presence 如果该用户不在房间 服务可以 MAY 从房间本身发送一个消息给房间的房客们 表明已失去所有权 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为非 owner 例子 174 服务发送失去所有权通知给所有房客 message from chat shakespeare lit to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation admin jid hecate shakespeare lit role none x message 修改所有者列表 如果实现允许 一个房间所有者可能想修改所有者列表 为此 所有者首先请求所有者列表 通过向房间请求所有岗位为 owner 的用户 例子 175 所有者请求所有者列表 iq from bard shakespeare lit globe id owner3 to darkcave chat shakespeare lit type get query xmlns http jabber org protocol muc admin item affiliation owner query iq 如果 from 地址的 user host 部分和房间所有者的纯JID不符 服务必须 MUST 返回一个 forbidden 错误给发送者 否则 服务必须 MUST 接着返回所有者列表给所有者 每个条目必须 MUST 包含 affiliation 和 jid 属性 对任何正是一名房客 也就是正在房间里 的所有者可以 MAY 包含 nick 和 role 属性 例子 176 服务发送所有者列表给所有者 iq from darkcave chat shakespeare lit id owner3 to bard shakespeare lit globe type result query xmlns http jabber org protocol muc admin item affiliation owner jid crone1 shakespeare lit query iq 所有者可以 MAY 接着修改所有者列表 为此 所有者必须 MUST 发送修改的条目 即 仅 delta 给服务 21 每个条目必须 MUST 包含 affiliation 和 jid 属性 但不应该 SHOULD NOT 包含 nick 属性 不能 MUST NOT 包含 role 属性 它用于管理参与者之类的角色 而不是所有者之类的岗位 例子 177 所有者发送修改过的所有者列表给服务 iq from bard shakespeare lit globe id owner4 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation owner jid hecate shakespeare lit query iq 只有所有者被允许修改所有者列表 如果一个非所有者试图察看或修改所有者列表 服务必须 MUST 拒绝这个请求并返回一个 forbidden 错误给发送者 例子 178 服务对于非所有者试图修改所有者列表返回错误 iq from darkcave chat shakespeare lit id ownertest to hag66 shakespeare lit pda type error query xmlns http jabber org protocol muc admin item affiliation owner jid hecate shakespeare lit query error type auth forbidden xmlns urn ietf params xml ns xmpp stanzas error iq 如果没有别的所有者 服务不能 MUST NOT 允许一个所有者撤销自己的所有权 如果一个所有者尝试这么干 服务必须 MUST 返回一个 conflict 错误给该所有者 然而 如果有其他所有者 服务应该 SHOULD 允许一个所有者撤销自己的所有权 其它情况下 服务必须 MUST 修改所有者列表并通知所有者成功了 例子 179 服务通知所有者成功了 iq from darkcave chat shakespeare lit id owner4 to crone1 shakespeare lit desktop type result 服务必须 MUST 也为任何因前述所有者列表修改而导致的岗位变化而发送出席信息通知 授予管理员权限 一个所有者可以授予管理员权限给一个成员或无岗位的用户 只要把用户的岗位改成 admin 例子 180 所有者授予管理员权限 iq from crone1 shakespeare lit desktop id admin1 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation admin jid wiccarocks shakespeare lit query iq reason 元素是可选的 OPTIONAL 例子 181 所有者授予管理员权限 包含一个原因 Reason iq from crone1 shakespeare lit desktop id admin1 to darkcave chat shakespeare lit type set query xmlns http jabber org protocol muc admin item affiliation admin jid wiccarocks shakespeare lit reason A worthy witch indeed reason item query iq 服务必须 MUST 把用户添加到管理员列表并通知所有者成功了 例子 182 服务通知所有者成功了 iq from darkcave chat shakespeare lit id admin1 to crone1 shakespeare lit desktop type result 如果该用户在房间里 服务必须 MUST 接着以这个用户的名义发送更新的出席信息给所有房客 表明已授予管理员权限 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为 admin 并且 role 属性值为根据岗位和房间类型确定的适当的值 例子 183 服务发送管理员权限通知给所有房客 presence from darkcave chat shakespeare lit secondwitch to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation admin jid wiccarocks shakespeare lit role moderator x presence 如果该用户不在房间 服务可以 MAY 从房间本身发送一个消息给房间的房客们 表明已授予管理员权限 通过包含一个遵循 http jabber org protocol muc user 名字空间的的 x 元素以及一个 item 子元素 该 item 子元素的 affiliation 属性值为 admin 例子 184 服务发送管理员权限通知给所有房客 message from chat shakespeare lit to crone1 shakespeare lit desktop x xmlns http jabber org protocol muc user item affiliation admin jid wiccarocks shakespeare lit role none x message 撤销管理员权限 一个所有者可能想撤销一个用户的管理员权限 只要把用户的岗位改成非

    Original URL path: http://wiki.jabbercn.org/XEP-0045 (2016-04-25)
    Open archived version from archive

  • XEP-0048 - Jabber/XMPP中文翻译计划
    balcony type headline id rnfoo1 event xmlns http jabber org protocol pubsub event items node storage bookmarks item id current storage xmlns storage bookmarks conference name The Play apos s the Thing autojoin true jid theplay conference shakespeare lit nick JC nick conference storage item items event message message from juliet capulet lit to juliet capulet lit chamber type headline id rnfoo2 event xmlns http jabber org protocol pubsub event items node storage bookmarks item id current storage xmlns storage bookmarks note jid hamlet shakespeare lit cdate 2004 09 24T15 23 21Z mdate 2004 09 24T15 23 21Z Seems to be a good writer note note jid juliet capulet com cdate 2004 09 27T17 23 14Z mdate 2004 09 28T12 43 12Z Oh my sweetest love note storage item items event message 接收数据 为了在不需要接收通知的情况下接收存储的数据 比如 初始化登录的时候 用户的客户端发送一个 XEP 0060 定义的 接收 条目 请求 示例6 客户端请求所有条目 iq from juliet capulet lit randomID type get id retrieve1 pubsub xmlns http jabber org protocol pubsub items node storage bookmarks pubsub iq 示例7 服务器返回所有条目 iq type result to juliet capulet lit randomID id retrieve1 pubsub xmlns http jabber org protocol pubsub items node storage bookmarks item id current storage xmlns storage bookmarks conference name The Play apos s the Thing autojoin true jid theplay conference shakespeare lit nick JC nick conference storage item items pubsub iq 安全事项 和发行 订阅的对象持久性相关的安全事项参见 XEP 0060 和 XEP 0223 不建议使用 conference 元素的 password 子元素 因为密码可能被第三方截取到 例如 一个窃听者 如果没有使用频道加密 或一个服务器管理员 无论如何 这个元素还是可以在安全环境下使用的 例如 通讯不会使用未加密频道的地方以及管理员是可信任的情况下 客户端缺省不应该存储密码并且必须允许用户禁止任何密码存储功能 IANA事项 本文档不需要和 IANA 7 交互 XMPP注册事项 不需要 XMPP Registrar 8 因为 storage bookmarks 命名空间已经包含在协议命名空间注册项中 见 http xmpp org registrar namespaces html XML Schema xml version 1 0 encoding UTF 8 xs schema xmlns xs http www w3 org 2001 XMLSchema targetNamespace storage bookmarks xmlns storage bookmarks elementFormDefault qualified xs annotation xs documentation The protocol documented by this schema is defined in XEP 0048 http www xmpp org extensions xep 0048 html xs documentation xs annotation xs element name storage xs complexType xs choice xs element ref conference xs element ref url xs choice xs complexType xs element xs element name conference xs complexType xs sequence xs element name nick type xs string minOccurs 0 xs element name password type xs string minOccurs 0 xs sequence xs attribute name autojoin type xs boolean use optional default false xs attribute name jid type xs string use required xs attribute name name type xs string use required xs complexType xs element xs element name url xs complexType xs simpleContent xs extension base empty xs attribute name name type xs string use required xs attribute name url type xs string use required xs extension xs simpleContent xs complexType xs element xs simpleType name empty xs restriction base xs string xs enumeration value xs restriction xs simpleType xs schema 作者备注 Peter Millard 本协议0 1版到1 0版的共同作者 于2006年4月26日不幸辞世 附录 附录A 文档信息 系列 XEP 序号 0048 发布者 XMPP标准基金会 状态 草案 类型 标准跟踪 版本 1 1 最后更新时间 2007 11 07 批准机构 XMPP理事会 依赖标准 XMPP Core XEP 0060 XEP 0223 替代标准 无 被替代标准 无 缩略名

    Original URL path: http://wiki.jabbercn.org/XEP-0048 (2016-04-25)
    Open archived version from archive

  • XEP-0054 - Jabber/XMPP中文翻译计划
    querytype name vcard name proto vcard temp proto desc enables retrieval of an entity s vCard data desc doc XEP 0054 doc querytype 实现注意事项 注意以下事项 这个被包含的元素的正确大小写是 vCard XML元素名称是大小写敏感的 所有在 vCard 中的元素必须 MUST 是大写的 即使和draft dawson vcard xml dtd 01中的不一致 国家的简称是 CTRY 元素 不是 COUNTRY 元素 即使和draft dawson vcard xml dtd 01不一致 电话号码必须 MUST 包含在 NUMBER 元素里 而不是包含在CDATA中的 TEL 元素里 如果 TEL 元素没有包含电话号码 那么空的 NUMBER 也必须被包含 Email地址必须 MUST 包含在 USERID 元素里 而不是CDATA中的 EMAIL 元素 一些Jabber实现会添加version属性到 vCard 元素 属性值为2 0或者3 0 DTD是不正确的 draft dawson vcard xml dtd 01中的例子明确的指出通过version属性表示版本信息 而不是DTD中定义的 VERSION 元素 然而 为了符合draft dawson vcard xml dtd 01 版本信息应该被设置为3 0 不是2 0 DTD 下面的DTD包含了轻微修改过的draft dawson vcard xml dtd 01版本 除此外 其他唯一修改的地方就是添加JABBERID和DESC元素 xml version 1 0 encoding UTF 8 Copyright C The Internet Society 2000 All Rights Reserved This document and translations of it may be copied and furnished to others and derivative works that comment on or otherwise explain it or assist in its implmentation may be prepared copied published and distributed in whole or in part without restriction of any kind provided that the above copyright notice and this paragraph are included on all such copies and derivative works However this document itself may not be modified in any way such as by removing the copyright notice or references to the Internet Society or other Internet organizations except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process MUST be followed or as required to translate it into languages other than English The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns This document and the information contained herein is provided on an AS IS basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES EXPRESS OR IMPLIED INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE NOTE the following root element is not used in the modified vcard temp DTD published by the Jabber project now XMPP Standards Foundation and is included here only for historical purposes implementations that comply with vcard temp must specify the root element as vCard not xCard Root element and container for one or more vCard objects ELEMENT xCard vCard Individual vCard container ELEMENT vCard VERSION FN N NICKNAME PHOTO BDAY ADR LABEL TEL EMAIL JABBERID MAILER TZ GEO TITLE ROLE LOGO AGENT ORG CATEGORIES NOTE PRODID REV SORT STRING SOUND UID URL CLASS KEY DESC vCard specification version property This MUST be 2 0 if the document conforms to RFC 2426 ELEMENT VERSION PCDATA Formatted or display name property ELEMENT FN PCDATA Structured name property Name components with multiple values must be specified as a comma separated list of values ELEMENT N FAMILY GIVEN MIDDLE PREFIX SUFFIX ELEMENT FAMILY PCDATA ELEMENT GIVEN PCDATA ELEMENT MIDDLE PCDATA ELEMENT PREFIX PCDATA ELEMENT SUFFIX PCDATA Nickname property Multiple

    Original URL path: http://wiki.jabbercn.org/XEP-0054 (2016-04-25)
    Open archived version from archive

  • XEP-0065 - Jabber/XMPP中文翻译计划
    to initiator example com foo id initiate error code 404 type cancel item not found xmlns urn ietf params xml ns xmpp stanzas error iq 如果目标方能够打开TCP套接字连接到一个流主机 那么它必须 MUST 使用 RFC 1928 指定的SOCKS5协议建立与流主机的连接 根据RFC的SOCKS5 目标方为了使用代理可能 MAY 需要验证 然而 任何验证要求已经超出本文档的范畴 一旦目标方成功通过代理服务的验证 即使是匿名的 它为了继续协商应该 SHOULD 发送一个连接请求给适当的主机 使用如下规则 主机名必须 MUST SHA1编码的 SID Initiator JID Target JID 就如在 RFC 3174 中定义的SHA1算法并且输出是十六进制编码的 不是二进制 端口必须 MUST 是0 提供的JID必须 MUST 是用于IQ交换的JID 可以 MAY 是全JID localpart domain tld resource 或者是 domain tld resource 或者是春JID localpart domain tld 或者是 domain tld 在应用SHA1算法之前 JID必须 MUST 要做适当的字符准备 XMPP Core指定的 例子14 目标连接流主机 CMD X 01 ATYP X 03 DST ADDR SHA1 Hash of SID Initiator JID Target JID DST PORT 0 例子15 流主机应答连接 STATUS X 00 根据 RFC 1928 第六部分应答客户端时 流主机应该 SHOULD 设置BND ADDR和BND PORT为客户端连接时请求中相应的值 目标方确认SOCKS5连接 在目标方通过流主机的验证后 它必须 MUST 发送一个IQ result给初始方指出使用了哪个流主机 例子16 目标方通知初始方关于连接的信息 iq type result from target example org bar to initiator example com foo id initiate query xmlns http jabber org protocol bytestreams streamhost used jid streamhostproxy example net query iq 此时 初始方知道了目标方使用了哪个流主机 初始方与流主机建立SOCKS5连接 如果被采用的流主机是代理 那么初始方必须 MUST 在请求激活字节流之前通过验证和建立与流主机的连接 初始方将会使用和目标方一样方式建立SOCKS5连接 使用相同的请求参数 见如下示例 例子17 初始方连接流主机 CMD X 01 ATYP X 03 DST ADDR SHA1 Hash of SID Initiator JID Target JID DST PORT 0 例子18 流主机应答初始方的连接 STATUS X 00 激活字节流 为了使用字节流 它必须 MUST 先激活流主机 如果流主机是初始方 那么很简单不需要任何带内协议 然而 如果流主机是代理 那么初始方必须 MUST 发送一个带内的请求给流主机 可以通过发送一个IQ set节点给代理 该节点包含 activate 元素 元素的内容是目标方的全JID 例子19 初始方请求激活流 iq type set from initiator example com foo to streamhostproxy example net id activate query xmlns http jabber org protocol bytestreams sid mySID activate target example org bar activate query iq 使用了数据包中的SID以及from地址这些信息后 代理才能根据SID Initiator JID Target JID的哈希值激活流 并提供一个合理的信任等级激活来自初始方的请求 如果代理能完成请求 它必须 MUST 使用IQ result响应初始方 例子20 代理通知初始方有关激活的信息 iq type result from streamhostproxy example net to initiator example com foo id activate 如果代理不能完成请求 它必须 MUST 返回一个IQ error错误给初始方 错误条件定义如下 item not found 错误 如果from地址不匹配初始方的全JID not allowed 错误 如果只有一方 初始方或者接收方 但是不是同时连接 连接到代理 internal server error 错误 如果代理因为一些内部故障不能激活 规范用例 这是以上提供的信息的规范表述 基础角色是初始方 目标是在初始方和目标方之间建立字节流 注意 UCE 代表 Use Case Ends 我们假定是成功的除非有其他指定的问题 P 代表 Primary Flow A 代表 Alternate Flow 基本流程 初始方想要与目标方建立一个字节流 初始方发送一个IQ set给目标方以指定一个流ID和一个或多个流主机的网络地址 A1 XMPP文档列表 XMPP扩展 XEP 0065 A1 目标方希望建立与初始方的字节流 A2 XMPP文档列表 XMPP扩展 XEP 0065 A2 目标方请求与流主机的TCP连接 A3 XMPP文档列表 XMPP扩展 XEP 0065 A3 目标方从流主机接收TCP应答 A4 XMPP文档列表 XMPP扩展 XEP 0065 A4 目标方通过SOCKS5提交验证证书 目标方通过SOCKS5接收流主机的验证应答 A5 XMPP文档列表 XMPP扩展 XEP 0065 A5 目标方通过SOCKS5请求与流主机连接 目标方通过SOCKS5从流主机处接收连接成功的应答 A7 XMPP文档列表 XMPP扩展 XEP 0065 A7 目标方发送IQ result给初始方通知其连接流主机成功 A6 XMPP文档列表 XMPP扩展 XEP 0065 A6 用例结束 字节流已建立并且已准备好 替代流程 A1 初始方不知道流主机的完全网络地址 换言之 就是代理的地址 初始方发送IQ get到代理 初始方从代理接收包含网络地址的IQ result A9 XMPP文档列表 XMPP扩展 XEP 0065 A9 A10 XMPP文档列表 XMPP扩展 XEP 0065 A10 返回P2 A2 目标方不想与初始方建立字节流 初始方从目标方接收 not acceptable 错误 因没有成功 终止用例 A3 在列表中没有流主机 目标方不能连接任何流主机 目标方返回 remote server not found 错误给初始方 因没有成功 终止用例 A4 目标方不能连接流主机 返回P4 A5 目标方在流主机上验证失败 返回P4 A6 代理不愿作为流主机 初始方从代理接收到 forbidden 错误 返回P2 A7 代理不能作为流主机 初始方从代理处接收到 not allowed 错误 返回P2 A8 目标方连接代理 初始方连接代理 目标方从流主机接收TCP应答 初始方通过SOCKS5在代理服务上进行验证 初始方通过SOCKS5收到代理服务器的验证应答 A10 XMPP文档列表 XMPP扩展 XEP 0065 A10 初始方通过SOCKS5向代理请求连接 初始方通过SOCKS5接收连接成功的应答 A11 XMPP文档列表 XMPP扩展 XEP 0065 A11 初始方向代理发送IQ set请求激活字节流 初始方从代理接收到IQ result字节流激活应答 A12 XMPP文档列表 XMPP扩展 XEP 0065 A12 返回P9 A9 初始方不能连接代理 因没有成功 终止用例 A10 初始方没有通过代理的验证 因没有成功 终止用例 A11 初始方不能连接到代理 因没有成功 终止用例 A12 代理不能激活字节流 初始方从代理服务器接收到 internal server error 错误 因没有成功 终止用例 正式描述 query 元素 query 元素是所有带内交互的容器 这个元素必须 MUST 是在 http jabber org protocol bytestreams 命名空间内 此元素有个表示流会话标识的属性 并包含了多个 streamhost 元素 一个 streamhost used 元素或者一个 activate 元素 sid 指明了字节流会话的标识 该属性必须 MUST 出现 属性值可以是任何字符 mode 属性指明了使用的模式 可以是 tcp 或者 udp 如果没有属性 那么必须 MUST 假设默认值是 tcp streamhost 元素是负责传送网络连接的信息 在初始方发送给目标方的初始IQ set中 至少有一个实例必须 MUST 出现 如果有多个实例出现 每个必须 MUST 是独立的主机 端口组成 streamhost used 元素指明正在使用的带外传输的流主机 它必须 MUST 在从目标方发送给初始方的IQ set中出现 并且必须 MUST 只有一个实例 activate 元素是用来请求激活双向的或者单向的字节流 它必须 MUST 在从初始方发送给流主机的的IQ set中出现 而且是在从目标方接收到IQ result之后 并且必须 MUST 只有一个实例 streamhost 元素 streamhost 元素包含了字节流连接的信息 该元素有表示流主机的JID属性 网络主机 地址 网路端口 该元素不能 MUST NOT 包含任何文本节点 jid 属性指明了流主机的JID 该属性必须 MUST 出现 并且必须 MUST 在 iq 中是合法的JID host 属性指明了要连接的主机 该属性必须 MUST 出现 该属性的值必须 MUST 要么是可分解的域名或者是 带点的十进制 IP地址 比如1 2 3 4 port 属性指定了要连接的端口 该属性可以 MAY 出现 该属性的值必须 MUST 是十进制的合法的数字 zeroconf 属性指定了对于字节流可用的zero configuratio服务 属性应该 SHOULD 出现 该属性值应该是 SHOULD jabber bytestreams 当正在连接可用的主机时 初始方必须 MUST 要么包含主机和端口要么包含zeroconf信息 streamhost used 元素 streamhost used 元素指定了连接的流主机 该元素有个目的方连接的流主机的JID 该元素不能 MUST NOT 包含任何文本节点 jid 属性指定了流主机的全JID 该属性必须 MUST 出现 并且必须 MUST 在 iq 中是合法的JID activate 元素 activate 元素是一个用来触发代理完成连接的标志 可选的UDP支持 对UDP连接的支持完全是可选的 OPTIONAL 然而 支持UDP连接的具体实现必须 MUST 遵循本文档描述部分 查询UDP的支持 如果一个协议的实现支持UDP连接 它必须 MUST 在服务发现请求的响应中 发布 http jabber org protocol bytestreams udp 特性 例子21 初始方发送服务发现请求给目标方 iq type get from initiator example com foo to target example org bar id hello2 query xmlns http jabber org protocol disco info iq 如果目标方支持UDP连接 它必须 MUST 在服务发现结果中响应这个结果 例子22 目标方响应服务发现请求 iq type result from target example org bar to initiator example com foo id hello2 query xmlns http jabber org protocol disco info identity category proxy type bytestreams name SOCKS5 Bytestreams Service feature var http jabber org protocol bytestreams feature var http jabber org protocol bytestreams udp query iq 请求UDP模式 UDP连接要求将 mode 属性设置为 udp 而不是 tcp 例子23 初始化交互 UDP iq type set from initiator example com foo to target example org bar id initiate query xmlns http jabber org protocol bytestreams sid mySID mode udp streamhost jid initiator example com foo host 192 168 4 1 port 5086 query iq UDP处理 UDP模式和TCP模式有一个主要的不同 不是简单的建立TCP连接 目标方或者初始方必须 MUST 1 建立UDP连接 2 初始化UDP频道 特别地 如果接下来是直接连接 目标方必须 MUST 在通过 streamhost used 元素通知初始方建立连接成功之前 完成UDP连接和初始化UDP频道 如果接下来是间接连接 1 目标方必须 MUST 在通知初始方建立连接成功之前 完成UDP连接并且初始化UDP连接 并且 2 初始方必须 MUST 在请求激活流主机之前完成UDP连接和初始化UDP频道 建立UDP连接和初始化UDP频道的过程如下 建立UDP连接 一旦目标方成功通过代理的验证 在以下的 目标方与流主机建立SOCKS5连接 它必须 MUST 发送UDP连接 ASSOCIATE 请求 而不是CONNECT 请求给以上算法指定的主机 例子24 目标方向流主机请求UDP连接 CMD X 03 ATYP X 03 DST ADDR SHA1 Hash of SID Initiator JID Target JID DST PORT 0 流主机应答请求 例子25 流主机应答请求 STATUS X 00 初始化UDP频道 在连接了流主机之后 目标方 直接连接 或者目标方和初始方 间接连接 都必须 MUST 初始化UDP频道 为了初始话频道 每个发送实体必须 MUST 发送SOCKS5的UDP包给与初始化TCP连接相同的流主机的端口 根据在之前的例子中 主机是192 168 4 1 端口是5086 DST PORT设置为 1 DATA包含发送实体的JID 也就是 要么是目标方的JID要么是初始方的JID 例子26 目标方或者初始方发送UDP初始包到流主机 ATYP X 03 DST ADDR SHA1 Hash of SID Initiator JID Target JID DST PORT 1 DATA Target or Initiator JID 在流主机成功接收到了之后 流主机必须 MUST 响应一个消息通知来指明以及成功 例子27 流主机通知目标方或者初始方 初始化UDP成功 message from streamhostproxy example net to target example org bar id initiate udpsuccess xmlns http jabber org protocol bytestreams dstaddr Value of Hash message udpsuccess 元素表明流主机已经接收到UDP初始包 该元素有一个属性 此属性包含了在先前UDP包中使用的DST ADDR 如果目标方不能初始化UDP频道 那么它必须 MUST 返回一个 remote server not found 错误给初始方 注意 因为UDP是不可靠的 如果在短时间内 推荐 RECOMMENDED 5秒的重试时间 没有收到响应通知 目标方应该 SHOULD 重新发送UDP包 一旦响应了一个通知 流主机应该 SHOULD 忽略因接收到之后的UDP初始包而发生的冲突 交换UDP包 一旦UDP连接建立 就能和流主机交换UDP包 当任何一方发送了UDP包 它必须 MUST 包含4个字节的头信息 除了其他可能的头信息以外 比如SOCKS5 头信息由发送源的实际端口以及目标源的实际端口组成 这2者都是16位的网络字节序列 这可以允许网络节点在一个会话中可以多路传输许多包到不同的目标 实际的应用程序的数据应该跟在这些头信息之后 那么发送的大小是 应用程序数据大小 4 对于发送到流主机的所有包 DST PORT设置位0 DATA包含了承载发送的数据 例子28 发送UDP到流主机 ATYP X 03 DST ADDR SHA1 Hash of

    Original URL path: http://wiki.jabbercn.org/XEP-0065 (2016-04-25)
    Open archived version from archive

  • XEP-0077 - Jabber/XMPP中文翻译计划
    var password required field field type text single label Mother apos s Maiden Name var x mmn required field x query error code 405 type cancel not allowed xmlns urn ietf params xml ns xmpp stanzas error iq 用户应该 SHOULD 返回表单 例子 24 用户返回密码变更表单 iq type set from bill shakespeare lit globe to shakespeare lit id change2 query xmlns jabber iq register x xmlns jabber x data type submit field type hidden var FORM TYPE value jabber iq register changepassword value field field type text single var username value bill shakespeare lit value field field type text private var old password value theglobe value field field type text private var password value groundlings value field field type text single var x mmn value Throckmorton value field x query iq 可扩展性 为 jabber iq register 名字空间定义的字段严格受限于那个schema 如果一个主机需要收集额外的信息 XEP 0004 Data Forms x data 应该 SHOULD 遵循以下规则 一个主机不能 MUST NOT 增加新的字段给 jabber iq register 名字空间 而是 可扩展性应该 SHOULD 通过这里指定的数据表单协议来达到 x data 表单将作为一个子元素被包含在 query xmlns jabber iq register 元素中 它不能是一个 iq 节的子元素 并且遵守 RFC 3920 9 的 9 2 3 章节 x data 表单应该 SHOULD 包含 x data 字段以对应所有 iq register 字段 例如 用户名和密码 x data 表单应该 SHOULD 使用一个隐含的 FORM TYPE 字段用于表单的字段标准化 如 数据表单的字段标准化 10 章节所定义的那样 x data 表单将优先处理 iq register 字段 如果提交的实体支持 数据表单 协议 它应该 SHOULD 提交这个数据表单而不是预定义的 jabber iq register 字段 并且不能 MUST NOT 同时提交数据表单和预定义字段 见本文的 优先次序 章节 通过 数据表单 对扩展性的支持是推荐的 RECOMMENDED 但不是兼容本文所必需的 重定向 一个给定的部署可能 MAY 希望重定向用户到另一个媒介 例如web网站 去注册 而不是允许带内注册 推荐的方法是只包含一个 instructions 元素而不是必需的字段或数据表单到 IQ result 也就是一个采用 带外数据 11 编码的URL 详见下文的 优先次序 章节 例子 25 主机重定向实体到web注册 iq type result from contests shakespeare lit to juliet capulet com balcony id reg3 query xmlns jabber iq register instructions To register visit http www shakespeare lit contests php instructions x xmlns jabber x oob url http www shakespeare lit contests php url x query iq 优先次序 基于前述的讨论 可见一个实体从一个服务对其请求信息的应答所接收的可以是 iq register x data 以及 x oob 名字空间的任意组合 其优先次序如下 x data iq register x oob 自然 如果接收的应用不理解任何前述的名字空间 它必须 MUST 忽略被这些名字空间所限定的数据 从而一个主机有可能返回任何以下的组合 在哪种情况下提交的应用必须 MUST 进行下表定义的操作 假设 iq register fields 表示 instructions 加 字段 而 iq register instructions 只表示 instructions 元素 表 3 推荐的名字空间组合的处理 包含的数据 推荐的处理 备注 iq register fields 提交完整的 iq register 字段 这是通用的处理模式用于 遗留 服务和客户端 x data form iq register fields 如果理解 提交完整的 x data 表单 否则提交完整的 iq register 字段 无论如何 一个应用不能 MUST NOT 同时提交两者 iq register 字段将被用于 遗留 客户端 如果 x data 表单包含必需的字段 例如 一个public key 并且这字段不同于已定义的 iq register 字段 这个组合不应该被 SHOULD NOT 使用 而应该 SHOULD 使用下一个组合 x data form iq register instructions 如果理解 提交完整的 x data 表单 否则展示 iq register instructions 给用户 如果 x data 表单包含必需的字段 例如 一个 public key 而这字段不同于已定义的 iq register 字段并且没有替代的URL可用 这个组合应该 SHOULD 使用 x data form x oob URL 如果理解 提交完整的 x data 表单 否则提供替代的URL给用户 本组合可以 MAY 由一个主机返回 但是一个主机应该 SHOULD 返回下一个组合以支持全范围的遗留客户端 x data form iq register instructions x oob URL 如果理解 提交完整的 x data 表单 否则展示 iq register instructions 并提供替代的URL给用户 如果 x data 表单包含必需的字段 例如 一个 public key 而这个字段不同于已定义的 iq register 字段并且没有替代的URL可用 本组合应该 SHOULD 使用 iq register instructions x oob URL 展示 iq register instructions 和提供的重定向URL 本组合可以 MAY 由一个希望重定向注册到一个URL的主机返回 iq register fields x oob URL 提交完整的 iq register 字段但是可选的展示替代的URL 本组合不推荐 NOT RECOMMENDED Key元素 这个元素已过时了 但是纪录下来以保持历史的完整性 key 元素是在建立 IQ 交互时用的一个 transaction key 为了验证发送者的身份 典型的 它被用于进行带内注册时的服务器 但通常不是服务 因为通常一个用户在注册之前还没有一个 from 地址 流程如下 客户端发送 IQ get 请求给服务器 服务器返回必需的元素给客户端 包含 key 元素 其值为一个随机的字符串 经常是一个 SHA 1 哈希值 客户端发送注册信息给服务器 其中包含 key 元素 其值和服务器提供的一致 服务器检查 key 信息并且处理注册请求 如果没有 key 或 key 值和提供的transaction key值不一致 服务器返回一个错误 key 元素也被用于注册取消过程中 流特性 RFC 3920 定义了流协商时声明支持的特性的方法 为了追求效率 它可能期望一个服务器把支持带内注册作为一个流特性来声明 用于汇报支持的 stream features 名字空间是 http jabber org features iq register 在接收一个由 jabber client 名字空间限定的流头信息之后 一个服务器返回一个流头信息给该客户端 并且可以 MAY 声明对带内注册的支持 即包含有关的流特性 例子 26 声明注册为一个流特性 xml version 1 0 encoding utf 8 stream stream xmlns stream http etherx jabber org streams xmlns jabber client from somedomain version 1 0 stream features register xmlns http jabber org features iq register stream features 一个服务器不应该 SHOULD NOT 向另一个服务器 也就是说 如果初始化流头信息是由 jabber server 名字空间限定的 声明带内注册 错误处理 如此处所定义的 jabber iq register 名字空间同时支持老的 HTTP style 错误码和定义在 XMPP Core 中的可扩展的错误级别及条件 一个兼容的服务器或服务实现必须 MUST 同时支持老格式和新格式的错误处理 一个兼容的客户端实现应该 SHOULD 支持两者 关于 HTTP style 错误对应XMPP style 条件的映射表 参考 错误条件映射 12 安全事项 带内注册经常不包含在其他消息协议中 例如 SMTP不包含一个方法用于向一个email服务器注册 经常是因为安全的原因 这里定义的注册方法据知是不安全的并且不应该 SHOULD NOT 使用 除非注册方和接受注册的实体之间的通道是安全的 因为这些原因 带内注册的布署是一个策略问题并且一个给定的布署可以 MAY 选择禁止带内注册和密码变更 此外 一旦一个成功的协议被定义和实现 本文应该立刻过时 IANA事项 本文档与 互联网编号分配授权机构 13 无关 XMPP注册事项 协议名字空间 XMPP注册员 XMPP Registrar 14 在它的协议名字空间注册项中包含了 jabber iq register 名字空间 流特性 XMPP注册员 XMPP Registrar 在它的流特性名字空间的注册项中包括了 http jabber org features iq register 名字空间 URI查询类型 作为由 XMPP URI Query Components 15 授权的机构 XMPP登记处维护着一个用于 XMPP URIs 的查询和键 值对的注册项 见 http www xmpp org registrar querytypes html 如下所述 已注册的用于注册管理的查询类型为 register 和 unregister register jabber iq register 名字空间包含了一个新建注册的机制 完成这项工作的已注册的查询类型为 register 例子 27 注册动作 IRI URI xmpp marlowe shakespeare lit register 因为注册是一个两步的过程 应用程序必须 MUST 接着发送一个 IQ get 给实体让其接收必需的注册字段 例子 28 接收注册字段 iq to marlowe shakespeare lit type get query xmlns jabber iq register iq 例子 29 接收注册字段 iq from marlowe shakespeare lit type result query xmlns jabber iq register username password query iq 应用程序必须 MUST 接着展示一个适当的界面使用户能够完成注册表单 一旦用户提供了信息 应用程序必须 MUST 发送一个 IQ set 给实体 例子 30 发送注册信息 iq to marlowe shakespeare lit type set query xmlns jabber iq register username juliet username password R0m30 password query iq 以下提交注册了 register 查询类型 querytype name register name proto jabber iq register proto desc enables registering with a server or service desc doc XEP 0077 doc querytype unregister jabber iq register 名字空间包含了一个取消现有注册的机制 完成这个工作的已注册的查询类型为 unregister 例子 31 取消注册动作 IRI URI xmpp marlowe shakespeare lit unregister 例子 32 取消注册动作 结果节 iq to marlowe shakespeare lit type get query xmlns jabber iq register remove query iq 以下提交注册了 unregister 查询类型 querytype name unregister name proto jabber iq register proto desc enables cancellation of a registration with a server or service desc doc XEP 0077 doc querytype 字段标准化 对于每个和 jabber iq register 名字空间有关的主要用例的字段标准化 有一个 FORM TYPE 以及相关的字段类型和字段名称 注册 取消注册 变更密码 这些 FORM TYPES 的初始提交如下 另外的字段可以由将来的提交提供 注册 form type name jabber iq register name doc XEP 0077 doc desc Standardization of fields related to registration use case desc field var username type text single label Account name associated with the user field var nick type text single label Familiar name of the user field var password type text private label Password or secret for the user field var name type text single label Full name of

    Original URL path: http://wiki.jabbercn.org/XEP-0077 (2016-04-25)
    Open archived version from archive

  • XEP-0079 - Jabber/XMPP中文翻译计划
    或那些承载了这类服务的机器 应该 SHOULD 使用网络时间协议 RFC 1305 5 和已确定的授时保持同步 也要注意 期满 时间离当前时间越近则 期满 功能越不可靠 例如 一个消息指定的 期满 时间为两秒比起设置为两小时或两天 发送者将会更容易得到不可靠的递送 value 属性的内容定义了消息发送的准确时间之后的一些点 它的内容必须 MUST 是一个 DateTime 定义在 XMPP Date and Time Profiles 6 并且时区必须 MUST 是 UTC 如果消息将在指定的日期时间之后发送 则条件成立 要决定时间的比较 处理器首先要决定是否以及何时一个消息能被分发 例如不是离线存储 然后处理器记录这个时间 并把它和指定的时间比较 如果当前的时间正好在指定时间或在指定时间之后 则条件吻合 这个条件可以 MAY 被应用于服务器路由中的每一 跳 匹配资源 match resource 条件用于基于接收者的 JID 中的 资源ID 来限制递送 这个条件的定义值如下 表 2 match resource 值 值 描述 例子 any 目标资源匹配任何值 高效地忽略任何指定的资源 home laptop 匹配 home home desktop 或 work desktop exact 目标资源精确匹配指定的资源 home laptop 只匹配 home laptop 而不是 home desktop 或 work desktop other 目标资源匹配任何除指定资源之外的值 home laptop 匹配 work desktop home 或 home desktop 但不包括 home laptop 按照上述规则 如果实际的目标JID的资源匹配指定的JID 则条件成立 例如 如果一个消息指定给 romeo montague net work 伴随 exact 的 match resource 条件 如果这个消息只能立刻被发送给 romeo montague net work 则条件吻合 为了达到这个条件的目的 一个没有资源的特定 JID 有以下行为 如果值为 exact 仅当服务器将发送给一个没有资源ID的目标JID时 条件成立 例如 一个 多用户聊天 7 房间 或离线存储 如果值为 other 仅当服务器将不递送给没有资源ID的目标JID时 条件成立 这个条件不能 MUST NOT 被应用于服务器路由的每一 跳 只能用于边缘服务器 如果一个 amp 元素包含了这个条件并且指明它将被每一跳处理 这个 rule 将被忽略 注意 从设计上说 这个协议不包含局部资源匹配的支持 它将导致 例如 资源ID home laptop 和 homeboy 都匹配 home 定义的动作 动作定义了当一个特定的规则被触发时将发生什么 动作属性的值决定如果一个规则的条件被触发之后的行为 以下动作由本文定义 警告 alert 动作触发一个应答 message 节给发送实体 这个 message 节必须 MUST 包含元素 amp status alert 它本身包含触发这个动作的 rule 在所有其他的关系中In all other respects 这个动作表现为 drop 例子 7 警告 应答 message from hamlet lit to bernardo hamlet lit elsinore id chatty2 amp xmlns http jabber org protocol amp status alert from francisco hamlet lit to bernardo hamlet lit elsinore rule action alert condition deliver value stored amp message 丢弃 drop 动作安静地从任何更多递送尝试中丢弃消息并确保它不会被离线存储 drop 不能 MUST NOT 导致任何其他应答 错误 error 动作触发一个类型为 error 的应答 message 节给发送实体 这个 message 节的 error 子元素必须 MUST 包含一个 failed rules xmlns http jabber org protocol amp errors 错误条件 它本身包含触发这个动作的规则 例子 8 错误应答 message from hamlet lit to bernardo hamlet lit elsinore type error id chatty2 amp xmlns http jabber org protocol amp status error from francisco hamlet lit to bernardo hamlet lit elsinore rule action error condition deliver value stored amp error type modify code 500 undefined condition xmlns urn ietf params xml ns xmpp stanzas failed rules xmlns http jabber org protocol amp errors rule action error condition deliver value stored failed rules error message 注意这个错误应该 SHOULD 类型为 modify 并且一般错误条件应该 SHOULD 是 undefined condition xmlns urn ietf params xml ns xmpp stanzas 通知 notify 动作触发一个应答 message 节给发送实体 这个 message 节应该 MUST 包含元素 amp status notify 它本身包含触发这个动作的 rule 不像其他动作 这个动作不超越服务器的缺省行为 取而代之的是 服务器在发送这个通知之后执行它的缺省行为 例子 9 通知应答 message from hamlet lit to bernardo hamlet lit elsinore id chatty2 amp xmlns http jabber org protocol amp status notify from francisco hamlet lit to bernardo hamlet lit elsinore rule action notify condition deliver value stored amp message 条件 动作联合描述 一般来说 一个规则被视为 如果 condition 对于 value 是真就去做 action 无论如何 为了便于理解 本章以简单文字来描述多种多样的条件 动作联合 递送规则 当条件是 deliver 规则可能被描述如下 表 3 递送规则 动作 值 描述 alert direct 返回一个警告如果消息将被直接递送 alert forward 返回一个警告如果消息将被转发给另一个 XMPP 地址 alert gateway 返回一个警告如果消息将通过一个网关递送到一个非XMPP地址 alert none 返回一个警告如果消息无法递送 alert stored 返回一个警告如果消息将被离线存储用于以后通过 XMPP 递送 drop direct 丢弃这个消息如果它将被直接递送 drop forward 丢弃这个消息如果它将被转发到另一个 XMPP 地址 drop gateway 丢弃这个消息如果它将通过一个网关递送到一个非XMPP地址 drop none 丢弃这个消息如果它无法递送 drop stored 丢弃这个消息如果它将被离线存储用于以后通过 XMPP 递送 error direct 返回一个错误如果消息将被直接递送 error forward 返回一个错误如果消息将被转发给另一个 XMPP 地址 error gateway 返回一个错误如果消息将通过一个网关递送到一个非XMPP地址 error none 返回一个错误如果消息无法递送 error stored 返回一个错误如果消息将被离线存储用于以后通过 XMPP 递送 notify direct 返回一个通知如果消息将被直接递送 notify forward 返回一个通知如果消息将被转发给另一个 XMPP 地址 notify gateway 返回一个通知如果消息将通过一个网关递送到一个非XMPP地址 notify none 返回一个通知如果消息无法递送 notify stored 返回一个通知如果消息将被离线存储用于以后通过 XMPP 递送 期满规则 当一个条件是 expire at 规则描述如下 表 4 期满规则 动作 描述 alert 返回一个警告如果消息将在指定的时间戳之后递送 drop 丢弃这个消息如果它将在指定的时间戳之后递送 error 返回一个错误如果消息将在指定的时间戳之后递送 notify 返回一个通知如果消息将在指定的时间戳之后递送 资源匹配规则 当一个条件是 match resource 规则描述如下 表 5 资源匹配规则 动作 值 描述 alert any 返回一个警告如果消息将被递送给任何资源 alert exact 返回一个警告如果消息将被递送给准确的资源 alert other 返回一个警告如果消息将被递送给指定资源之外的资源 drop any 丢弃这个消息如果它将被递送给任何资源 drop exact 丢弃这个消息如果它将被递送给准确的资源 drop other 丢弃这个消息如果它将被递送给指定资源之外的资源 error any 返回一个错误如果消息将被递送给任何资源 error exact 返回一个错误如果消息将被递送给准确的资源 error other 返回一个错误如果消息将被递送给指定资源之外的资源 notify any 返回一个通知如果消息将被递送给任何资源 notify exact 返回一个通知如果消息将被递送给准确的资源 notify other 返回一个通知如果消息将被递送给指定资源之外的资源 正式描述 amp 根元素 所有递送语义都被封装在 amp 元素里 这个元素包含一个或多个 rule 元素指定特定的规则来处理 它能选择性地拥有关于当前状态的属性 原始发送者和接收者 以及路由的适用性 status 属性为 amp 元素指定原因 当指定的语义被应用时 客户端到服务器 这个属性不能 MUST NOT 出现 当根据一个匹配的条件向一个发送实体应答时 这个属性必须 MUST 出现并且应该 SHOULD 是已触发规则的 action 属性的值 注意 单独的动作定义可以 MAY 提供它们自己的要求 from 属性指明包含 message 节的原始发送者 这个属性必须 MUST 由任何从支持的服务器发送的 message 节指定 不管接收者是什么情况 它不应该 SHOULD NOT 以别的方式指定 from 属性值必须 MUST 是原始 message 节的发送者的全JID node domain resource to 属性指明包含 message 节的原始 期望的 接收者 这个属性必须 MUST 由任何从支持的服务器发送的 message 节指定 不管接收者是什么情况 它不应该 SHOULD NOT 以别的方式指定 to 属性值必须 MUST 是原始 message 节的预定接收者的全JID node domain resource per hop 属性标记是否在原始发送者和原始的预定接收者之间的路由的每一跳处理包含的规则集 这个属性可以 MAY 出现 并且必须 MUST 要么是 true 要么是 false 如果不显示 缺省是 false rule 元素 每个语义规则由一个 rule 元素指定 这个元素拥有一些属性用于条件 值 和动作 action 属性为这个规则定义结果 这个属性必须 MUST 出现 并且必须 MUST 要么是一个在 定义的动作 章节定义的值 要么在 XMPP Registrar 中注册了 condition 属性定义这个规则应用的全部条件 这个属性必须 MUST 出现 并且必须 MUST 要么是一个在 定义的条件 章节定义的值 要么在 XMPP Registrar 中注册了 value 属性定义条件如何匹配 这个属性必须 MUST 出现 并且不能 MUST NOT 是空的字符串 这个属性的值的解释由 condition 属性决定 示例场景 可靠数据传输 message 节对于数据传输来说几乎是完美的 但是为了确保可靠性经常会要求某一消息不递送给任何指定资源之外的资源 为了满足这个要求 发送实体包含一个 rule action drop condition match resource value other 如果不需要失败通知的话 或 rule action error condition match resource value other 如果需要失败通知的话 以下例子使用 带内字节流 8 展示了这一场景 例子 10 发送一个可靠数据传输的消息 message to francisco hamlet lit pda from bernardo hamlet lit elsinore id ibb1 data xmlns http jabber org protocol ibb sid mySID seq 0 qANQR1DBwU4DX7jmYZnncmUQB 9KuKBddzQH tZ1ZywKK0yHKnq57kWq RFtQdCJ WpdWpR0uQsuJe7 vh3NWn59 gTc5MDlX8dS9p0ovStmNcyLhxVgmqS8ZKhsblVeu IpQ0JgavABqibJolc3BKrVtVV1igKiX N7Pi8RtY1K18toaMDhdEfhBRzO XB0 P AQhYlRjNacGcslkhXqNjK5Va4tuOAPy2n1Q8UUrHbUd0g xJ9Bm0G0LZXyvCWyKH kuNEHFQiLuCY6Iv0myq6iX6tjuHehZlFSh80b5BVV9tNLwNR5Eqz1klxMhoghJOA data amp xmlns http jabber org protocol amp per hop true rule action error condition expire at value 2004 09 10T08 33 14Z rule action error condition match resource value other amp message 在以上案例中 如果消息不能在指定的时间递送到指定的 francisco hamlet lit pda 地址 发送者将收到一个错误应答 举例来说 如果预定的资源在消息能够递送之前下线了 处理服务器将返回以下错误 例子 11 失败的可靠数据传输消息 message from hamlet lit to bernardo hamlet lit elsinore id ibb1 amp xmlns http jabber org protocol amp from bernardo hamlet lit elsinore to francisco hamlet lit pda rule action error condition match resource value other amp error type modify code 500 undefined condition xmlns urn ietf params xml ns xmpp stanzas failed rules xmlns http jabber org protocol amp errors rule action error condition match resource value other failed rules error message 时间敏感消息 时间敏感消息在某些环境是一个频繁发生的事情 例如 全体决策人员例行通知其他人某些客户 事件 意外的小憩 以及特别的聚会 要发送一个时间敏感消息 发送实体可以在一个 rule action drop condition expire at 中包含事件发生的时间 例子 12 发送一个时间敏感消息 message to linuxwolf outer planes net from receptionist outer planes net id alert849 subject Guest Alert subject body There will be clients in the conference room today around 1 PM As always be courteous and quiet nearby body amp xmlns http jabber org protocol amp rule action drop condition expire at value 2003 06 23T23 00 00Z amp message 在上述例子中 一旦时间超过 23 00 UTC 3 00 PM Pacific Daylight Time linuxwolf outer planes net 的服务器将不递送这个消息 瞬时消息 瞬时消息是指那些永远不应该离线存储的消息 要发送一个瞬时消息 发送实体可以包含一个 rule action drop condition deliver value stored 例子 13 发送一个瞬时消息 message to francisco hamlet lit from bernardo hamlet lit elsinore type chat id chatty1 body Who apos s there body amp xmlns http jabber org protocol amp rule action drop condition deliver value stored amp message 作为选择 发送实体可以包含一个 rule action alert condition deliver value stored 来提出警告而不是安静地丢弃这个消息 例子 14 发送一个瞬时消息 请求警告 message to francisco hamlet lit from bernardo hamlet lit elsinore type chat id chatty2 body Who apos s there body amp xmlns http jabber org protocol amp rule action alert condition deliver value stored amp message 例子 15 关于瞬时消息的发送者警告 message from hamlet lit to bernardo hamlet lit elsinore id chatty2 amp xmlns http jabber org protocol amp action alert from bernardo hamlet lit elsinore to francisco hamlet lit rule action alert condition deliver value stored amp message 错误处理 条件 为了简化错误条件的讨论 本文在名字空间 URIs 和名字空间前缀之间使用以下映射 注意 这个映射仅用于简化讨论的目的而不是想在协议本身中使用它 表 6 名字空间映射 前缀 URI xmpp urn ietf params xml ns xmpp stanzas msg http jabber org protocol amp err http jabber org protocol amp errors 接下来的表显示和一般的 AMP 规则 和条件以及 定义的动作 相关的可能的错误条件 表 7 错误条件 一般条件 错误类型 详细条件 描述 xmpp bad request modify msg unsupported actions 不支持一个或多个规则的指定动作 元素 msg unsupported actions 包含那个指定了不支持的动作的 rule 元素 xmpp bad request modify msg unsupported conditions 不支持一个或多个规则的指定条件 元素 msg unsupported conditions 包含那个指定了不支持的条件的 rule 元素 xmpp not acceptable modify msg invalid rules 服务器不接受一个或多个规则 通常是因为条件 动作组合被限制 元素 msg invalid rules 包含那个不被接受的 rule 元素 xmpp service unavailable cancel NONE 不支持本协议 如果到达接收者的路由中的服务器没有实现本协议 这个错误被返回给发送实体 xmpp undefined condition modify err failed rules 一个或多个 rule 元素触发了 error 动作 这个条件包含那个被触发的 rule 元素 例子 本章显示上一章的错误条件的例子 关于 XMPP 错误条件和 Jabber 错误码的映射信息 参考 错误条件映射 9 不支持的动作 例子 16 一个包含AMP语义的消息 message from northumberland shakespeare lit id richard2 4 1 247 to kingrichard royalty england lit body My lord dispatch read o er these articles body amp xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z amp message 例子 17 服务器不支持动作 message from shakespeare lit id richard2 4 1 247 to northumberland shakespeare lit type error amp xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z amp error type modify code 400 bad request xmlns urn ietf params xml ns xmpp stanzas unsupported actions xmlns http jabber org protocol amp rule condition expire at action drop value 2004 01 01T00 00 00Z unsupported actions error message 不支持的条件 例子 18 一个包含AMP语义的消息 message from shakespeare lit id richard2 4 1 247 to kingrichard royalty england lit body My lord dispatch read o er these articles body amp xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z amp message 例子 19 服务器不支持条件 message from shakespeare lit id richard2 4 1 247 to northumberland shakespeare lit type error amp xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z amp error type modify code 400 bad request xmlns urn ietf params xml ns xmpp stanzas unsupported conditions xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z unsupported conditions error message 不被接受 例子 20 一个包含AMP语义的消息 message from northumberland shakespeare lit id richard2 4 1 247 to kingrichard royalty england lit body My lord dispatch read o er these articles body amp xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z amp message 例子 21 规则不被服务器接受 message from shakespeare lit id richard2 4 1 247 to northumberland shakespeare lit type error amp xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z amp error type modify code 405 not acceptable xmlns urn ietf params xml ns xmpp stanzas invalid rules xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z invalid rules error message 服务不可用 例子 22 一个包含AMP语义的消息 message from northumberland shakespeare lit id richard2 4 1 247 to kingrichard royalty england lit body My lord dispatch read o er these articles body amp xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z amp message 例子 23 AMP服务不可用 message from royalty england lit id richard2 4 1 247 to northumberland shakespeare lit type error amp xmlns http jabber org protocol amp rule action drop condition expire at value 2004 01 01T00 00 00Z amp error type cancel code 503 service unavailable xmlns urn ietf params xml ns xmpp stanzas error message 未定义的条件 例子 24 一个包含AMP语义的消息 message from hamlet lit to bernardo hamlet lit elsinore id chatty2 body Who apos s there body amp xmlns http jabber org protocol amp status error from francisco hamlet lit to bernardo hamlet lit elsinore rule action error condition deliver value stored amp message 例子 25 失败的规则 message from hamlet lit to bernardo hamlet lit elsinore type error id chatty2 amp xmlns http jabber org protocol amp status error from francisco hamlet lit to bernardo hamlet lit elsinore rule action error condition deliver value stored amp error type modify code 500 undefined condition xmlns urn ietf params xml ns xmpp stanzas failed rules xmlns http jabber org protocol amp errors rule action error condition deliver value stored failed rules error message 实现备注 如果接收者的服务器实现了 离线存储 它将需要跟踪那些离线消息以遵守期满规则并且不能递送那些过期的消息 如何正确地做到这一点是实施的一个问题 一个可能的实施是让服务器维护一个独立的可过期消息的数据库并定时扫描它 发现一个过期的消息之后 它可以把这个消息标记为符合丢弃条件并通知发送者 但是直到接收者下次可用的时候才真正丢弃这个消息 流特性 XMPP Core 10 定义了在流协商期间声明特性支持的方法 为了提高效率 服务器把AMP作为流特性支持来声明是值得的 在 stream features 中用于报告这一支持的名字空间是 http jabber org features amp 从初始化实体接收到流头信息之后 接收实体 通常是服务器 返回一个流头信息给初始化实体并且可以 MAY 通过注册相关的流特性宣告支持AMP 例子 26 宣告AMP为流特性之一 xml version 1 0 encoding utf 8 stream stream xmlns stream http etherx jabber org streams xmlns jabber client from somedomain version 1 0 stream features amp xmlns http jabber org features amp stream features 安全事项 大部分的 AMP 条件可能被用于未授权的个体获得IM服务器及其他基于出席信息的消息系统的用户的出席信息 例如 考虑以下场景 用户 romeo montague net 不是用户 nurse capulet com 出席信息的一个授权订阅者 但是发送了一个 message 节给那个地址 这个节包含了一个条件为 deliver 值为 stored 的规则以及一个 alert 动作 如果 Nurse 不在线 在发现 Nurse 离线的过程中 Romeo 将接收到一个 AMP 警告那个消息已离线存储 类似的场景可能出现在 match resource 规则 发送给用户的常用资源 和 expire at 规则 每分钟发送消息以获得出席信息 如果一个服务器实现了如 RFC 3921 11 定义的出席信息订阅 如果一个通知将暴露接收者的在线或离线状态 12 这个服务器不应该 SHOULD NOT 返回警告 错误 或其他 AMP 通知给未被授权查看接收者出席信息 通过一个订阅 both 或 from 的发送者 关于这个问题有以下几种不同的实施指引 不实现相关的条件 作为结果 如果那个条件被指定 服务器必须 MUST 应答一个 feature not implemented 错误条件 无论如何 这过度限制了支持的条件显著地削弱了 AMP 的功能 所以它是不推荐的 NOT RECOMMENDED 只在动作为 drop 时接受相关的条件 作为结果 如果这个动作为 alert error 或 notify 服务器必须 MUST 应答一个 not acceptable 错误条件 这轻微地限制但仍是不必要地限制了系统的功能 所以这是不推荐的 NOT RECOMMENDED 只有发送者被授权可以获得接收者的出席信息的时候才接受相关的条件 作为结果 如果发送者未获得那样的授权 服务器必须 MUST 应答一个 not acceptable 错误条件 这是推荐的 RECOMMENDED 行为 IANA事项 本文档与 互联网编号分配授权机构 13 无关 XMPP注册事项 协议名字空间 XMPP Registrar 14 在它的协议名字空间注册项中包含了 http jabber org protocol amp 和 http jabber org protocol amp errors 名字空间 流特性 XMPP注册在它的流特性名字注册项中包括 http jabber org features amp 名字空间 知名服务发现节点 XMPP注册在它的知名服务发现节点的注册项中包括了 http jabber org protocol amp 注册项 规则条件注册项 XMPP登记处在 http www xmpp org registrar amp conditions html 维护了一个AMP rule 条件的注册项 过程 为了给这个注册项提交新值 注册者必须按以下格式定义一个 XML 片断并且要么把它包含在相关的 XMPP 扩展协议中要么把它用发送给email地址 registrar xmpp org condition name the value of the condition attribute name ns the namespace to be used as a service discovery feature ns per hop does the per hop flag apply true false per hop value The syntax e g datatype or allowable values of the value attribute value processing values that result in message processing processing doc the document e g XEP in which this condition is specified doc condition 注册者可以同一时间注册多个条件 每个包含在一个独立的 condition 节之中 注意 这个条件集的名字空间将被包含在 服务器发现特性注册项中Service Discovery features registry 最低要求 condition name deliver name ns http jabber org protocol amp condition deliver ns per hop true per hop value direct forward gateway none stored value processing The condition is met if 1 the value is direct and the message can be immediately delivered or further dispatched 2 the value is forward and the message can be forwarded to another XMPP address 3 the value is gateway and the message can be sent to a non XMPP address via a gateway 4 the value is none and the message cannot be delivered at all or 5 the value is stored and the message can be stored for later delivery processing doc XEP 0079 doc condition condition name expire at name ns http jabber org protocol amp condition expire at ns per hop true per hop value DateTime per XEP 0082 value processing The condition is met if the message would be delivered after the specified DateTime processing doc XEP 0079 doc condition condition name match resource name ns http jabber org protocol amp condition match resource ns per hop false per hop value any exact other value processing The condition is met if 1 the value is any and the intended recipient has at least one available resource as defined in the XMPP IM specification 2 the value exact and the intended recipient has an available resource that exactly matches the JID specified in the to address 3 the value is other and the intended recipient has an available resource whose full JID is other than that specified in the to address processing doc XEP 0079 doc condition 规则动作注册项 XMPP登记处在 http www xmpp org registrar amp actions html 中维护了一个 AMP rule 动作注册项 过程 为了给这个注册项提交新值 注册者必须按以下格式定义一个 XML 片断并且要么把它包含在相关的 XMPP 扩展协议中要么把它用发送给email地址 registrar xmpp org action name the value of the action attribute name ns the namespace to be used as a service discovery feature ns behavior the expected behavior if the rule is triggered behavior doc the document e g XEP in which this action is specified doc action 注册者可以同一时间注册多个动作 每个包含在一个独立的 action 节之中 注意 这个动作集的名字空间将被包含在 服务器发现特性注册项中Service Discovery features registry 初始提交 action name alert name ns http jabber org protocol amp action drop ns behavior The message is silently discarded but an alert is returned to the sender behavior doc XEP 0079 doc action action name drop name ns http jabber org protocol amp action drop ns behavior The message is silently discarded behavior doc XEP 0079 doc action action name error name ns http jabber org protocol amp action error ns behavior The message is not processed and an error is returned to the sender specifying which rule resulted in failed processing behavior doc XEP 0079 doc action action name notify name ns http jabber org protocol amp action notify ns behavior The message is processed and a notification message is returned to the sender specifying which rule was processed behavior doc XEP 0079 doc action XML架构 AMP xml version 1 0 encoding UTF 8 xs schema xmlns xs http www w3 org 2001 XMLSchema targetNamespace http jabber org protocol amp xmlns http jabber org protocol amp elementFormDefault qualified xs annotation xs documentation The protocol documented by this schema is defined in XEP 0079 http www xmpp org extensions xep 0079 html xs documentation xs annotation xs element name amp xs complexType xs sequence xs element ref rule minOccurs 1 maxOccurs unbounded xs sequence xs attribute name from usage optional type xs string xs attribute name per hop use optional type xs bool default false xs attribute name status usage optional type xs NCName xs attribute name to usage optional type xs string xs complexType xs element xs element name invalid rules xs complexType xs sequence xs element ref rule minOccurs 1 maxOccurs unbounded xs sequence xs complexType xs element xs element name unsupported actions xs complexType xs sequence xs element ref rule minOccurs 1 maxOccurs unbounded xs sequence xs complexType xs element xs element name unsupported conditions xs complexType xs sequence xs element ref rule minOccurs 1 maxOccurs unbounded xs sequence xs complexType xs element xs element name rule xs complexType xs attribute name action use required type xs NCName xs attribute name condition use required type xs NCName xs attribute name value use required type xs string xs complexType xs element xs schema 错误 xml version 1 0 encoding UTF 8 xs schema xmlns xs http www w3 org 2001 XMLSchema targetNamespace http jabber org protocol amp errors xmlns http jabber org protocol amp errors elementFormDefault qualified xs annotation xs documentation The protocol documented by this schema is defined in XEP 0079 http www xmpp org extensions xep 0079 html xs documentation xs annotation xs element name failed rules xs

    Original URL path: http://wiki.jabbercn.org/XEP-0079 (2016-04-25)
    Open archived version from archive



  •