何时在ejabberd中创建会话?身份验证如何工作?

时间:2016-06-01 19:02:55

标签: xmpp ejabberd ejabberd-module ejabberd-hooks ejabberd-api

我试图了解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调用。

非常感谢参考代码/样本。

这一切究竟是如何运作的?

非常感谢!

1 个答案:

答案 0 :(得分:1)

身份验证主要是c2s的re.sub(u".\(as \w+\).", ' ',line) 函数:https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L348

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