RFC6121-IM-01管理名册订阅01基本知识点

1,基本概念

在XMPP中, 一个用户的名册包含任意数量的特定联系人。一个用户的花名册由用户的服务器代替用户储存,从而使用户可以从任何资源设备访问花名册信息。当用户添加或修改 名册条目时,如果无错误发生,服务器应该尽可能不加修改地存储那些数据,并且当一个授权的客户端请求名册时,服务器必须返回那些数据。

2,必备知识点

名册是用 节管理的, 确切的说就是一个由’jabber:iq:roster’命名空间限定的子元素. 详细的语法和语义在接下来的章节中定义.

2.1 iq roster标签及其释义:

格式如下:

<iq 
    <query 
        xmlns="jabber:iq:roster"  ver="ver13">
        <item 
            jid 
            name
            ask
            subscription>
            <group>
                用户所属组别名称
            </group>
        </item>
    </query>
</iq>

xmlns=“jabber:iq:roster” : 当xmlns="…roster" 就意味着要去获取好友列表

jid : 是必需,无论是客户端还是服务器添加, 更新, 删除, 或返回一个名册条目.

name : 可选的,是该jid对应的用户的昵称。

__>示例
比如admin@openfiresever这个用户,他自己设置的昵称为“aaa”,我加他为好友后,我可以将其在我的好友列表中重命名为“bbb“。和QQ类似。
item : 名册条目,每个元素描述了一个唯一的"名册条目"(又是也称为一个"联系人").

ask : 待处理的意思

__>已知取值
ask="subscribe"意思为待处理的订阅。
ask="unsubscribe"意思为待处理的取消订阅。

__>示例
比如A加B为好友,B可能还未上线无法进行处理,那么这个时候A获取好友列表的时,其中关 于B的中就包含ask=“subscribe”。
ask="unsubscribe"也是同理,将某个人移出好友名单,那个时刻发送的XMPP报文中就包 含ask=“unsubscribe”

subscription : 与某个好友之间的订阅的状态,

__>已知取值(假设我是A,对方是B)
none :缺省值,A没有订阅B,B也没有订阅A。
to : A订阅了B,B没有订阅A
from : B订阅了A, A没有订阅B
both : 互相都订阅了。
remove : 删除联系人。他的列表中也会把你删除。

__>示例
如果A加了B为好友,但是B还未处理。A上线获取好友列表中的subscription=“none”
如果A加了B为好友,B同意。A上线获取好友列表中的subscription=“both”
subscription=“to/from” 。一般是中间状态偏多,比如A加B为好友,(此时suscription=none),B同意了,B也会请求订阅A,(to),A同意了(both)。

group :组别,说明该联系人属于哪个组别。一个可以包含多个,即一个人可以属于多个组别。一个roster set可以不包含,那么说明该联系人不属于任何组别。

ver : 'ver’属性是一个标识名册信息的特定版本的字符串. 它的值必须仅由服务器生成并且必须由客户端不透明地处理. 服务器可以使用任何适当的方法来生成该版本ID, 类似名册数据的哈希值或一个严格递增的序列号.
建议包含’ver’属性.

我在spark-openfiresever上没见过

2.3 presence节

presence节时出席节,这里不介绍其概念。其格式大致如下。

<presence id='presDnd_342d31c702391' xmlns='jabber:client' type=''>
</presence>

如果presence节的type为以下四种之一,则是管理名册的节。
subscribe 发送者希望订阅接收者的出席信息.
unsubscribe 发送者取消订阅接收者的出席信息.
subscribed 发送者已经允许接收者接收他们的出席信息.
unsubscribed 订阅请求已经被拒绝或撤销之前准许的被对方订阅.

2.3标签schema如下
<?xml version='1.0' encoding='UTF-8'?>
 
<xs:schema
    xmlns:xs='http://www.w3.org/2001/XMLSchema'
    targetNamespace='jabber:iq:roster'
    xmlns='jabber:iq:roster'
    elementFormDefault='qualified'>
 
  <xs:element name='query'>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref='item'
                    minOccurs='0'
                    maxOccurs='unbounded'/>
      </xs:sequence>
      <xs:attribute name='ver'
                    type='xs:string'
                    use='optional'/>
    </xs:complexType>
  </xs:element>
 
  <xs:element name='item'>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref='group'
                    minOccurs='0'
                    maxOccurs='unbounded'/>
      </xs:sequence>
      <xs:attribute name='approved'
                    type='xs:boolean'
                    use='optional'/>
      <xs:attribute name='ask'
                    use='optional'>
        <xs:simpleType>
          <xs:restriction base='xs:NMTOKEN'>
            <xs:enumeration value='subscribe'/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name='jid'
                    type='xs:string'
                    use='required'/>
      <xs:attribute name='name'
                    type='xs:string'
                    use='optional'/>
      <xs:attribute name='subscription'
                    use='optional'
                    default='none'>
        <xs:simpleType>
          <xs:restriction base='xs:NMTOKEN'>
            <xs:enumeration value='both'/>
            <xs:enumeration value='from'/>
            <xs:enumeration value='none'/>
            <xs:enumeration value='remove'/>
            <xs:enumeration value='to'/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
 
  <xs:element name='group' type='xs:string'/>
 
</xs:schema>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值