diff options
Diffstat (limited to 'src/mod_disco.erl')
-rw-r--r-- | src/mod_disco.erl | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/mod_disco.erl b/src/mod_disco.erl index a85553d3b..f658b58f8 100644 --- a/src/mod_disco.erl +++ b/src/mod_disco.erl @@ -19,7 +19,9 @@ process_sm_iq_items/3, process_sm_iq_info/3, register_feature/1, - unregister_feature/1]). + unregister_feature/1, + register_extra_domain/1, + unregister_extra_domain/1]). -include("ejabberd.hrl"). -include("jlib.hrl"). @@ -42,6 +44,9 @@ start(Opts) -> register_feature("iq"), register_feature("presence"), register_feature("presence-invisible"), + catch ets:new(disco_extra_domains, [named_table, ordered_set, public]), + ExtraDomains = gen_mod:get_opt(extra_domains, Opts, []), + lists:foreach(fun register_extra_domain/1, ExtraDomains), ok. stop() -> @@ -59,6 +64,14 @@ unregister_feature(Feature) -> catch ets:new(disco_features, [named_table, ordered_set, public]), ets:delete(disco_features, Feature). +register_extra_domain(Domain) -> + catch ets:new(disco_extra_domains, [named_table, ordered_set, public]), + ets:insert(disco_extra_domains, {Domain}). + +unregister_extra_domain(Domain) -> + catch ets:new(disco_extra_domains, [named_table, ordered_set, public]), + ets:delete(disco_extra_domains, Domain). + process_local_iq_items(From, To, {iq, ID, Type, XMLNS, SubEl}) -> Lang = xml:get_tag_attr_s("xml:lang", SubEl), case Type of @@ -180,10 +193,11 @@ process_local_iq_info(From, To, {iq, ID, Type, XMLNS, SubEl}) -> feature_to_xml({Feature}) -> {xmlelement, "feature", [{"var", Feature}], []}. +domain_to_xml({Domain}) -> + {xmlelement, "item", [{"jid", Domain}], []}; domain_to_xml(Domain) -> {xmlelement, "item", [{"jid", Domain}], []}. - -define(NODE(Name, Node), {xmlelement, "item", [{"jid", Server}, @@ -193,12 +207,14 @@ domain_to_xml(Domain) -> get_services_only() -> lists:map(fun domain_to_xml/1, - ejabberd_router:dirty_get_all_routes()). + ejabberd_router:dirty_get_all_routes()) ++ + lists:map(fun domain_to_xml/1, ets:tab2list(disco_extra_domains)). get_local_items([], Server, Lang) -> Domains = lists:map(fun domain_to_xml/1, - ejabberd_router:dirty_get_all_routes()), + ejabberd_router:dirty_get_all_routes()) ++ + lists:map(fun domain_to_xml/1, ets:tab2list(disco_extra_domains)), {result, Domains ++ [?NODE("Configuration", "config"), |