Jabberd2源代码分析: JID

    技术2022-05-20  64

    使用XMPP协议通信过程中,任何实体都需要一个ID来唯一标示,一个XMPP实体地址被称为 Jabber identifier或JID, 一个合法的JID包括一组元素的组合,包括域名(domain identifier)、节点名(node identifier)、资源名(resource identifier)。

     

    jid=[node"@"]domain["/"resource]

     

    例如格式:user@gmail.com/resource这种格式来标示一个用户.

     

    协议规定一个JID的每个组成部分(domain, node, resource)都不能超过1023字节,加上"@", "/"字符后整体长度不超过3071字节。

     

    Jabberd2中为了编程方便,使用jid_t来标示一个JID。

     

    typedef struct jid_st {

     

        unsigned char   *node;

        unsigned char   *domain;

        unsigned char   *resource;

     

     

        unsigned char   *jid_data;

        size_t          jid_data_len;

     

        unsigned char   *_user;

        unsigned char   *_full;

     

        int             dirty;

     

        struct jid_st    *next;

    } *jid_t;

     

    jid_st包含有一个next指针,从而形成一个单向链表。jabberd2中将所有的用户都链起来,可以使用jid_search函数查找给定两个JID是否相同。使用jid_zap函数从链表中删除一个JID。使用jid_append函数用来想链表尾部添加一个新的JID

     

     

    还可以使用jid_compare_user用来比较user@domain部分是否相同

    使用jid_compare_full用来比较user@domain/resource是否相同

     

    jid_new用来分配一个新的jid_st结构体,jid_free用来释放jid_st所占用的资源。


    最新回复(0)