diff options
Diffstat (limited to 'src/mod_muc.erl')
-rw-r--r-- | src/mod_muc.erl | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/mod_muc.erl b/src/mod_muc.erl index f75981736..d50e6552e 100644 --- a/src/mod_muc.erl +++ b/src/mod_muc.erl @@ -556,11 +556,17 @@ route_to_room(Packet, ServerHost) -> end. -spec process_vcard(iq()) -> iq(). -process_vcard(#iq{type = get, lang = Lang, sub_els = [#vcard_temp{}]} = IQ) -> - xmpp:make_iq_result( - IQ, #vcard_temp{fn = <<"ejabberd/mod_muc">>, - url = ejabberd_config:get_uri(), - desc = misc:get_descr(Lang, ?T("ejabberd MUC module"))}); +process_vcard(#iq{type = get, to = To, lang = Lang, sub_els = [#vcard_temp{}]} = IQ) -> + ServerHost = ejabberd_router:host_of_route(To#jid.lserver), + VCard = case mod_muc_opt:vcard(ServerHost) of + undefined -> + #vcard_temp{fn = <<"ejabberd/mod_muc">>, + url = ejabberd_config:get_uri(), + desc = misc:get_descr(Lang, ?T("ejabberd MUC module"))}; + V -> + V + end, + xmpp:make_iq_result(IQ, VCard); process_vcard(#iq{type = set, lang = Lang} = IQ) -> Txt = ?T("Value 'set' of 'type' attribute is not allowed"), xmpp:make_error(IQ, xmpp:err_not_allowed(Txt, Lang)); @@ -1182,7 +1188,9 @@ mod_opt_type(hosts) -> mod_opt_type(queue_type) -> econf:queue_type(); mod_opt_type(hibernation_timeout) -> - econf:timeout(second, infinity). + econf:timeout(second, infinity); +mod_opt_type(vcard) -> + econf:vcard_temp(). mod_options(Host) -> [{access, all}, @@ -1214,6 +1222,7 @@ mod_options(Host) -> {user_presence_shaper, none}, {preload_rooms, true}, {hibernation_timeout, infinity}, + {vcard, undefined}, {default_room_options, [{allow_change_subj,true}, {allow_private_messages,true}, |