aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2014-03-22 20:25:43 +0100
committerHolger Weiß <holger@zedat.fu-berlin.de>2014-03-22 20:25:43 +0100
commit2da6933bb77d1a512d486ce7f873f222b137249b (patch)
tree716888cb2433d9903ba9efca02774a442e093595
parentSupport XEP-0198 session resumption (diff)
Remove "fun" element from c2s #state
Memory consumption wise, local "fun" references are quite expensive.
-rw-r--r--src/ejabberd_c2s.erl20
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,