]> granicus.if.org Git - ejabberd/commitdiff
Resend stream header before calling handle_auth_success/2 callback
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 28 Feb 2017 07:12:11 +0000 (10:12 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 28 Feb 2017 07:12:11 +0000 (10:12 +0300)
src/xmpp_stream_out.erl

index 67fdf7db93a737f113b76d6c7b6f122a56781492..d663f32dfbf912eb3a60e33028e3c2eb9cb308b5 100644 (file)
@@ -624,18 +624,18 @@ process_cert_verification(State) ->
 process_sasl_success(#{mod := Mod,
                       sockmod := SockMod,
                       socket := Socket} = State) ->
-    State1 = try Mod:handle_auth_success(<<"EXTERNAL">>, State)
-            catch _:undef -> State
-            end,
-    case is_disconnected(State1) of
-       true -> State1;
+    SockMod:reset_stream(Socket),
+    State1 = State#{stream_id => new_id(),
+                   stream_restarted => true,
+                   stream_state => wait_for_stream,
+                   stream_authenticated => true},
+    State2 = send_header(State1),
+    case is_disconnected(State2) of
+       true -> State2;
        false ->
-           SockMod:reset_stream(Socket),
-           State2 = State1#{stream_id => new_id(),
-                            stream_restarted => true,
-                            stream_state => wait_for_stream,
-                            stream_authenticated => true},
-           send_header(State2)
+           try Mod:handle_auth_success(<<"EXTERNAL">>, State2)
+           catch _:undef -> State2
+           end
     end.
 
 -spec process_sasl_failure(sasl_failure(), state()) -> state().