Я пытаюсь понять поток данных 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, которые фактически создают сеанс для всех.
Ссылки на код/образцы приветствуются.!
Как именно все это работает?
Большое спасибо!