summaryrefslogtreecommitdiff
path: root/src/mod_muc_room.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-09-08 16:39:34 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-09-08 16:39:34 +0300
commit36ab9cc2ea4ac1163905b178e3692e9578064524 (patch)
tree979092044e75a1667e355a9dea8fe355f0dd4ae9 /src/mod_muc_room.erl
parentMerge pull request #1287 from weiss/ack-timeout (diff)
Fix message routing from subscribers
Diffstat (limited to 'src/mod_muc_room.erl')
-rw-r--r--src/mod_muc_room.erl19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 11cc1d5f..ef94c3cb 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -139,7 +139,8 @@ normal_state({route, From, <<"">>,
StateData) ->
Lang = fxml:get_attr_s(<<"xml:lang">>, Attrs),
case is_user_online(From, StateData) orelse
- is_user_allowed_message_nonparticipant(From, StateData)
+ is_subscriber(From, StateData) orelse
+ is_user_allowed_message_nonparticipant(From, StateData)
of
true ->
case fxml:get_attr_s(<<"type">>, Attrs) of
@@ -527,7 +528,8 @@ normal_state({route, From, ToNick,
continue_delivery ->
case
{(StateData#state.config)#config.allow_private_messages,
- is_user_online(From, StateData)}
+ is_user_online(From, StateData) orelse
+ is_subscriber(From, StateData)}
of
{true, true} ->
case Type of
@@ -562,9 +564,7 @@ normal_state({route, From, ToNick,
PmFromVisitors == anyone;
(PmFromVisitors == moderators) and
DstIsModerator ->
- {ok, #user{nick = FromNick}} =
- (?DICT):find(jid:tolower(From),
- StateData#state.users),
+ {FromNick, _} = get_participant_data(From, StateData),
FromNickJID =
jid:replace_resource(StateData#state.jid,
FromNick),
@@ -1067,7 +1067,14 @@ get_participant_data(From, StateData) ->
of
{ok, #user{nick = FromNick, role = Role}} ->
{FromNick, Role};
- error -> {<<"">>, moderator}
+ error ->
+ case ?DICT:find(jid:tolower(jid:remove_resource(From)),
+ StateData#state.subscribers) of
+ {ok, #subscriber{nick = FromNick}} ->
+ {FromNick, none};
+ error ->
+ {<<"">>, moderator}
+ end
end.
process_presence(From, Nick,