2016-06-01 10 views
2

Ich versuche den Datenfluss von Ejabberd zu verstehen und habe es bisher schwer.Wann wird eine Sitzung in Ejabberd erstellt? Wie funktioniert die Authentifizierung?

Zuerst sind dies die Module, an denen ich arbeite: ejabberd_c2s, ejabberd_auth, ejabberd_sm, ejabberd_sm_mnesia.

Ich verstehe, dass ejabberd_c2s eine gen_fsm ist, die Einstiegspunkt für jeden Client ist, der mit jedem anderen Client sprechen möchte.

Datenfluss: Wenn ein Client mit ejabberd_c2s verbindet, sendet es einige Daten, nicht sicher, was genau, aber in den Zeilen von {JID}. Aber nicht in der Lage, herauszufinden, wie ejabberd_c2s authentifiziert? Wo wird das Authentifizierungsmodul tatsächlich aufgerufen und wenn die Authentifizierung erfolgreich ist, wer erstellt eine Sitzung für diesen Benutzer? ist es ejabberd_c2s oder ejabberd_auth?

Ich verstehe, dass ejabberd_sm [_mnesia] sind die API-Anrufe, die tatsächlich eine Sitzung für jedermann erstellen wird.

Referenzen auf Code/Proben wird sehr geschätzt.!

Wie genau funktioniert das Ganze?

Vielen Dank!

Antwort

1

Authentifizierung wird in erster Linie vorgenommen wird wait_for_stream Funktion C2S: https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L348

Session in Abhängigkeit von wait_for_bind C2S erstellt: https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L1046

+0

Dank. Was macht wait_for_auth? https://github.com/processone/ejabberd/blob/master/src/ejabberd_c2s.erl#L574 auch gibt es viele Orte, an denen auth_module verwendet wird, zB in wait_for_auth, wait_for_sasl usw. Wie unterscheiden sie sich von einem? in wait_for_stream? A – sad

+0

Hängt von der XMPP-Protokollversion und dem Typ der Authentifizierung ab. Im Allgemeinen ist es nicht der eine. –