summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jlib.hrl2
-rw-r--r--src/mod_disco.erl2
-rw-r--r--src/mod_irc/mod_irc.erl185
-rw-r--r--src/mod_pubsub/mod_pubsub.erl4
-rw-r--r--src/msgs/ru.msg9
5 files changed, 120 insertions, 82 deletions
diff --git a/src/jlib.hrl b/src/jlib.hrl
index 9a0be9ac..6c9631c5 100644
--- a/src/jlib.hrl
+++ b/src/jlib.hrl
@@ -33,6 +33,8 @@
-define(NS_PUBSUB_OWNER, "http://jabber.org/protocol/pubsub#owner").
-define(NS_PUBSUB_NMI, "http://jabber.org/protocol/pubsub#node-meta-info").
+-define(NS_EJABBERD_CONFIG, "ejabberd:config").
+
-define(NS_STREAM, "http://etherx.jabber.org/streams").
-define(NS_STANZAS, "urn:ietf:params:xml:ns:xmpp-stanzas").
diff --git a/src/mod_disco.erl b/src/mod_disco.erl
index f0ec5367..1c7f8d0b 100644
--- a/src/mod_disco.erl
+++ b/src/mod_disco.erl
@@ -124,7 +124,7 @@ process_local_iq_info(From, _To, #iq{type = Type, xmlns = XMLNS,
"query",
[{"xmlns", ?NS_DISCO_INFO}],
[{xmlelement, "identity",
- [{"category", "service"},
+ [{"category", "server"},
{"type", "im"},
{"name", "ejabberd"}], []}] ++
Features
diff --git a/src/mod_irc/mod_irc.erl b/src/mod_irc/mod_irc.erl
index 8e70f4d9..8a5a3567 100644
--- a/src/mod_irc/mod_irc.erl
+++ b/src/mod_irc/mod_irc.erl
@@ -72,9 +72,9 @@ do_route(Host, From, To, Packet) ->
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res));
- #iq{type = Type, xmlns = ?NS_IQDATA,
+ #iq{type = Type, xmlns = ?NS_EJABBERD_CONFIG,
sub_el = SubEl} = IQ ->
- iq_data(From, To, IQ);
+ ejabberd_config(From, To, IQ);
#iq{} = IQ ->
Err = jlib:make_error_reply(
Packet, ?ERR_FEATURE_NOT_IMPLEMENTED),
@@ -155,12 +155,12 @@ iq_disco() ->
{xmlelement, "feature",
[{"var", ?NS_MUC}], []},
{xmlelement, "feature",
- [{"var", ?NS_IQDATA}], []}].
+ [{"var", ?NS_EJABBERD_CONFIG}], []}].
-iq_data(From, To, #iq{type = Type} = IQ) ->
- case catch process_iq_data(From, To, IQ) of
+ejabberd_config(From, To, #iq{type = Type} = IQ) ->
+ case catch process_ejabberd_config(From, To, IQ) of
{'EXIT', Reason} ->
?ERROR_MSG("~p", [Reason]);
ResIQ ->
@@ -173,42 +173,64 @@ iq_data(From, To, #iq{type = Type} = IQ) ->
end
end.
+find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) ->
+ find_xdata_el1(SubEls).
-process_iq_data(From, To,
+find_xdata_el1([]) ->
+ false;
+
+find_xdata_el1([{xmlelement, Name, Attrs, SubEls} | Els]) ->
+ case xml:get_attr_s("xmlns", Attrs) of
+ ?NS_XDATA ->
+ {xmlelement, Name, Attrs, SubEls};
+ _ ->
+ find_xdata_el1(Els)
+ end;
+
+find_xdata_el1([_ | Els]) ->
+ find_xdata_el1(Els).
+
+process_ejabberd_config(From, To,
#iq{type = Type, xmlns = XMLNS, sub_el = SubEl} = IQ) ->
Lang = xml:get_tag_attr_s("xml:lang", SubEl),
case Type of
set ->
- case xml:get_tag_attr_s("type", SubEl) of
- "cancel" ->
- IQ#iq{type = result,
- sub_el = [{xmlelement, "query",
- [{"xmlns", XMLNS}], []}]};
- "submit" ->
- XData = jlib:parse_xdata_submit(SubEl),
- case XData of
- invalid ->
- IQ#iq{type = error,
- sub_el = [SubEl, ?ERR_BAD_REQUEST]};
- _ ->
- Node =
- string:tokens(
- xml:get_tag_attr_s("node", SubEl),
- "/"),
- case set_form(From, Node, Lang, XData) of
- {result, Res} ->
- IQ#iq{type = result,
- sub_el = [{xmlelement, "query",
- [{"xmlns", XMLNS}],
- Res
- }]};
- {error, Error} ->
+ XDataEl = find_xdata_el(SubEl),
+ case XDataEl of
+ false ->
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ACCEPTABLE]};
+ {xmlelement, _Name, Attrs, SubEls} ->
+ case xml:get_attr_s("type", Attrs) of
+ "cancel" ->
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}], []}]};
+ "submit" ->
+ XData = jlib:parse_xdata_submit(XDataEl),
+ case XData of
+ invalid ->
IQ#iq{type = error,
- sub_el = [SubEl, Error]}
- end
- end;
- _ ->
- IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]}
+ sub_el = [SubEl, ?ERR_BAD_REQUEST]};
+ _ ->
+ Node = string:tokens(
+ xml:get_tag_attr_s("node", SubEl),
+ "/"),
+ case set_form(From, Node, Lang, XData) of
+ {result, Res} ->
+ IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ Res
+ }]};
+ {error, Error} ->
+ IQ#iq{type = error,
+ sub_el = [SubEl, Error]}
+ end
+ end;
+ _ ->
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_BAD_REQUEST]}
+ end
end;
get ->
Node =
@@ -246,54 +268,61 @@ get_form(From, [], Lang) ->
Customs;
{Username, Encodings} ->
{result,
- [{xmlelement, "title", [],
+ [{xmlelement, "instructions", [],
[{xmlcdata,
- User ++ "@" ++ Server ++ " " ++
- translate:translate(Lang, "Configuration")}]},
+ translate:translate(
+ Lang,
+ "You need an x:data capable client "
+ "to configure mod_irc settings")}]},
+ {xmlelement, "x", [{"xmlns", ?NS_XDATA}],
+ [{xmlelement, "title", [],
+ [{xmlcdata,
+ translate:translate(Lang, "mod_irc configuration for") ++
+ " " ++ User ++ "@" ++ Server}]},
%{xmlelement, "instructions", [],
% [{xmlcdata,
% translate:translate(
% Lang, "")}]},
- {xmlelement, "field", [{"type", "text-single"},
- {"label",
- translate:translate(
- Lang, "IRC Username")},
- {"var", "username"}],
- [{xmlelement, "value", [], [{xmlcdata, Username}]}]},
- {xmlelement, "field", [{"type", "fixed"}],
- [{xmlelement, "value", [],
- [{xmlcdata,
- lists:flatten(
- io_lib:format(
- translate:translate(
- Lang,
- "If you want to specify different encodings "
- "for IRC servers, fill this list with values "
- "in format '{\"irc server\", \"encoding\"}'. "
- "By default this service use \"~s\" encoding."),
- [?DEFAULT_IRC_ENCODING]))}]}]},
- {xmlelement, "field", [{"type", "fixed"}],
- [{xmlelement, "value", [],
- [{xmlcdata,
- translate:translate(
- Lang,
- "Example: [{\"irc.lucky.net\", \"koi8-r\"}, "
- "{\"vendetta.fef.net\", \"iso8859-1\"}]."
- )}]}]},
- {xmlelement, "field", [{"type", "text-multi"},
- {"label",
- translate:translate(Lang, "Encodings")},
- {"var", "encodings"}],
- lists:map(
- fun(S) ->
- {xmlelement, "value", [], [{xmlcdata, S}]}
- end,
- string:tokens(
- lists:flatten(
- io_lib:format("~p.", [Encodings])),
- "\n"))
- }
- ]}
+ {xmlelement, "field", [{"type", "text-single"},
+ {"label",
+ translate:translate(
+ Lang, "IRC Username")},
+ {"var", "username"}],
+ [{xmlelement, "value", [], [{xmlcdata, Username}]}]},
+ {xmlelement, "field", [{"type", "fixed"}],
+ [{xmlelement, "value", [],
+ [{xmlcdata,
+ lists:flatten(
+ io_lib:format(
+ translate:translate(
+ Lang,
+ "If you want to specify different encodings "
+ "for IRC servers, fill this list with values "
+ "in format '{\"irc server\", \"encoding\"}'. "
+ "By default this service use \"~s\" encoding."),
+ [?DEFAULT_IRC_ENCODING]))}]}]},
+ {xmlelement, "field", [{"type", "fixed"}],
+ [{xmlelement, "value", [],
+ [{xmlcdata,
+ translate:translate(
+ Lang,
+ "Example: [{\"irc.lucky.net\", \"koi8-r\"}, "
+ "{\"vendetta.fef.net\", \"iso8859-1\"}]."
+ )}]}]},
+ {xmlelement, "field", [{"type", "text-multi"},
+ {"label",
+ translate:translate(Lang, "Encodings")},
+ {"var", "encodings"}],
+ lists:map(
+ fun(S) ->
+ {xmlelement, "value", [], [{xmlcdata, S}]}
+ end,
+ string:tokens(
+ lists:flatten(
+ io_lib:format("~p.", [Encodings])),
+ "\n"))
+ }
+ ]}]}
end;
diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl
index 98125e0c..75c6c10d 100644
--- a/src/mod_pubsub/mod_pubsub.erl
+++ b/src/mod_pubsub/mod_pubsub.erl
@@ -213,8 +213,8 @@ iq_disco_info(SNode) ->
case Node of
[] ->
[{xmlelement, "identity",
- [{"category", "service"},
- {"type", "pubsub"},
+ [{"category", "pubsub"},
+ {"type", "generic"},
{"name", "ejabberd/mod_pubsub"}], []},
%{xmlelement, "feature", [{"var", ?NS_REGISTER}], []},
{xmlelement, "feature", [{"var", ?NS_PUBSUB}], []},
diff --git a/src/msgs/ru.msg b/src/msgs/ru.msg
index 782b6acd..dec81d20 100644
--- a/src/msgs/ru.msg
+++ b/src/msgs/ru.msg
@@ -90,7 +90,14 @@
{"Make room anonymous?", "Сделать комнату анонимной?"}.
{"Enable logging?", "Включить журналирование?"}.
-
+% mod_irc/mod_irc.erl
+{"You need an x:data capable client to configure mod_irc settings",
+ "Чтобы настроить параметры mod_irc, нужен x:data-совместимый клиент"}.
+{"mod_irc configuration for", "Конфигурация mod_irc для"}.
+{"IRC Username", "Имя пользователя IRC"}.
+{"If you want to specify different encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\"}'. By default this service use \"~s\" encoding.", "Чтобы указать различные кодировки для разных серверов IRC, заполните список значениями в формате '{\"irc server\", \"encoding\"}'. По умолчанию эта служба использует кодировку \"~s\"."}.
+{"Example: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", \"iso8859-1\"}].", "Примеры: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", \"iso8859-1\"}]."}.
+{"Encodings", "Кодировки"}.
% Local Variables:
% mode: erlang