
Jabberd2
文章平均质量分 65
fytzzh
这个作者很懒,什么都没留下…
展开
-
Jabberd2源代码分析: JID
使用XMPP协议通信过程中,任何实体都需要一个ID来唯一标示,一个XMPP实体地址被称为 Jabber identifier或JID, 一个合法的JID包括一组元素的组合,包括域名(domain identifier)、节点名(node identifier)、资源名(resource identifier)。jid=[node"@"]domain["/"resource]例如格式:user@gmail.com/resource这种格式来标示一个用户.协议规定一个JID的每个组成部分(domain, nod原创 2011-02-24 17:53:00 · 2234 阅读 · 0 评论 -
搭建jabberd2服务器
1, 操作系统为RedHat Enterprise Linux 5, 选择了最小化安装。我们的目的是不使用系统里现有的库,全部使用我们自己编译的,这样做的目的是搭建出一个不依赖系统jabberd。2, 准备了使用的安装包: cyrus-sasl-2.1.23.tar.gz jabberd-2.2.11.tar.bz2 libidn-1.19.tar.gz openssl-1.0.0a.tar.gz expat-2.0.1.tar.gz libgcrypt-1.4.6.ta原创 2011-03-30 13:53:00 · 2238 阅读 · 4 评论 -
Jabberd2源代码分析: client连接c2s
<br /><br />客户端连接c2s<br /> <br />c2s调用mio_listen后,处于监听状态,等待客户端连接。<br /> <br />client->c2s: connect->accept<br />客户端连接c2s服务器5222端口<br /> <br />当mio检测到处于监听状态的socket可读后,调用_mio_accept函数<br />void _mio_accept(mio_t m, mio_fd_t fd)<br />该函数中调用accept返回一个新的socket原创 2011-03-29 17:45:00 · 2643 阅读 · 1 评论 -
Jabberd2源代码分析:c2s与router SASL验证过程
<br /> <br />c2s启动后,主动连接router服务器的消息流程:<br /> <br />c2s->router: <?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xmlns:ack='http://www.xmpp.org/extensions/xep-0198.html#ns'><br /> <br />发送完<stream>数据后,c2s进入原创 2011-03-29 16:05:00 · 2048 阅读 · 0 评论 -
Jabberd2源码分析: 绑定到router
<br /><br />绑定到router<br /> <br />c2s->rouer:<br /><bind xmlns='http://jabberd.jabberstudio.org/ns/component/1.0' name='c2s'/><br /> <br />router->c2s:<br /><bind xmlns='http://jabberd.jabberstudio.org/ns/component/1.0'/><br /> <br />c2s收到服务器返回的bind消息后,最终执原创 2011-03-29 15:46:00 · 1543 阅读 · 0 评论 -
Jabberd2源代码分析: MIO
MIO用于封装select epool poll kqueue使统一API。可以再不同的平台选择对应的IO复用技术typedef struct mio_st{ void (*mio_free)(struct mio_st **m); struct mio_fd_st *(*mio_listen)(struct mio_st **m, int port, char *sourceip, mio_handler_t app, void *arg); struct mio_原创 2011-03-04 17:46:00 · 2042 阅读 · 1 评论 -
Jabberd2源代码分析: SX
SX模块提供了Jabberd2的插件机制。在代码的关键部位为了扩展方便设置执行点,如果在此执行点上设置了“插件”,则按照注册插件的顺序执行这些注册的函数。Jabberd2定义了一下结构体:/** a plugin */struct _sx_plugin_st { sx_env_t env; /* unique id so that plugins can find each other */ int magic; int in原创 2011-03-04 15:21:00 · 2583 阅读 · 0 评论 -
Jabberd2源代码分析:spool
spool利用pool来方便处理动态增长的字符串,spool维护一个单向链表,每追加一个字符串对应链表一个节点,这样的好处是可以很快速的追加新的字符串,而不需要使用realloc来动态扩展内存空间。只有当需要使用完整的字符串的时候,才动态分配一个大的内存空间,来合并链表中的所有节点。传统的动态增长字符串的处理中一般都是预先分配比较大的内存空间,每次追加新字符串的时候,判断剩余内存是否够用,如果不够,需要使用realloc重新分配或者扩展内存大小。realloc如果是需要重新分配新的内存地址的时候,这时需要将原创 2011-02-25 17:01:00 · 1331 阅读 · 0 评论 -
Jabberd2源代码分析:pool
pool.c文件分析:当程序里有大量的频繁的动态分配内存的情况,如果每次分配后都要记得释放该内存,往往会因为各种原因没有释放,从而导致内存泄露,pool提供了这样的机制,不需要为每次分配的内存都要调用释放内存函数,而是在某一时刻集中释放所有动态分配的内存,这种机制的好处是:1,增强了代码的可读性,方便程序编写,不需要一个malloc函数必须对应一个free函数;2,有效的避免了内存泄露的发生。pool.h文件中提供的接口:使用到的结构体:struct pheap 用于保存单次分配的内存struct原创 2011-02-25 16:56:00 · 1132 阅读 · 0 评论 -
Jabberd2源码分析: 客户端BIND
<br /><br />客户端资源绑定<br /> <br />当客户端身份验证成功后,服务器端features中指定需要BIND资源,则客户端发送bind请求。<br /> <br />client->c2s:<br /><iq type="set" id="32"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>Gajim</resource></bind></iq><br /> <br />当收到服务器的stream:features中原创 2011-04-14 17:35:00 · 2237 阅读 · 2 评论