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_streamに c2s の機能で行われます: 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 に答える