什么时候在 ejabberd 中创建会话?身份验证如何工作?
when is a session created in ejabberd ? How does authentication work ?
我试图了解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 调用,实际上会为任何人创建会话。
非常感谢对代码/示例的引用。!
这整个过程究竟是如何运作的?
非常感谢!
认证主要是wait_for_stream
c2s的函数:https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L348
会话在c2s的wait_for_bind
函数中创建:
https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L1046
我试图了解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 调用,实际上会为任何人创建会话。
非常感谢对代码/示例的引用。!
这整个过程究竟是如何运作的?
非常感谢!
认证主要是wait_for_stream
c2s的函数:https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L348
会话在c2s的wait_for_bind
函数中创建:
https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L1046