ejabberd分析(四) 用户登录
仍然看ejabberd_c2s 这个gen_fsm 模块。
RECV <stream:stream to="localhost" xmlns="jabber:cli <compression xmlns=""> <method>zlib</method> </compression> <auth xmlns="-auth"/> <register xmlns="-register"/> </stream:features>
上面客户端与服务器建立连接的初始几步直接略过。具体参见ejabberd分析(二),重点看下面的交互:
注:目前的状态为wait_for_feature_request
客户端发送如下的鉴权请求给服务器:<auth mechanism="DIGEST-MD5" xmlns="urn:ietf:params:xml:ns:xmpp-sasl"></auth>
服务器端匹配到
case {xml:get_attr_s("xmlns", Attrs), Name} of {?NS_SASL, "auth"} when not ((SockMod == gen_tcp) and TLSRequired) -> 同时获取客户端选择的加密方式(DIGEST-MD5)。匹配到以下路径:
case cyrsasl:server_start(StateData#, Mech, ClientIn) of ......... {continue, ServerOut, NewSASLState} -> send_element(StateData, {xmlelement, "challenge", [{"xmlns", ?NS_SASL}], [{xmlcdata, jlib:encode_base64(ServerOut)}]}), fsm_next_state(wait_for_sasl_response, StateData#state{ s
ejabberd分析(四) 用户登录 来自淘豆网m.daumloan.com转载请标明出处.