1

我试图了解 ejabberd 的数据流,直到现在都很难。

首先,这些是我正在开发的模块:ejabberd_c2s、ejabberd_auth、ejabberd_sm、ejabberd_sm_mnesia。

我知道 ejabberd_c2s 是一个 gen_fsm ,它是任何想要与任何其他客户端交谈的客户端的入口点。

数据流:当客户端连接到 ejabberd_c2s 时,它会发送一些数据,但不知道具体是什么,但沿着 {JID} 行。但无法弄清楚 ejabberd_c2s 如何进行身份验证?它实际上在哪里调用身份验证模块,如果身份验证成功,谁为该用户创建会话?是 ejabberd_c2s 还是 ejabberd_auth ?

我知道 ejabberd_sm[_mnesia] 是实际上将为任何人创建会话的 api 调用。

非常感谢对代码/示例的引用。!

这整件事究竟是如何运作的?

非常感谢!

4

1 回答 1

1

认证主要是wait_for_streamc2s的功能:https ://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L348

会话是在wait_for_bindc2s 的函数中创建的: https ://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L1046

于 2016-06-02T06:57:37.630 回答