mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-26 16:26:24 +01:00
Add most status codes only to initial MUC presence
This commit is contained in:
parent
04a315eb52
commit
10ed4a1c85
@ -1856,7 +1856,7 @@ add_new_user(From, Nick,
|
|||||||
add_online_user(From, Nick, Role,
|
add_online_user(From, Nick, Role,
|
||||||
StateData)),
|
StateData)),
|
||||||
send_existing_presences(From, NewState),
|
send_existing_presences(From, NewState),
|
||||||
send_new_presence(From, NewState, StateData),
|
send_initial_presence(From, NewState, StateData),
|
||||||
Shift = count_stanza_shift(Nick, Els, NewState),
|
Shift = count_stanza_shift(Nick, Els, NewState),
|
||||||
case send_history(From, Shift, NewState) of
|
case send_history(From, Shift, NewState) of
|
||||||
true -> ok;
|
true -> ok;
|
||||||
@ -2090,6 +2090,9 @@ presence_broadcast_allowed(JID, StateData) ->
|
|||||||
Role = get_role(JID, StateData),
|
Role = get_role(JID, StateData),
|
||||||
lists:member(Role, (StateData#state.config)#config.presence_broadcast).
|
lists:member(Role, (StateData#state.config)#config.presence_broadcast).
|
||||||
|
|
||||||
|
send_initial_presence(NJID, StateData, OldStateData) ->
|
||||||
|
send_new_presence1(NJID, <<"">>, true, StateData, OldStateData).
|
||||||
|
|
||||||
send_update_presence(JID, StateData, OldStateData) ->
|
send_update_presence(JID, StateData, OldStateData) ->
|
||||||
send_update_presence(JID, <<"">>, StateData, OldStateData).
|
send_update_presence(JID, <<"">>, StateData, OldStateData).
|
||||||
|
|
||||||
@ -2117,20 +2120,25 @@ send_update_presence1(JID, Reason, StateData, OldStateData) ->
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
lists:foreach(fun (J) ->
|
lists:foreach(fun (J) ->
|
||||||
send_new_presence1(J, Reason, StateData, OldStateData)
|
send_new_presence1(J, Reason, false, StateData,
|
||||||
|
OldStateData)
|
||||||
end,
|
end,
|
||||||
LJIDs).
|
LJIDs).
|
||||||
|
|
||||||
send_new_presence(NJID, StateData, OldStateData) ->
|
send_new_presence(NJID, StateData, OldStateData) ->
|
||||||
send_new_presence(NJID, <<"">>, StateData, OldStateData).
|
send_new_presence(NJID, <<"">>, false, StateData, OldStateData).
|
||||||
|
|
||||||
send_new_presence(NJID, Reason, StateData, OldStateData) ->
|
send_new_presence(NJID, Reason, StateData, OldStateData) ->
|
||||||
|
send_new_presence(NJID, Reason, false, StateData, OldStateData).
|
||||||
|
|
||||||
|
send_new_presence(NJID, Reason, IsInitialPresence, StateData, OldStateData) ->
|
||||||
case is_room_overcrowded(StateData) of
|
case is_room_overcrowded(StateData) of
|
||||||
true -> ok;
|
true -> ok;
|
||||||
false -> send_new_presence1(NJID, Reason, StateData, OldStateData)
|
false -> send_new_presence1(NJID, Reason, IsInitialPresence, StateData,
|
||||||
|
OldStateData)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
send_new_presence1(NJID, Reason, StateData, OldStateData) ->
|
send_new_presence1(NJID, Reason, IsInitialPresence, StateData, OldStateData) ->
|
||||||
LNJID = jid:tolower(NJID),
|
LNJID = jid:tolower(NJID),
|
||||||
#user{nick = Nick} = (?DICT):fetch(LNJID, StateData#state.users),
|
#user{nick = Nick} = (?DICT):fetch(LNJID, StateData#state.users),
|
||||||
LJID = find_jid_by_nick(Nick, StateData),
|
LJID = find_jid_by_nick(Nick, StateData),
|
||||||
@ -2187,51 +2195,8 @@ send_new_presence1(NJID, Reason, StateData, OldStateData) ->
|
|||||||
children =
|
children =
|
||||||
[{xmlcdata, Reason}]}]
|
[{xmlcdata, Reason}]}]
|
||||||
end,
|
end,
|
||||||
Status = case StateData#state.just_created of
|
StatusEls = status_els(IsInitialPresence, NJID, Info,
|
||||||
true ->
|
StateData),
|
||||||
[#xmlel{name = <<"status">>,
|
|
||||||
attrs =
|
|
||||||
[{<<"code">>, <<"201">>}],
|
|
||||||
children = []}];
|
|
||||||
false -> []
|
|
||||||
end,
|
|
||||||
Status2 = case
|
|
||||||
(StateData#state.config)#config.anonymous
|
|
||||||
== false
|
|
||||||
andalso NJID == Info#user.jid
|
|
||||||
of
|
|
||||||
true ->
|
|
||||||
[#xmlel{name = <<"status">>,
|
|
||||||
attrs =
|
|
||||||
[{<<"code">>, <<"100">>}],
|
|
||||||
children = []}
|
|
||||||
| Status];
|
|
||||||
false -> Status
|
|
||||||
end,
|
|
||||||
Status3 = case NJID == Info#user.jid of
|
|
||||||
true ->
|
|
||||||
[#xmlel{name = <<"status">>,
|
|
||||||
attrs =
|
|
||||||
[{<<"code">>, <<"110">>}],
|
|
||||||
children = []}
|
|
||||||
| Status2];
|
|
||||||
false -> Status2
|
|
||||||
end,
|
|
||||||
Status4 = case (StateData#state.config)#config.logging == true
|
|
||||||
andalso NJID == Info#user.jid of
|
|
||||||
true ->
|
|
||||||
case (?DICT):find(jid:tolower(LJID),
|
|
||||||
OldStateData#state.users) of
|
|
||||||
{ok, _} -> Status3;
|
|
||||||
_ ->
|
|
||||||
[#xmlel{name = <<"status">>,
|
|
||||||
attrs =
|
|
||||||
[{<<"code">>, <<"170">>}],
|
|
||||||
children = []}
|
|
||||||
| Status3]
|
|
||||||
end;
|
|
||||||
false -> Status3
|
|
||||||
end,
|
|
||||||
Packet = fxml:append_subtags(Presence,
|
Packet = fxml:append_subtags(Presence,
|
||||||
[#xmlel{name = <<"x">>,
|
[#xmlel{name = <<"x">>,
|
||||||
attrs =
|
attrs =
|
||||||
@ -2246,7 +2211,7 @@ send_new_presence1(NJID, Reason, StateData, OldStateData) ->
|
|||||||
children
|
children
|
||||||
=
|
=
|
||||||
ItemEls}
|
ItemEls}
|
||||||
| Status4]}]),
|
| StatusEls]}]),
|
||||||
ejabberd_router:route(jid:replace_resource(StateData#state.jid,
|
ejabberd_router:route(jid:replace_resource(StateData#state.jid,
|
||||||
Nick),
|
Nick),
|
||||||
Info#user.jid, Packet)
|
Info#user.jid, Packet)
|
||||||
@ -2456,6 +2421,40 @@ send_nick_changing(JID, OldNick, StateData,
|
|||||||
end,
|
end,
|
||||||
(?DICT):to_list(StateData#state.users)).
|
(?DICT):to_list(StateData#state.users)).
|
||||||
|
|
||||||
|
status_els(IsInitialPresence, JID, #user{jid = JID}, StateData) ->
|
||||||
|
Status = case IsInitialPresence of
|
||||||
|
true ->
|
||||||
|
S1 = case StateData#state.just_created of
|
||||||
|
true ->
|
||||||
|
[#xmlel{name = <<"status">>,
|
||||||
|
attrs = [{<<"code">>, <<"201">>}],
|
||||||
|
children = []}];
|
||||||
|
false -> []
|
||||||
|
end,
|
||||||
|
S2 = case (StateData#state.config)#config.anonymous of
|
||||||
|
true -> S1;
|
||||||
|
false ->
|
||||||
|
[#xmlel{name = <<"status">>,
|
||||||
|
attrs = [{<<"code">>, <<"100">>}],
|
||||||
|
children = []} | S1]
|
||||||
|
end,
|
||||||
|
S3 = case (StateData#state.config)#config.logging of
|
||||||
|
true ->
|
||||||
|
[#xmlel{name = <<"status">>,
|
||||||
|
attrs = [{<<"code">>, <<"170">>}],
|
||||||
|
children = []} | S2];
|
||||||
|
false -> S2
|
||||||
|
end,
|
||||||
|
S3;
|
||||||
|
false -> []
|
||||||
|
end,
|
||||||
|
[#xmlel{name = <<"status">>,
|
||||||
|
attrs =
|
||||||
|
[{<<"code">>,
|
||||||
|
<<"110">>}],
|
||||||
|
children = []} | Status];
|
||||||
|
status_els(_IsInitialPresence, _JID, _Info, _StateData) -> [].
|
||||||
|
|
||||||
lqueue_new(Max) ->
|
lqueue_new(Max) ->
|
||||||
#lqueue{queue = queue:new(), len = 0, max = Max}.
|
#lqueue{queue = queue:new(), len = 0, max = Max}.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user