openfire roster花名册分析

目前基于openfire插件开发针对好友管理新增功能,熟悉好友管理的相关数据库表及源码分析:

 

需要注意的是sub,ask以及recv字段。

摘抄rosterItem.java中的注释

 *sub    - A subscription type: to, from, none, both//好友关系:to(向对方申请好友),from(接收到好友申请请求),none(与对方没有建立好友关系),both(双发已互相为好友)
 * ask    - An optional subscription ask status: subscribe, unsubscribe// subscribe(向对方请求申请好友), unsubscribe(拒绝对方好友申请)
 * recv   - Flag indicating the entry is a roster request that was received//sub(收到一个好友请求), unsubscribe(收到对方拒绝回复)

 

具体可以针对数据包分析:

    下述是几个字段相对应的枚举值,在数据库表中初始值都为-1


    public static final SubType SUB_REMOVE = new SubType("remove", -1);

    public static final SubType SUB_NONE = new SubType("none", 0);
 
    public static final SubType SUB_TO = new SubType("to", 1);
   
    public static final SubType SUB_FROM = new SubType("from", 2);
  
    public static final SubType SUB_BOTH = new SubType("both", 3);

    
    public static final AskType ASK_NONE = new AskType("", -1);
   
    public static final AskType ASK_SUBSCRIBE = new AskType("subscribe", 0);
    
    public static final AskType ASK_UNSUBSCRIBE = new AskType("unsubscribe", 1);

    
    public static final RecvType RECV_NONE = new RecvType("", -1);
    
    public static final RecvType RECV_SUBSCRIBE = new RecvType("sub", 1);
   
    public static final RecvType RECV_UNSUBSCRIBE = new RecvType("unsub", 2);

 

数据包摘要:下述为A申请加B为好友,B拒绝申请的数据包过程。

 

C2S - RECV (10281309): <iq id="nEelQ-30" type="set"><query xmlns="jabber:iq:roster"><item jid="B@XXXXXX" name="B"><group>??</group></item></query></iq>    -收到A添加B请求
C2S - SENT (10281309): <iq type="set" id="334-6" to="A@XXXXXX/Spark 2.6.3"><query xmlns="jabber:iq:roster"><item jid="B@XXXXXX" name="B" subscription="none"><group>??</group></item></query></iq> ---对A进行应答,A在本地创建好友B
C2S - SENT (10281309): <iq type="result" id="nEelQ-30" to="A@XXXXXX/Spark 2.6.3"/> --对A返回应答包
C2S - RECV (10281309): <presence id="nEelQ-31" to="B@XXXXXX" type="subscribe"></presence>
C2S - SENT (10281309): <iq type="set" id="651-7" to="A@XXXXXX/Spark 2.6.3"><query xmlns="jabber:iq:roster"><item jid="B@XXXXXX" name="B" ask="subscribe" subscription="none"><group>??</group></item></query></iq> --对A进行应答,并修正ask字段为发起请求
C2S - SENT (22366387): <presence id="nEelQ-31" to="B@XXXXXX" type="subscribe" from="mailto:A@XXXXXX%22/>
C2S - RECV (22366387): <presence id="eIgKP-6"><status>在线</status><priority>1</priority></presence>
C2S - RECV (22366387): <presence id="eIgKP-29" to="A@XXXXXX" type="unsubscribe"></presence>
C2S - SENT (10281309): <presence id="eIgKP-29" to="A@XXXXXX" type="unsubscribe" from="mailto:B@XXXXXX%22/> --对A发起回复,B拒绝申请好友
C2S - RECV (10281309): <iq id="nEelQ-32" type="set"><query xmlns="jabber:iq:roster"><item jid="B@XXXXXX" name="B" subscription="remove" ask="subscribe"><group>??</group></item></query></iq> --收到A的发起删除B的请求
C2S - SENT (22366387): <iq type="set" id="283-10" to="B@XXXXXX/Spark 2.6.3"><query xmlns="jabber:iq:roster"><item jid="A@XXXXXX" subscription="remove"/></query></iq>  ---收到B的发起删除A的请求
C2S - SENT (10281309): <iq type="set" id="974-9" to="A@XXXXXX/Spark 2.6.3"><query xmlns="jabber:iq:roster"><item jid="B@XXXXXX" subscription="remove"/></query></iq> --对A的删除B请求的应答
C2S - SENT (10281309): <iq type="result" id="nEelQ-32" to="A@XXXXXX/Spark 2.6.3"/>
C2S - RECV (22366387): <presence id="eIgKP-30"><status>离开</status><priority>1</priority><show>away</show></presence>

 

A与B目前没有建立好友关系,在数据表中并没有二者依赖关系.

 

1)此时A发起申请好友信息到B,此信息先由服务器接收并转发,服务器在ofroster表中创建数据。

 

rosterID  username     jid        sub  ask  recv  nick

1          A      B@192.168.1.102 0     0   -1     B
2          B      A@192.168.1.102 0    -1    1    nul

 

这时B同意将A加为好友,并设置为家人分组中,那么会修改ofroster表中刚插入的两条记录,如下所示:

rosterID  username     jid        sub  ask  recv  nick

1          A      B@192.168.1.102 1     -1    1     B
2          B      A@192.168.1.102 2      0   -1    null

 

 

转载于:https://www.cnblogs.com/wangtale/archive/2013/03/24/2979419.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值