когда создается сеанс в ejabberd? Как работает аутентификация?

Я пытаюсь понять поток данных 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, которые фактически создают сеанс для всех.

Ссылки на код/образцы приветствуются.!

Как именно все это работает?

Большое спасибо!


person sad    schedule 01.06.2016    source источник


Ответы (1)


Аутентификация в основном выполняется wait_for_stream функцией c2s: https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L348

Сессия создается в wait_for_bind функции c2s: https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L1046

person Mickaël Rémond    schedule 02.06.2016
comment
Спасибо. что делает wait_for_auth? github.com/processone/ejabberd/blob/master/src/ также есть много мест, где используется auth_module, например, в wait_for_auth, wait_for_sasl и т. д. Чем они отличаются от модуля в wait_for_stream? А - person sad; 02.06.2016
comment
Зависит от версии протокола XMPP и типа аутентификации. Как правило, это не тот, который используется. - person Mickaël Rémond; 03.06.2016