Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--TODO16
-rw-r--r--src/ejabberd_local.erl7
-rw-r--r--src/ejabberd_s2s.erl7
-rw-r--r--src/mod_muc/mod_muc_room.erl44
-rw-r--r--src/msgs/ru.msg1
6 files changed, 70 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index a3c7f3245..736d11366 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2003-05-15 Alexey Shchepin <alexey@sevcom.net>
+
+ * src/ejabberd_s2s.erl: Added error catching for do_route/3
+ * src/ejabberd_local.erl: Likewise for do_route/4
+
+ * src/msgs/ru.msg: Updated
+
+ * src/mod_muc/mod_muc_room.erl: New option to allow to view list
+ of participants for non-ones via disco#items
+
+ * src/mod_muc/mod_muc_room.erl: Store room subject with
+ configuration options
+
2003-05-14 Alexey Shchepin <alexey@sevcom.net>
* src/mod_muc/mod_muc_room.erl: Remove user from room on receiving
diff --git a/TODO b/TODO
index 0f202549d..0b7984866 100644
--- a/TODO
+++ b/TODO
@@ -6,15 +6,21 @@ admin interface
node restart/shutdown
statistics about memory usage
backup management
-S2S timeouts
-rewrite S2S key validation
-iq:browse (?)
+
+S2S:
+ * timeouts
+
+ * rewrite S2S key validation
+
more correctly work with SRV DNS records (priority, weight, etc...)
SSL
-SASL
JEP-62,63 (?)
make roster set to work in one transaction
-add traffic shapers to to c2s connection before authentification
+add traffic shapers to c2s connection before authentification
add traffic shapers to s2s connections
more traffic shapers
SNMP
+
+mod_muc:
+
+ * broadcast messages from admin
diff --git a/src/ejabberd_local.erl b/src/ejabberd_local.erl
index 3dcc1eabd..02618fe4f 100644
--- a/src/ejabberd_local.erl
+++ b/src/ejabberd_local.erl
@@ -37,7 +37,12 @@ init() ->
loop(State) ->
receive
{route, From, To, Packet} ->
- do_route(State, From, To, Packet),
+ case catch do_route(State, From, To, Packet) of
+ {'EXIT', Reason} ->
+ ?ERROR_MSG("~p", [Reason]);
+ _ ->
+ ok
+ end,
loop(State);
{register_iq_handler, XMLNS, Module, Function} ->
ets:insert(State#state.iqtable, {XMLNS, Module, Function}),
diff --git a/src/ejabberd_s2s.erl b/src/ejabberd_s2s.erl
index 0aa36784b..0490c8e50 100644
--- a/src/ejabberd_s2s.erl
+++ b/src/ejabberd_s2s.erl
@@ -55,7 +55,12 @@ loop() ->
clean_table_from_bad_node(Node),
loop();
{route, From, To, Packet} ->
- do_route(From, To, Packet),
+ case catch do_route(From, To, Packet) of
+ {'EXIT', Reason} ->
+ ?ERROR_MSG("~p", [Reason]);
+ _ ->
+ ok
+ end,
loop();
_ ->
loop()
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl
index 33d824474..47e55576f 100644
--- a/src/mod_muc/mod_muc_room.erl
+++ b/src/mod_muc/mod_muc_room.erl
@@ -40,6 +40,7 @@
allow_query_users = true,
allow_private_messages = true,
public = true,
+ public_list = true,
persistent = false,
moderated = false, % TODO
members_by_default = true,
@@ -146,10 +147,20 @@ normal_state({route, From, "",
case can_change_subject(Role,
StateData) of
true ->
- {StateData#state{
- subject = Subject,
- subject_author = FromNick},
- true};
+ NSD =
+ StateData#state{
+ subject = Subject,
+ subject_author =
+ FromNick},
+ case (NSD#state.config)#config.persistent of
+ true ->
+ mod_muc:store_room(
+ NSD#state.room,
+ make_opts(NSD));
+ _ ->
+ ok
+ end,
+ {NSD, true};
_ ->
{StateData, false}
end
@@ -272,7 +283,7 @@ normal_state({route, From, "",
{{iq, ID, result, XMLNS,
[{xmlelement, "query", [{"xmlns", XMLNS}],
Res
- }]},
+ }]},
SD};
{error, Error} ->
{{iq, ID, error, XMLNS,
@@ -1496,9 +1507,6 @@ process_iq_owner(From, set, SubEl, StateData) ->
_ ->
{error, ?ERR_FORBIDDEN}
end;
-% {xmlelement, _, _, Items} = SubEl,
-% process_admin_items_set(From, Items, StateData);
-% {error, ?ERR_FEATURE_NOT_IMPLEMENTED};
process_iq_owner(From, get, SubEl, StateData) ->
FAffiliation = get_affiliation(From, StateData),
@@ -1567,6 +1575,9 @@ get_config(Lang, StateData) ->
?BOOLXFIELD("Make room public searchable?",
"public",
Config#config.public),
+ ?BOOLXFIELD("Make participants list public?",
+ "public_list",
+ Config#config.public_list),
?BOOLXFIELD("Make room persistent?",
"persistent",
Config#config.persistent),
@@ -1634,6 +1645,8 @@ set_xoption([{"allow_private_messages", [Val]} | Opts], Config) ->
?SET_BOOL_XOPT(allow_private_messages, Val);
set_xoption([{"public", [Val]} | Opts], Config) ->
?SET_BOOL_XOPT(public, Val);
+set_xoption([{"public_list", [Val]} | Opts], Config) ->
+ ?SET_BOOL_XOPT(public_list, Val);
set_xoption([{"persistent", [Val]} | Opts], Config) ->
?SET_BOOL_XOPT(persistent, Val);
set_xoption([{"moderated", [Val]} | Opts], Config) ->
@@ -1681,6 +1694,7 @@ set_opts([{Opt, Val} | Opts], StateData) ->
?CASE_CONFIG_OPT(allow_query_users);
?CASE_CONFIG_OPT(allow_private_messages);
?CASE_CONFIG_OPT(public);
+ ?CASE_CONFIG_OPT(public_list);
?CASE_CONFIG_OPT(persistent);
?CASE_CONFIG_OPT(moderated);
?CASE_CONFIG_OPT(members_by_default);
@@ -1691,6 +1705,10 @@ set_opts([{Opt, Val} | Opts], StateData) ->
?CASE_CONFIG_OPT(logging);
affiliations ->
StateData#state{affiliations = ?DICT:from_list(Val)};
+ subject ->
+ StateData#state{subject = Val};
+ subject_author ->
+ StateData#state{subject_author = Val};
_ -> StateData
end,
set_opts(Opts, NSD).
@@ -1705,6 +1723,7 @@ make_opts(StateData) ->
?MAKE_CONFIG_OPT(allow_query_users),
?MAKE_CONFIG_OPT(allow_private_messages),
?MAKE_CONFIG_OPT(public),
+ ?MAKE_CONFIG_OPT(public_list),
?MAKE_CONFIG_OPT(persistent),
?MAKE_CONFIG_OPT(moderated),
?MAKE_CONFIG_OPT(members_by_default),
@@ -1713,7 +1732,9 @@ make_opts(StateData) ->
?MAKE_CONFIG_OPT(password_protected),
?MAKE_CONFIG_OPT(anonymous),
?MAKE_CONFIG_OPT(logging),
- {affiliations, ?DICT:to_list(StateData#state.affiliations)}
+ {affiliations, ?DICT:to_list(StateData#state.affiliations)},
+ {subject, StateData#state.subject},
+ {subject_author, StateData#state.subject_author}
].
@@ -1760,8 +1781,9 @@ process_iq_disco_items(From, set, StateData) ->
process_iq_disco_items(From, get, StateData) ->
FAffiliation = get_affiliation(From, StateData),
FRole = get_role(From, StateData),
- case (FRole /= none) or
- (FAffiliation == admin) or
+ case ((StateData#state.config)#config.public_list == true) orelse
+ (FRole /= none) orelse
+ (FAffiliation == admin) orelse
(FAffiliation == owner) of
true ->
UList =
diff --git a/src/msgs/ru.msg b/src/msgs/ru.msg
index 15cabadd8..c9bb60c45 100644
--- a/src/msgs/ru.msg
+++ b/src/msgs/ru.msg
@@ -72,6 +72,7 @@
{"Allow users to send private messages?",
"Разрешить приватные сообщения?"}.
{"Make room public searchable?", "Сделать комнату видимой всем?"}.
+{"Make participants list public?", "Сделать список участников видимым всем?"}.
{"Make room persistent?", "Сделать комнату постоянной?"}.
{"Make room moderated?", "Сделать комнату модерируемой?"}.
{"Default users as members?",