diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_c2s.erl | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index fb3de4a6d..4955f6e42 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -113,7 +113,6 @@ sm_xmlns, ack_queue, max_ack_queue, - manage_stream = fun negotiate_stream_mgmt/2, pending_since, resume_timeout, n_stanzas_in = 0, @@ -545,7 +544,7 @@ wait_for_stream(closed, StateData) -> wait_for_auth({xmlstreamelement, #xmlel{name = Name} = El}, StateData) when ?IS_STREAM_MGMT_TAG(Name) -> - fsm_next_state(wait_for_auth, (StateData#state.manage_stream)(El, StateData)); + fsm_next_state(wait_for_auth, dispatch_stream_mgmt(El, StateData)); wait_for_auth({xmlstreamelement, El}, StateData) -> case is_auth_packet(El) of {auth, _ID, get, {U, _, _, _}} -> @@ -695,7 +694,7 @@ wait_for_auth(closed, StateData) -> wait_for_feature_request({xmlstreamelement, #xmlel{name = Name} = El}, StateData) when ?IS_STREAM_MGMT_TAG(Name) -> - fsm_next_state(wait_for_feature_request, (StateData#state.manage_stream)(El, StateData)); + fsm_next_state(wait_for_feature_request, dispatch_stream_mgmt(El, StateData)); wait_for_feature_request({xmlstreamelement, El}, StateData) -> #xmlel{name = Name, attrs = Attrs, children = Els} = El, @@ -863,7 +862,7 @@ wait_for_feature_request(closed, StateData) -> wait_for_sasl_response({xmlstreamelement, #xmlel{name = Name} = El}, StateData) when ?IS_STREAM_MGMT_TAG(Name) -> - fsm_next_state(wait_for_sasl_response, (StateData#state.manage_stream)(El, StateData)); + fsm_next_state(wait_for_sasl_response, dispatch_stream_mgmt(El, StateData)); wait_for_sasl_response({xmlstreamelement, El}, StateData) -> #xmlel{name = Name, attrs = Attrs, children = Els} = El, @@ -1006,7 +1005,7 @@ wait_for_bind({xmlstreamelement, #xmlel{name = Name, attrs = Attrs} = El}, fsm_next_state(wait_for_bind, StateData) end; _ -> - fsm_next_state(wait_for_bind, (StateData#state.manage_stream)(El, StateData)) + fsm_next_state(wait_for_bind, dispatch_stream_mgmt(El, StateData)) end; wait_for_bind({xmlstreamelement, El}, StateData) -> case jlib:iq_query_info(El) of @@ -1071,7 +1070,7 @@ wait_for_bind(closed, StateData) -> wait_for_session({xmlstreamelement, #xmlel{name = Name} = El}, StateData) when ?IS_STREAM_MGMT_TAG(Name) -> - fsm_next_state(wait_for_session, (StateData#state.manage_stream)(El, StateData)); + fsm_next_state(wait_for_session, dispatch_stream_mgmt(El, StateData)); wait_for_session({xmlstreamelement, El}, StateData) -> NewStateData = update_num_stanzas_in(StateData, El), case jlib:iq_query_info(El) of @@ -1141,7 +1140,7 @@ wait_for_session(closed, StateData) -> session_established({xmlstreamelement, #xmlel{name = Name} = El}, StateData) when ?IS_STREAM_MGMT_TAG(Name) -> - fsm_next_state(session_established, (StateData#state.manage_stream)(El, StateData)); + fsm_next_state(session_established, dispatch_stream_mgmt(El, StateData)); session_established({xmlstreamelement, El}, StateData) -> FromJID = StateData#state.jid, @@ -2554,6 +2553,11 @@ stream_mgmt_enabled(#state{sm_state = disabled}) -> stream_mgmt_enabled(_StateData) -> true. +dispatch_stream_mgmt(El, #state{sm_state = active} = StateData) -> + perform_stream_mgmt(El, StateData); +dispatch_stream_mgmt(El, StateData) -> + negotiate_stream_mgmt(El, StateData). + negotiate_stream_mgmt(_El, #state{resource = <<"">>} = StateData) -> %% XEP-0198 says: "For client-to-server connections, the client MUST NOT %% attempt to enable stream management until after it has completed Resource @@ -2646,7 +2650,6 @@ handle_enable(#state{resume_timeout = ConfigTimeout} = StateData, Attrs) -> send_element(StateData, Res), StateData#state{sm_state = active, ack_queue = queue:new(), - manage_stream = fun perform_stream_mgmt/2, resume_timeout = Timeout * 1000}. handle_r(StateData) -> @@ -2845,7 +2848,6 @@ inherit_session_state(#state{user = U, server = S} = StateData, ResumeID) -> aux_fields = OldStateData#state.aux_fields, sm_xmlns = OldStateData#state.sm_xmlns, ack_queue = OldStateData#state.ack_queue, - manage_stream = fun perform_stream_mgmt/2, resume_timeout = OldStateData#state.resume_timeout, n_stanzas_in = OldStateData#state.n_stanzas_in, n_stanzas_out = OldStateData#state.n_stanzas_out, |