mirror of
https://github.com/processone/ejabberd.git
synced 2024-09-27 14:30:55 +02:00
Merge pull request #216 from lavrin/p1-c2s
Cleanup some pieces of ejabberd_c2s
This commit is contained in:
commit
419a98d45a
@ -788,18 +788,11 @@ wait_for_feature_request({xmlstreamelement, El},
|
|||||||
StateData#state.tls_options)]
|
StateData#state.tls_options)]
|
||||||
end,
|
end,
|
||||||
Socket = StateData#state.socket,
|
Socket = StateData#state.socket,
|
||||||
|
BProceed = xml:element_to_binary(#xmlel{name = <<"proceed">>,
|
||||||
|
attrs = [{<<"xmlns">>, ?NS_TLS}]}),
|
||||||
TLSSocket = (StateData#state.sockmod):starttls(Socket,
|
TLSSocket = (StateData#state.sockmod):starttls(Socket,
|
||||||
TLSOpts,
|
TLSOpts,
|
||||||
xml:element_to_binary(#xmlel{name
|
BProceed),
|
||||||
=
|
|
||||||
<<"proceed">>,
|
|
||||||
attrs
|
|
||||||
=
|
|
||||||
[{<<"xmlns">>,
|
|
||||||
?NS_TLS}],
|
|
||||||
children
|
|
||||||
=
|
|
||||||
[]})),
|
|
||||||
fsm_next_state(wait_for_stream,
|
fsm_next_state(wait_for_stream,
|
||||||
StateData#state{socket = TLSSocket,
|
StateData#state{socket = TLSSocket,
|
||||||
streamid = new_id(),
|
streamid = new_id(),
|
||||||
@ -820,17 +813,10 @@ wait_for_feature_request({xmlstreamelement, El},
|
|||||||
case xml:get_tag_cdata(Method) of
|
case xml:get_tag_cdata(Method) of
|
||||||
<<"zlib">> ->
|
<<"zlib">> ->
|
||||||
Socket = StateData#state.socket,
|
Socket = StateData#state.socket,
|
||||||
|
BCompressed = xml:element_to_binary(#xmlel{name = <<"compressed">>,
|
||||||
|
attrs = [{<<"xmlns">>, ?NS_COMPRESS}]}),
|
||||||
ZlibSocket = (StateData#state.sockmod):compress(Socket,
|
ZlibSocket = (StateData#state.sockmod):compress(Socket,
|
||||||
xml:element_to_binary(#xmlel{name
|
BCompressed),
|
||||||
=
|
|
||||||
<<"compressed">>,
|
|
||||||
attrs
|
|
||||||
=
|
|
||||||
[{<<"xmlns">>,
|
|
||||||
?NS_COMPRESS}],
|
|
||||||
children
|
|
||||||
=
|
|
||||||
[]})),
|
|
||||||
fsm_next_state(wait_for_stream,
|
fsm_next_state(wait_for_stream,
|
||||||
StateData#state{socket = ZlibSocket,
|
StateData#state{socket = ZlibSocket,
|
||||||
streamid = new_id()});
|
streamid = new_id()});
|
||||||
@ -973,9 +959,7 @@ wait_for_sasl_response(closed, StateData) ->
|
|||||||
{stop, normal, StateData}.
|
{stop, normal, StateData}.
|
||||||
|
|
||||||
resource_conflict_action(U, S, R) ->
|
resource_conflict_action(U, S, R) ->
|
||||||
OptionRaw = case ejabberd_sm:is_existing_resource(U, S,
|
OptionRaw = case ejabberd_sm:is_existing_resource(U, S, R) of
|
||||||
R)
|
|
||||||
of
|
|
||||||
true ->
|
true ->
|
||||||
ejabberd_config:get_option(
|
ejabberd_config:get_option(
|
||||||
{resource_conflict, S},
|
{resource_conflict, S},
|
||||||
@ -1096,7 +1080,7 @@ wait_for_session({xmlstreamelement, El}, StateData) ->
|
|||||||
?INFO_MSG("(~w) Opened session for ~s",
|
?INFO_MSG("(~w) Opened session for ~s",
|
||||||
[NewStateData#state.socket,
|
[NewStateData#state.socket,
|
||||||
jlib:jid_to_string(JID)]),
|
jlib:jid_to_string(JID)]),
|
||||||
Res = jlib:make_result_iq_reply(El#xmlel{children = []}),
|
Res = jlib:make_result_iq_reply(El#xmlel{children = []}),
|
||||||
NewState = send_stanza(NewStateData, Res),
|
NewState = send_stanza(NewStateData, Res),
|
||||||
change_shaper(NewState, JID),
|
change_shaper(NewState, JID),
|
||||||
{Fs, Ts} = ejabberd_hooks:run_fold(
|
{Fs, Ts} = ejabberd_hooks:run_fold(
|
||||||
@ -1902,12 +1886,11 @@ new_id() -> randoms:get_string().
|
|||||||
|
|
||||||
is_auth_packet(El) ->
|
is_auth_packet(El) ->
|
||||||
case jlib:iq_query_info(El) of
|
case jlib:iq_query_info(El) of
|
||||||
#iq{id = ID, type = Type, xmlns = ?NS_AUTH,
|
#iq{id = ID, type = Type, xmlns = ?NS_AUTH, sub_el = SubEl} ->
|
||||||
sub_el = SubEl} ->
|
#xmlel{children = Els} = SubEl,
|
||||||
#xmlel{children = Els} = SubEl,
|
{auth, ID, Type,
|
||||||
{auth, ID, Type,
|
get_auth_tags(Els, <<"">>, <<"">>, <<"">>, <<"">>)};
|
||||||
get_auth_tags(Els, <<"">>, <<"">>, <<"">>, <<"">>)};
|
_ -> false
|
||||||
_ -> false
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
is_stanza(#xmlel{name = Name, attrs = Attrs}) when Name == <<"message">>;
|
is_stanza(#xmlel{name = Name, attrs = Attrs}) when Name == <<"message">>;
|
||||||
@ -2230,18 +2213,16 @@ remove_element(E, Set) ->
|
|||||||
|
|
||||||
roster_change(IJID, ISubscription, StateData) ->
|
roster_change(IJID, ISubscription, StateData) ->
|
||||||
LIJID = jlib:jid_tolower(IJID),
|
LIJID = jlib:jid_tolower(IJID),
|
||||||
IsFrom = (ISubscription == both) or
|
IsFrom = (ISubscription == both) or (ISubscription == from),
|
||||||
(ISubscription == from),
|
|
||||||
IsTo = (ISubscription == both) or (ISubscription == to),
|
IsTo = (ISubscription == both) or (ISubscription == to),
|
||||||
OldIsFrom = (?SETS):is_element(LIJID,
|
OldIsFrom = (?SETS):is_element(LIJID, StateData#state.pres_f),
|
||||||
StateData#state.pres_f),
|
FSet = if
|
||||||
FSet = if IsFrom ->
|
IsFrom -> (?SETS):add_element(LIJID, StateData#state.pres_f);
|
||||||
(?SETS):add_element(LIJID, StateData#state.pres_f);
|
not IsFrom -> remove_element(LIJID, StateData#state.pres_f)
|
||||||
true -> remove_element(LIJID, StateData#state.pres_f)
|
|
||||||
end,
|
end,
|
||||||
TSet = if IsTo ->
|
TSet = if
|
||||||
(?SETS):add_element(LIJID, StateData#state.pres_t);
|
IsTo -> (?SETS):add_element(LIJID, StateData#state.pres_t);
|
||||||
true -> remove_element(LIJID, StateData#state.pres_t)
|
not IsTo -> remove_element(LIJID, StateData#state.pres_t)
|
||||||
end,
|
end,
|
||||||
case StateData#state.pres_last of
|
case StateData#state.pres_last of
|
||||||
undefined ->
|
undefined ->
|
||||||
@ -2335,11 +2316,10 @@ process_privacy_iq(From, To,
|
|||||||
NewStateData.
|
NewStateData.
|
||||||
|
|
||||||
resend_offline_messages(StateData) ->
|
resend_offline_messages(StateData) ->
|
||||||
case
|
case ejabberd_hooks:run_fold(resend_offline_messages_hook,
|
||||||
ejabberd_hooks:run_fold(resend_offline_messages_hook,
|
StateData#state.server, [],
|
||||||
StateData#state.server, [],
|
[StateData#state.user, StateData#state.server])
|
||||||
[StateData#state.user, StateData#state.server])
|
of
|
||||||
of
|
|
||||||
Rs -> %%when is_list(Rs) ->
|
Rs -> %%when is_list(Rs) ->
|
||||||
lists:foreach(fun ({route, From, To,
|
lists:foreach(fun ({route, From, To,
|
||||||
#xmlel{} = Packet}) ->
|
#xmlel{} = Packet}) ->
|
||||||
@ -2359,8 +2339,7 @@ resend_offline_messages(StateData) ->
|
|||||||
end.
|
end.
|
||||||
|
|
||||||
resend_subscription_requests(#state{user = User,
|
resend_subscription_requests(#state{user = User,
|
||||||
server = Server} =
|
server = Server} = StateData) ->
|
||||||
StateData) ->
|
|
||||||
PendingSubscriptions =
|
PendingSubscriptions =
|
||||||
ejabberd_hooks:run_fold(resend_subscription_requests_hook,
|
ejabberd_hooks:run_fold(resend_subscription_requests_hook,
|
||||||
Server, [], [User, Server]),
|
Server, [], [User, Server]),
|
||||||
@ -2372,20 +2351,14 @@ resend_subscription_requests(#state{user = User,
|
|||||||
|
|
||||||
get_showtag(undefined) -> <<"unavailable">>;
|
get_showtag(undefined) -> <<"unavailable">>;
|
||||||
get_showtag(Presence) ->
|
get_showtag(Presence) ->
|
||||||
case xml:get_path_s(Presence,
|
case xml:get_path_s(Presence, [{elem, <<"show">>}, cdata]) of
|
||||||
[{elem, <<"show">>}, cdata])
|
<<"">> -> <<"available">>;
|
||||||
of
|
ShowTag -> ShowTag
|
||||||
<<"">> -> <<"available">>;
|
|
||||||
ShowTag -> ShowTag
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
get_statustag(undefined) -> <<"">>;
|
get_statustag(undefined) -> <<"">>;
|
||||||
get_statustag(Presence) ->
|
get_statustag(Presence) ->
|
||||||
case xml:get_path_s(Presence,
|
xml:get_path_s(Presence, [{elem, <<"status">>}, cdata]).
|
||||||
[{elem, <<"status">>}, cdata])
|
|
||||||
of
|
|
||||||
ShowTag -> ShowTag
|
|
||||||
end.
|
|
||||||
|
|
||||||
process_unauthenticated_stanza(StateData, El) ->
|
process_unauthenticated_stanza(StateData, El) ->
|
||||||
NewEl = case xml:get_tag_attr_s(<<"xml:lang">>, El) of
|
NewEl = case xml:get_tag_attr_s(<<"xml:lang">>, El) of
|
||||||
@ -2485,23 +2458,27 @@ is_ip_blacklisted({IP, _Port}) ->
|
|||||||
%% returns invalid-from|NewElement
|
%% returns invalid-from|NewElement
|
||||||
check_from(El, FromJID) ->
|
check_from(El, FromJID) ->
|
||||||
case xml:get_tag_attr(<<"from">>, El) of
|
case xml:get_tag_attr(<<"from">>, El) of
|
||||||
false -> El;
|
false ->
|
||||||
{value, SJID} ->
|
El;
|
||||||
JID = jlib:string_to_jid(SJID),
|
{value, SJID} ->
|
||||||
case JID of
|
JID = jlib:string_to_jid(SJID),
|
||||||
error -> 'invalid-from';
|
case JID of
|
||||||
#jid{} ->
|
error ->
|
||||||
if (JID#jid.luser == FromJID#jid.luser) and
|
'invalid-from';
|
||||||
(JID#jid.lserver == FromJID#jid.lserver)
|
#jid{} ->
|
||||||
and (JID#jid.lresource == FromJID#jid.lresource) ->
|
if
|
||||||
El;
|
(JID#jid.luser == FromJID#jid.luser) and
|
||||||
(JID#jid.luser == FromJID#jid.luser) and
|
(JID#jid.lserver == FromJID#jid.lserver) and
|
||||||
(JID#jid.lserver == FromJID#jid.lserver)
|
(JID#jid.lresource == FromJID#jid.lresource) ->
|
||||||
and (JID#jid.lresource == <<"">>) ->
|
El;
|
||||||
El;
|
(JID#jid.luser == FromJID#jid.luser) and
|
||||||
true -> 'invalid-from'
|
(JID#jid.lserver == FromJID#jid.lserver) and
|
||||||
end
|
(JID#jid.lresource == <<"">>) ->
|
||||||
end
|
El;
|
||||||
|
true ->
|
||||||
|
'invalid-from'
|
||||||
|
end
|
||||||
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
fsm_limit_opts(Opts) ->
|
fsm_limit_opts(Opts) ->
|
||||||
|
Loading…
Reference in New Issue
Block a user