使用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所占用的资源。