+2004-10-08 Alexey Shchepin <alexey@sevcom.net>
+
+ * src/mod_muc/mod_muc_room.erl: Fixed room destroying
+
+ * src/ejabberd.cfg.example: Updated
+
+ * src/ejabberd_sm.erl: Fixed message routing when all resources
+ have negative priority
+
+ * src/msgs/*.msg: Updated (thanks to Sergei Golovan)
+
+ * src/web/ejabberd_web_admin.erl: Table titles now bold (thanks to
+ Sergei Golovan)
+
2004-10-06 Alexey Shchepin <alexey@sevcom.net>
* doc/guide.tex: Updated
\author{Alexey Shchepin \\
\ahrefurl{mailto:alexey@sevcom.net} \\
\ahrefurl{xmpp:aleksey@jabber.ru}}
-\date{June 24, 2004}
+\date{October 8, 2004}
\begin{document}
\begin{titlepage}
% this line:
{auth_method, internal}.
-% For LDAP uthentification use these lines instead of above one:
+% For LDAP authentification use these lines instead of above one:
%{auth_method, ldap}.
%{ldap_servers, ["localhost"]}. % List of LDAP servers
%{ldap_uidattr, "uid"}. % LDAP attribute that holds user ID
%{ldap_base, "dc=example,dc=com"}. % Base of LDAP directory
+% For authentification via external script use the following:
+%{auth_method, external}.
+%{extauth_program, "/path/to/authentification/script"}.
+
% Host name:
{host, "localhost"}.
route_message(From, To, Packet) ->
LUser = To#jid.luser,
case catch lists:max(get_user_present_resources(LUser)) of
- {'EXIT', _} ->
+ {Priority, R} when is_integer(Priority),
+ Priority >= 0 ->
+ LResource = jlib:resourceprep(R),
+ LUR = {LUser, LResource},
+ case mnesia:dirty_read({session, LUR}) of
+ [] ->
+ ok; % Race condition
+ [Sess] ->
+ Pid = Sess#session.pid,
+ ?DEBUG("sending to process ~p~n", [Pid]),
+ Pid ! {route, From, To, Packet}
+ end;
+ _ ->
case xml:get_tag_attr_s("type", Packet) of
"error" ->
ok;
Packet, ?ERR_SERVICE_UNAVAILABLE),
ejabberd_router:route(To, From, Err)
end
- end;
- {_, R} ->
- LResource = jlib:resourceprep(R),
- LUR = {LUser, LResource},
- case mnesia:dirty_read({session, LUR}) of
- [] ->
- ok; % Race condition
- [Sess] ->
- Pid = Sess#session.pid,
- ?DEBUG("sending to process ~p~n", [Pid]),
- Pid ! {route, From, To, Packet}
end
end.
Info#user.jid,
Packet)
end, ?DICT:to_list(StateData#state.users)),
+ case (StateData#state.config)#config.persistent of
+ true ->
+ mod_muc:forget_room(StateData#state.room);
+ false ->
+ ok
+ end,
{result, [], stop}.
{"Options", "Opciones"}.
{"Update", "Actualizar"}.
{"Delete", "Eliminar"}.
-{"", ""}.
+{"Add User", ""}.
+{"ejabberd (c) 2002-2004 Alexey Shchepin, 2004 Process One", ""}.
+{"Offline messages", ""}.
+{"Last Activity", ""}.
+{"Never", ""}.
+{"~s offline messages queue", ""}.
+{"Time", ""}.
+{"From", ""}.
+{"To", ""}.
+{"Packet", ""}.
+{"Offline messages:", ""}.
+{"Roster", ""}.
+{"Nickname", ""}.
+{"Subscription", ""}.
+{"Pending", ""}.
+{"Groups", ""}.
+{"Remove", ""}.
+{"Add JID", ""}.
+{"User ", ""}.
+{"Roster of ", ""}.
% Local Variables:
% mode: erlang
{"Options", ""}.
{"Update", ""}.
{"Delete", ""}.
-{"", ""}.
+{"Add User", ""}.
+{"ejabberd (c) 2002-2004 Alexey Shchepin, 2004 Process One", ""}.
+{"Offline messages", ""}.
+{"Last Activity", ""}.
+{"Never", ""}.
+{"~s offline messages queue", ""}.
+{"Time", ""}.
+{"From", ""}.
+{"To", ""}.
+{"Packet", ""}.
+{"Offline messages:", ""}.
+{"Roster", ""}.
+{"Nickname", ""}.
+{"Subscription", ""}.
+{"Pending", ""}.
+{"Groups", ""}.
+{"Remove", ""}.
+{"Add JID", ""}.
+{"User ", ""}.
+{"Roster of ", ""}.
% Local Variables:
% mode: erlang
{"Options", "Opties"}.
{"Update", "Bijwerken"}.
{"Delete", "Verwijderen"}.
-{"", ""}.
+{"Add User", ""}.
+{"ejabberd (c) 2002-2004 Alexey Shchepin, 2004 Process One", ""}.
+{"Offline messages", ""}.
+{"Last Activity", ""}.
+{"Never", ""}.
+{"~s offline messages queue", ""}.
+{"Time", ""}.
+{"From", ""}.
+{"To", ""}.
+{"Packet", ""}.
+{"Offline messages:", ""}.
+{"Roster", ""}.
+{"Nickname", ""}.
+{"Subscription", ""}.
+{"Pending", ""}.
+{"Groups", ""}.
+{"Remove", ""}.
+{"Add JID", ""}.
+{"User ", ""}.
+{"Roster of ", ""}.
% Local Variables:
% mode: erlang
{"Options", "Параметры"}.
{"Update", "Обновить"}.
{"Delete", "Удалить"}.
-{"", ""}.
+{"Add User", "Добавить пользователя"}.
+{"ejabberd (c) 2002-2004 Alexey Shchepin, 2004 Process One", "ejabberd (c) 2002-2004 Алексей Щепин, 2004 Process One"}.
+{"Offline messages", "Офлайновые сообщения"}.
+{"Last Activity", "Последнее подключение"}.
+{"Never", "Никогда"}.
+{"~s offline messages queue", "Oчередь офлайновых сообщений ~s"}.
+{"Time", "Время"}.
+{"From", "От кого"}.
+{"To", "Кому"}.
+{"Packet", "Пакет"}.
+{"Offline messages:", "Офлайновые сообщения:"}.
+{"Roster", "Ростер"}.
+{"Nickname", "Псевдоним"}.
+{"Subscription", "Подписка"}.
+{"Pending", "Ожидание"}.
+{"Groups", "Группы"}.
+{"Remove", "Удалить"}.
+{"Add JID", "Добавить JID"}.
+{"User ", "Пользователь "}.
+{"Roster of ", "Ростер пользователя "}.
% Local Variables:
% mode: erlang
{"Options", "Параметри"}.
{"Update", "Обновити"}.
{"Delete", "Видалити"}.
-{"", ""}.
+{"Add User", ""}.
+{"ejabberd (c) 2002-2004 Alexey Shchepin, 2004 Process One", ""}.
+{"Offline messages", ""}.
+{"Last Activity", ""}.
+{"Never", ""}.
+{"~s offline messages queue", ""}.
+{"Time", ""}.
+{"From", ""}.
+{"To", ""}.
+{"Packet", ""}.
+{"Offline messages:", ""}.
+{"Roster", ""}.
+{"Nickname", ""}.
+{"Subscription", ""}.
+{"Pending", ""}.
+{"Groups", ""}.
+{"Remove", ""}.
+{"Add JID", ""}.
+{"User ", ""}.
+{"Roster of ", ""}.
% Local Variables:
% mode: erlang
padding: 0.1em;
}
+thead {
+ color: #000000;
+ background-color: #ffffff;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10pt;
+ font-weight: bold;
+}
tr.head {
color: #ffffff;
QueueLen = length(mnesia:dirty_read({offline_msg, User})),
FQueueLen = [?AC("queue/",
integer_to_list(QueueLen))],
- [?XC("h1", "User: " ++ User)] ++
+ [?XC("h1", ?T("User ") ++ User)] ++
case Res of
ok -> [?CT("submitted"), ?P];
error -> [?CT("bad format"), ?P];
?XAE("td", [{"class", "valign"}], [?XC("pre", FPacket)])]
)
end, Msgs),
- [?XC("h1", User ++ " offline messages queue")] ++
+ [?XC("h1", io_lib:format(?T("~s offline messages queue"), [User]))] ++
case Res of
ok -> [?CT("submitted"), ?P];
error -> [?CT("bad format"), ?P];
[?XE("thead",
[?XE("tr",
[?XCT("td", "JID"),
- ?XCT("td", "Name"),
+ ?XCT("td", "Nickname"),
?XCT("td", "Subscription"),
?XCT("td", "Pending"),
?XCT("td", "Groups")
"Remove")])])
end, SItems))])]
end,
- [?XC("h1", "Roster of " ++ User)] ++
+ [?XC("h1", ?T("Roster of ") ++ User)] ++
case Res of
ok -> [?CT("submitted"), ?P];
error -> [?CT("bad format"), ?P];