diff options
Diffstat (limited to 'src/mod_muc/mod_muc_room.erl')
-rw-r--r-- | src/mod_muc/mod_muc_room.erl | 100 |
1 files changed, 48 insertions, 52 deletions
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl index f605e0a6..e381a544 100644 --- a/src/mod_muc/mod_muc_room.erl +++ b/src/mod_muc/mod_muc_room.erl @@ -59,6 +59,7 @@ -record(state, {room, host, + jid, config = #config{}, users = ?DICT:new(), affiliations = ?DICT:new(), @@ -117,11 +118,13 @@ init([Host, Room, Creator, Nick]) -> LCreator = jlib:jid_tolower(Creator), State = set_affiliation(Creator, owner, #state{host = Host, - room = Room}), + room = Room, + jid = jlib:make_jid(Room, Host, "")}), {ok, normal_state, State}; init([Host, Room, Opts]) -> State = set_opts(Opts, #state{host = Host, - room = Room}), + room = Room, + jid = jlib:make_jid(Room, Host, "")}), {ok, normal_state, State}. %%---------------------------------------------------------------------- @@ -173,9 +176,9 @@ normal_state({route, From, "", lists:foreach( fun({LJID, Info}) -> ejabberd_router:route( - {StateData#state.room, - StateData#state.host, - FromNick}, + jlib:jid_replace_resource( + StateData#state.jid, + FromNick), Info#user.jid, Packet) end, @@ -189,8 +192,7 @@ normal_state({route, From, "", Err = jlib:make_error_reply( Packet, ?ERR_NOT_ALLOWED), ejabberd_router:route( - {StateData#state.room, - StateData#state.host, ""}, + StateData#state.jid, From, Err), {next_state, normal_state, StateData} end; @@ -198,7 +200,7 @@ normal_state({route, From, "", Err = jlib:make_error_reply( Packet, ?ERR_NOT_ALLOWED), ejabberd_router:route( - {StateData#state.room, StateData#state.host, ""}, + StateData#state.jid, From, Err), {next_state, normal_state, StateData} end; @@ -223,7 +225,7 @@ normal_state({route, From, "", Err = jlib:make_error_reply( Packet, ?ERR_NOT_ALLOWED), ejabberd_router:route( - {StateData#state.room, StateData#state.host, ""}, + StateData#state.jid, From, Err), {next_state, normal_state, StateData}; IJID -> @@ -249,15 +251,14 @@ normal_state({route, From, "", Err = jlib:make_error_reply( Packet, ?ERR_NOT_ALLOWED), ejabberd_router:route( - {StateData#state.room, StateData#state.host, ""}, + StateData#state.jid, From, Err), {next_state, normal_state, StateData} end; _ -> Err = jlib:make_error_reply( Packet, ?ERR_NOT_ALLOWED), - ejabberd_router:route( - {StateData#state.room, StateData#state.host, ""}, From, Err), + ejabberd_router:route(StateData#state.jid, From, Err), {next_state, normal_state, StateData} end; @@ -293,9 +294,7 @@ normal_state({route, From, "", [SubEl, Error]}, StateData} end, - ejabberd_router:route({StateData#state.room, - StateData#state.host, - ""}, + ejabberd_router:route(StateData#state.jid, From, jlib:iq_to_xml(IQRes)), case NewStateData of @@ -307,8 +306,7 @@ normal_state({route, From, "", _ -> Err = jlib:make_error_reply( Packet, ?ERR_FEATURE_NOT_IMPLEMENTED), - ejabberd_router:route( - {StateData#state.room, StateData#state.host, ""}, From, Err), + ejabberd_router:route(StateData#state.jid, From, Err), {next_state, normal_state, StateData} end; @@ -353,9 +351,9 @@ normal_state({route, From, Nick, Packet, ?ERR_MUC_NICK_CHANGE_CONFLICT), ejabberd_router:route( - {StateData#state.room, - StateData#state.host, - Nick}, % TODO: s/Nick/""/ + jlib:jid_replace_resource( + StateData#state.jid, + Nick), % TODO: s/Nick/""/ From, Err), StateData; _ -> @@ -411,18 +409,18 @@ normal_state({route, From, ToNick, Err = jlib:make_error_reply( Packet, ?ERR_ITEM_NOT_FOUND), ejabberd_router:route( - {StateData#state.room, - StateData#state.host, - ToNick}, + jlib:jid_replace_resource( + StateData#state.jid, + ToNick), From, Err); ToJID -> {ok, #user{nick = FromNick}} = ?DICT:find(jlib:jid_tolower(From), StateData#state.users), ejabberd_router:route( - {StateData#state.room, - StateData#state.host, - FromNick}, + jlib:jid_replace_resource( + StateData#state.jid, + FromNick), ToJID, Packet) end, {next_state, normal_state, StateData}; @@ -430,9 +428,9 @@ normal_state({route, From, ToNick, Err = jlib:make_error_reply( Packet, ?ERR_NOT_ALLOWED), ejabberd_router:route( - {StateData#state.room, - StateData#state.host, - ToNick}, From, Err), + jlib:jid_replace_resource( + StateData#state.jid, + ToNick), From, Err), {next_state, normal_state, StateData} end end; @@ -448,21 +446,22 @@ normal_state({route, From, ToNick, Err = jlib:make_error_reply( Packet, ?ERR_ITEM_NOT_FOUND), ejabberd_router:route( - {StateData#state.room, StateData#state.host, ToNick}, + jlib:jid_replace_resource(StateData#state.jid, ToNick), From, Err); ToJID -> {ok, #user{nick = FromNick}} = ?DICT:find(jlib:jid_tolower(From), StateData#state.users), ejabberd_router:route( - {StateData#state.room, StateData#state.host, FromNick}, + jlib:jid_replace_resource(StateData#state.jid, FromNick), ToJID, Packet) end; _ -> Err = jlib:make_error_reply( Packet, ?ERR_NOT_ALLOWED), ejabberd_router:route( - {StateData#state.room, StateData#state.host, ToNick}, From, Err) + jlib:jid_replace_resource(StateData#state.jid, ToNick), From, + Err) end, {next_state, normal_state, StateData}; @@ -490,9 +489,7 @@ handle_event({service_message, Msg}, StateName, StateData) -> lists:foreach( fun({LJID, Info}) -> ejabberd_router:route( - {StateData#state.room, - StateData#state.host, - ""}, + StateData#state.jid, Info#user.jid, MessagePkt) end, @@ -792,9 +789,8 @@ add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) -> true -> Err = jlib:make_error_reply(Packet, ?ERR_MUC_NICK_CONFLICT), ejabberd_router:route( - {StateData#state.room, - StateData#state.host, - Nick}, % TODO: s/Nick/""/ + % TODO: s/Nick/""/ + jlib:jid_replace_resource(StateData#state.jid, Nick), From, Err), StateData; _ -> @@ -809,7 +805,7 @@ add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) -> _ -> ?ERR_MUC_NOT_MEMBER end), ejabberd_router:route( % TODO: s/Nick/""/ - {StateData#state.room, StateData#state.host, Nick}, + jlib:jid_replace_resource(StateData#state.jid, Nick), From, Err), StateData; _ -> @@ -833,7 +829,8 @@ add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) -> Err = jlib:make_error_reply( Packet, ?ERR_MUC_BAD_PASSWORD), ejabberd_router:route( % TODO: s/Nick/""/ - {StateData#state.room, StateData#state.host, Nick}, + jlib:jid_replace_resource( + StateData#state.jid, Nick), From, Err), StateData end @@ -922,7 +919,7 @@ send_new_presence(NJID, StateData) -> [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], [{xmlelement, "item", ItemAttrs, []}]}]), ejabberd_router:route( - {StateData#state.room, StateData#state.host, Nick}, + jlib:jid_replace_resource(StateData#state.jid, Nick), Info#user.jid, Packet) end, ?DICT:to_list(StateData#state.users)). @@ -963,7 +960,8 @@ send_existing_presences(ToJID, StateData) -> [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], [{xmlelement, "item", ItemAttrs, []}]}]), ejabberd_router:route( - {StateData#state.room, StateData#state.host, FromNick}, + jlib:jid_replace_resource( + StateData#state.jid, FromNick), RealToJID, Packet) end @@ -1033,11 +1031,11 @@ send_nick_changing(JID, OldNick, StateData) -> [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], [{xmlelement, "item", ItemAttrs2, []}]}]), ejabberd_router:route( - {StateData#state.room, StateData#state.host, OldNick}, + jlib:jid_replace_resource(StateData#state.jid, OldNick), Info#user.jid, Packet1), ejabberd_router:route( - {StateData#state.room, StateData#state.host, Nick}, + jlib:jid_replace_resource(StateData#state.jid, Nick), Info#user.jid, Packet2) end, ?DICT:to_list(StateData#state.users)). @@ -1086,7 +1084,7 @@ send_history(JID, StateData) -> lists:foldl( fun({Nick, Packet, HaveSubject}, B) -> ejabberd_router:route( - {StateData#state.room, StateData#state.host, Nick}, + jlib:jid_replace_resource(StateData#state.jid, Nick), JID, Packet), B or HaveSubject @@ -1105,7 +1103,7 @@ send_subject(JID, StateData) -> [{xmlcdata, Nick ++ " has set the topic to: " ++ Subject}]}]}, ejabberd_router:route( - {StateData#state.room, StateData#state.host, ""}, + StateData#state.jid, JID, Packet) end. @@ -1123,7 +1121,7 @@ send_join_messages_end(JID, StateData) -> [{xmlelement, "body", [], [{xmlcdata, "-"}]}]}, ejabberd_router:route( - {StateData#state.room, StateData#state.host, ""}, + StateData#state.jid, JID, Packet). @@ -1550,7 +1548,7 @@ send_kickban_presence1(UJID, Reason, Code, StateData) -> [{xmlelement, "item", ItemAttrs, ItemEls}, {xmlelement, "status", [{"code", Code}], []}]}]}, ejabberd_router:route( - {StateData#state.room, StateData#state.host, Nick}, + jlib:jid_replace_resource(StateData#state.jid, Nick), Info#user.jid, Packet) end, ?DICT:to_list(StateData#state.users)). @@ -1842,7 +1840,7 @@ destroy_room(DEls, StateData) -> {xmlelement, "destroy", [], DEls}]}]}, ejabberd_router:route( - {StateData#state.room, StateData#state.host, Nick}, + jlib:jid_replace_resource(StateData#state.jid, Nick), Info#user.jid, Packet) end, ?DICT:to_list(StateData#state.users)), @@ -1950,9 +1948,7 @@ check_invitation(From, Els, StateData) -> ""})}], [{xmlcdata, Reason}]}]}, ejabberd_router:route( - {StateData#state.room, - StateData#state.host, - ""}, + StateData#state.jid, JID, Msg), JID; |