mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-22 17:28:25 +01:00
* src/msgs/pt-br.msg: Updated (thanks to Lucius Curado)
* src/xml_stream.erl: Support for stanza size limit (thanks to Igor Goryachev) * src/ejabberd_receiver.erl: Likewise * src/ejabberd_c2s.erl: Likewise * src/ejabberd_s2s_in.erl: Likewise * src/ejabberd.cfg.example: Updated * src/ejabberd_auth.erl: Fixed try_register/3 behaviour SVN Revision: 537
This commit is contained in:
parent
e0c700e725
commit
c4b976881e
17
ChangeLog
17
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
2006-04-22 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
|
* src/msgs/pt-br.msg: Updated (thanks to Lucius Curado)
|
||||||
|
|
||||||
|
* src/xml_stream.erl: Support for stanza size limit (thanks to
|
||||||
|
Igor Goryachev)
|
||||||
|
* src/ejabberd_receiver.erl: Likewise
|
||||||
|
* src/ejabberd_c2s.erl: Likewise
|
||||||
|
* src/ejabberd_s2s_in.erl: Likewise
|
||||||
|
* src/ejabberd.cfg.example: Updated
|
||||||
|
|
||||||
|
* src/ejabberd_auth.erl: Fixed try_register/3 behaviour
|
||||||
|
|
||||||
2006-04-20 Mickael Remond <mickael.remond@process-one.net>
|
2006-04-20 Mickael Remond <mickael.remond@process-one.net>
|
||||||
|
|
||||||
* src/ejabberd.cfg.example: Update of the example for anonymous.
|
* src/ejabberd.cfg.example: Update of the example for anonymous.
|
||||||
@ -5,8 +18,8 @@
|
|||||||
* src/ejabberd_auth_anonymous.erl: Removed unnecessary parameter /
|
* src/ejabberd_auth_anonymous.erl: Removed unnecessary parameter /
|
||||||
bugfix.
|
bugfix.
|
||||||
* src/ejabberd_auth.erl: Bugfix: We now are forced to check is an
|
* src/ejabberd_auth.erl: Bugfix: We now are forced to check is an
|
||||||
anonymous user is log under a given user name before trying to register
|
anonymous user is log under a given user name before trying to
|
||||||
it.
|
register it.
|
||||||
* doc/guide.tex: Updated (SASL anonymous and anonymous login).
|
* doc/guide.tex: Updated (SASL anonymous and anonymous login).
|
||||||
|
|
||||||
2006-04-19 Alexey Shchepin <alexey@sevcom.net>
|
2006-04-19 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
@ -75,8 +75,11 @@ set_password(User, Server, Password) ->
|
|||||||
end, {error, not_allowed}, auth_modules(Server)).
|
end, {error, not_allowed}, auth_modules(Server)).
|
||||||
|
|
||||||
try_register(User, Server, Password) ->
|
try_register(User, Server, Password) ->
|
||||||
case lists:member(jlib:nameprep(Server), ?MYHOSTS) and
|
case is_user_exists(User,Server) of
|
||||||
not is_user_exists(User,Server) of
|
true ->
|
||||||
|
{atomic, exists};
|
||||||
|
false ->
|
||||||
|
case lists:member(jlib:nameprep(Server), ?MYHOSTS) of
|
||||||
true ->
|
true ->
|
||||||
lists:foldl(
|
lists:foldl(
|
||||||
fun(_M, {atomic, ok} = Res) ->
|
fun(_M, {atomic, ok} = Res) ->
|
||||||
@ -86,6 +89,7 @@ try_register(User, Server, Password) ->
|
|||||||
end, {error, not_allowed}, auth_modules(Server));
|
end, {error, not_allowed}, auth_modules(Server));
|
||||||
false ->
|
false ->
|
||||||
{error, not_allowed}
|
{error, not_allowed}
|
||||||
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%% Registered users list do not include anonymous users logged
|
%% Registered users list do not include anonymous users logged
|
||||||
|
@ -127,6 +127,11 @@ init([{SockMod, Socket}, Opts]) ->
|
|||||||
{value, {_, S}} -> S;
|
{value, {_, S}} -> S;
|
||||||
_ -> none
|
_ -> none
|
||||||
end,
|
end,
|
||||||
|
MaxStanzaSize =
|
||||||
|
case lists:keysearch(max_stanza_size, 1, Opts) of
|
||||||
|
{value, {_, Size}} -> Size;
|
||||||
|
_ -> infinity
|
||||||
|
end,
|
||||||
Zlib = lists:member(zlib, Opts),
|
Zlib = lists:member(zlib, Opts),
|
||||||
StartTLS = lists:member(starttls, Opts),
|
StartTLS = lists:member(starttls, Opts),
|
||||||
StartTLSRequired = lists:member(starttls_required, Opts),
|
StartTLSRequired = lists:member(starttls_required, Opts),
|
||||||
@ -139,10 +144,12 @@ init([{SockMod, Socket}, Opts]) ->
|
|||||||
if
|
if
|
||||||
TLSEnabled ->
|
TLSEnabled ->
|
||||||
{ok, TLSSocket} = tls:tcp_to_tls(Socket, TLSOpts),
|
{ok, TLSSocket} = tls:tcp_to_tls(Socket, TLSOpts),
|
||||||
RecPid = ejabberd_receiver:start(TLSSocket, tls, none),
|
RecPid = ejabberd_receiver:start(
|
||||||
|
TLSSocket, tls, none, MaxStanzaSize),
|
||||||
{tls, TLSSocket, RecPid};
|
{tls, TLSSocket, RecPid};
|
||||||
true ->
|
true ->
|
||||||
RecPid = ejabberd_receiver:start(Socket, SockMod, none),
|
RecPid = ejabberd_receiver:start(
|
||||||
|
Socket, SockMod, none, MaxStanzaSize),
|
||||||
{SockMod, Socket, RecPid}
|
{SockMod, Socket, RecPid}
|
||||||
end,
|
end,
|
||||||
{ok, wait_for_stream, #state{socket = Socket1,
|
{ok, wait_for_stream, #state{socket = Socket1,
|
||||||
|
@ -13,8 +13,9 @@
|
|||||||
-behaviour(gen_server).
|
-behaviour(gen_server).
|
||||||
|
|
||||||
%% API
|
%% API
|
||||||
-export([start_link/4,
|
-export([start_link/5,
|
||||||
start/3,
|
start/3,
|
||||||
|
start/4,
|
||||||
change_shaper/2,
|
change_shaper/2,
|
||||||
reset_stream/1,
|
reset_stream/1,
|
||||||
starttls/2,
|
starttls/2,
|
||||||
@ -32,6 +33,7 @@
|
|||||||
sock_mod,
|
sock_mod,
|
||||||
shaper_state,
|
shaper_state,
|
||||||
c2s_pid,
|
c2s_pid,
|
||||||
|
max_stanza_size,
|
||||||
xml_stream_state,
|
xml_stream_state,
|
||||||
timeout}).
|
timeout}).
|
||||||
|
|
||||||
@ -42,16 +44,21 @@
|
|||||||
%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
|
%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
|
||||||
%% Description: Starts the server
|
%% Description: Starts the server
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
start_link(Socket, SockMod, Shaper, C2SPid) ->
|
start_link(Socket, SockMod, Shaper, MaxStanzaSize, C2SPid) ->
|
||||||
gen_server:start_link(?MODULE, [Socket, SockMod, Shaper, C2SPid], []).
|
gen_server:start_link(
|
||||||
|
?MODULE, [Socket, SockMod, Shaper, MaxStanzaSize, C2SPid], []).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% Function: start() -> {ok,Pid} | ignore | {error,Error}
|
%% Function: start() -> {ok,Pid} | ignore | {error,Error}
|
||||||
%% Description: Starts the server
|
%% Description: Starts the server
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
start(Socket, SockMod, Shaper) ->
|
start(Socket, SockMod, Shaper) ->
|
||||||
{ok, Pid} = supervisor:start_child(ejabberd_receiver_sup,
|
start(Socket, SockMod, Shaper, infinity).
|
||||||
[Socket, SockMod, Shaper, self()]),
|
|
||||||
|
start(Socket, SockMod, Shaper, MaxStanzaSize) ->
|
||||||
|
{ok, Pid} = supervisor:start_child(
|
||||||
|
ejabberd_receiver_sup,
|
||||||
|
[Socket, SockMod, Shaper, MaxStanzaSize, self()]),
|
||||||
Pid.
|
Pid.
|
||||||
|
|
||||||
change_shaper(Pid, Shaper) ->
|
change_shaper(Pid, Shaper) ->
|
||||||
@ -83,8 +90,8 @@ close(Pid) ->
|
|||||||
%% {stop, Reason}
|
%% {stop, Reason}
|
||||||
%% Description: Initiates the server
|
%% Description: Initiates the server
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
init([Socket, SockMod, Shaper, C2SPid]) ->
|
init([Socket, SockMod, Shaper, MaxStanzaSize, C2SPid]) ->
|
||||||
XMLStreamState = xml_stream:new(C2SPid),
|
XMLStreamState = xml_stream:new(C2SPid, MaxStanzaSize),
|
||||||
ShaperState = shaper:new(Shaper),
|
ShaperState = shaper:new(Shaper),
|
||||||
Timeout = case SockMod of
|
Timeout = case SockMod of
|
||||||
ssl ->
|
ssl ->
|
||||||
@ -96,6 +103,7 @@ init([Socket, SockMod, Shaper, C2SPid]) ->
|
|||||||
sock_mod = SockMod,
|
sock_mod = SockMod,
|
||||||
shaper_state = ShaperState,
|
shaper_state = ShaperState,
|
||||||
c2s_pid = C2SPid,
|
c2s_pid = C2SPid,
|
||||||
|
max_stanza_size = MaxStanzaSize,
|
||||||
xml_stream_state = XMLStreamState,
|
xml_stream_state = XMLStreamState,
|
||||||
timeout = Timeout}}.
|
timeout = Timeout}}.
|
||||||
|
|
||||||
@ -110,9 +118,10 @@ init([Socket, SockMod, Shaper, C2SPid]) ->
|
|||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
handle_call({starttls, TLSSocket}, _From,
|
handle_call({starttls, TLSSocket}, _From,
|
||||||
#state{xml_stream_state = XMLStreamState,
|
#state{xml_stream_state = XMLStreamState,
|
||||||
c2s_pid = C2SPid} = State) ->
|
c2s_pid = C2SPid,
|
||||||
|
max_stanza_size = MaxStanzaSize} = State) ->
|
||||||
xml_stream:close(XMLStreamState),
|
xml_stream:close(XMLStreamState),
|
||||||
NewXMLStreamState = xml_stream:new(C2SPid),
|
NewXMLStreamState = xml_stream:new(C2SPid, MaxStanzaSize),
|
||||||
NewState = State#state{socket = TLSSocket,
|
NewState = State#state{socket = TLSSocket,
|
||||||
sock_mod = tls,
|
sock_mod = tls,
|
||||||
xml_stream_state = NewXMLStreamState},
|
xml_stream_state = NewXMLStreamState},
|
||||||
@ -124,9 +133,10 @@ handle_call({starttls, TLSSocket}, _From,
|
|||||||
end;
|
end;
|
||||||
handle_call({compress, ZlibSocket}, _From,
|
handle_call({compress, ZlibSocket}, _From,
|
||||||
#state{xml_stream_state = XMLStreamState,
|
#state{xml_stream_state = XMLStreamState,
|
||||||
c2s_pid = C2SPid} = State) ->
|
c2s_pid = C2SPid,
|
||||||
|
max_stanza_size = MaxStanzaSize} = State) ->
|
||||||
xml_stream:close(XMLStreamState),
|
xml_stream:close(XMLStreamState),
|
||||||
NewXMLStreamState = xml_stream:new(C2SPid),
|
NewXMLStreamState = xml_stream:new(C2SPid, MaxStanzaSize),
|
||||||
NewState = State#state{socket = ZlibSocket,
|
NewState = State#state{socket = ZlibSocket,
|
||||||
sock_mod = ejabberd_zlib,
|
sock_mod = ejabberd_zlib,
|
||||||
xml_stream_state = NewXMLStreamState},
|
xml_stream_state = NewXMLStreamState},
|
||||||
@ -138,9 +148,10 @@ handle_call({compress, ZlibSocket}, _From,
|
|||||||
end;
|
end;
|
||||||
handle_call(reset_stream, _From,
|
handle_call(reset_stream, _From,
|
||||||
#state{xml_stream_state = XMLStreamState,
|
#state{xml_stream_state = XMLStreamState,
|
||||||
c2s_pid = C2SPid} = State) ->
|
c2s_pid = C2SPid,
|
||||||
|
max_stanza_size = MaxStanzaSize} = State) ->
|
||||||
xml_stream:close(XMLStreamState),
|
xml_stream:close(XMLStreamState),
|
||||||
NewXMLStreamState = xml_stream:new(C2SPid),
|
NewXMLStreamState = xml_stream:new(C2SPid, MaxStanzaSize),
|
||||||
Reply = ok,
|
Reply = ok,
|
||||||
{reply, Reply, State#state{xml_stream_state = NewXMLStreamState}};
|
{reply, Reply, State#state{xml_stream_state = NewXMLStreamState}};
|
||||||
handle_call(become_controller, _From, State) ->
|
handle_call(become_controller, _From, State) ->
|
||||||
|
@ -104,11 +104,17 @@ become_controller(Pid) ->
|
|||||||
%%----------------------------------------------------------------------
|
%%----------------------------------------------------------------------
|
||||||
init([{SockMod, Socket}, Opts]) ->
|
init([{SockMod, Socket}, Opts]) ->
|
||||||
?INFO_MSG("started: ~p", [{SockMod, Socket}]),
|
?INFO_MSG("started: ~p", [{SockMod, Socket}]),
|
||||||
ReceiverPid = ejabberd_receiver:start(Socket, SockMod, none),
|
|
||||||
Shaper = case lists:keysearch(shaper, 1, Opts) of
|
Shaper = case lists:keysearch(shaper, 1, Opts) of
|
||||||
{value, {_, S}} -> S;
|
{value, {_, S}} -> S;
|
||||||
_ -> none
|
_ -> none
|
||||||
end,
|
end,
|
||||||
|
MaxStanzaSize =
|
||||||
|
case lists:keysearch(max_stanza_size, 1, Opts) of
|
||||||
|
{value, {_, Size}} -> Size;
|
||||||
|
_ -> infinity
|
||||||
|
end,
|
||||||
|
ReceiverPid = ejabberd_receiver:start(
|
||||||
|
Socket, SockMod, none, MaxStanzaSize),
|
||||||
StartTLS = case ejabberd_config:get_local_option(s2s_use_starttls) of
|
StartTLS = case ejabberd_config:get_local_option(s2s_use_starttls) of
|
||||||
undefined ->
|
undefined ->
|
||||||
false;
|
false;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
% $Id$
|
% $Id$
|
||||||
% Brazilian Portuguese translation
|
% Brazilian Portuguese translation
|
||||||
% Author: Victor Hugo dos Santos
|
% Authors: Victor Hugo dos Santos, Lucius Curado
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -73,9 +73,9 @@
|
|||||||
{"Birthday","Aniversário"}.
|
{"Birthday","Aniversário"}.
|
||||||
{"City", "Cidade"}.
|
{"City", "Cidade"}.
|
||||||
{"Country","País"}.
|
{"Country","País"}.
|
||||||
{"ejabberd vCard module\nCopyright (c) 2003-2005 Alexey Shchepin", "Módulo vCard para ejabberd\nCopyright (c) 2002-2005 Alexey Shchepin"}.
|
{"ejabberd vCard module\nCopyright (c) 2003-2006 Alexey Shchepin", "Módulo vCard para ejabberd\nCopyright (c) 2002-2006 Alexey Shchepin"}.
|
||||||
{"email", "e-mail"}.
|
{"email", "e-mail"}.
|
||||||
{"Erlang Jabber Server\nCopyright (c) 2002-2005 Alexey Shchepin", "Servidor Jabber em Erlang\nCopyright (c) 2002-2005 Alexey Shchepin"}.
|
{"Erlang Jabber Server\nCopyright (c) 2002-2006 Alexey Shchepin", "Servidor Jabber em Erlang\nCopyright (c) 2002-2006 Alexey Shchepin"}.
|
||||||
{"Family Name", "Nome de família"}.
|
{"Family Name", "Nome de família"}.
|
||||||
{"Fill in fields to search for any matching Jabber User", "Preencha os campos para procurar usuários Jabber coincidentes"}.
|
{"Fill in fields to search for any matching Jabber User", "Preencha os campos para procurar usuários Jabber coincidentes"}.
|
||||||
{"Fill in the form to search for any matching Jabber User (Add * to the end of field to match substring)", "Preencha o formulário para buscar usuários Jabber. Agrega * ao final de um campo para buscar sub-palavras."}.
|
{"Fill in the form to search for any matching Jabber User (Add * to the end of field to match substring)", "Preencha o formulário para buscar usuários Jabber. Agrega * ao final de um campo para buscar sub-palavras."}.
|
||||||
@ -94,7 +94,7 @@
|
|||||||
|
|
||||||
{[], " "}.
|
{[], " "}.
|
||||||
{"Deliver payloads with event notifications", "Enviar payloads junto com as notificações de eventos"}.
|
{"Deliver payloads with event notifications", "Enviar payloads junto com as notificações de eventos"}.
|
||||||
{"ejabberd pub/sub module\nCopyright (c) 2003-2005 Alexey Shchepin", "Módulo Pub/Sub para ejabberd\nCopyright (c) 2002-2005 Alexey Shchepin"}.
|
{"ejabberd pub/sub module\nCopyright (c) 2003-2006 Alexey Shchepin", "Módulo Pub/Sub para ejabberd\nCopyright (c) 2002-2006 Alexey Shchepin"}.
|
||||||
{"Max # of items to persist", "Máximo # de elementos que persistem"}.
|
{"Max # of items to persist", "Máximo # de elementos que persistem"}.
|
||||||
{"Max payload size in bytes", "Máximo tamanho do payload em bytes"}.
|
{"Max payload size in bytes", "Máximo tamanho do payload em bytes"}.
|
||||||
{"Node Creator", "Criador do nodo"}.
|
{"Node Creator", "Criador do nodo"}.
|
||||||
@ -118,7 +118,7 @@
|
|||||||
{"Enable logging?", "Salvar históricos?"}.
|
{"Enable logging?", "Salvar históricos?"}.
|
||||||
{"Access denied by service policy", "Aceso denegado por la política do serviço"}.
|
{"Access denied by service policy", "Aceso denegado por la política do serviço"}.
|
||||||
{"Conference room does not exist", "La sala de conferencias não existe"}.
|
{"Conference room does not exist", "La sala de conferencias não existe"}.
|
||||||
{"ejabberd MUC module\nCopyright (c) 2003-2005 Alexey Shchepin", "Módulo de MUC para ejabbed\nCopyright (c) 2002-2005 Alexey Shchepin"}.
|
{"ejabberd MUC module\nCopyright (c) 2003-2006 Alexey Shchepin", "Módulo de MUC para ejabbed\nCopyright (c) 2002-2006 Alexey Shchepin"}.
|
||||||
{"Enter nickname you want to register", "Introduza o apelido que quer registrar"}.
|
{"Enter nickname you want to register", "Introduza o apelido que quer registrar"}.
|
||||||
{"Incorrect password", "Senha incorreta"}.
|
{"Incorrect password", "Senha incorreta"}.
|
||||||
{"Make room anonymous?", "Tornar a sala anônima?"}.
|
{"Make room anonymous?", "Tornar a sala anônima?"}.
|
||||||
@ -181,7 +181,7 @@
|
|||||||
|
|
||||||
|
|
||||||
% mod_irc/mod_irc.erl
|
% mod_irc/mod_irc.erl
|
||||||
{"ejabberd IRC module\nCopyright (c) 2003-2005 Alexey Shchepin", "Módulo de IRC para ejabberd\nCopyright (c) 2002-2005 Alexey Shchepin"}.
|
{"ejabberd IRC module\nCopyright (c) 2003-2006 Alexey Shchepin", "Módulo de IRC para ejabberd\nCopyright (c) 2002-2006 Alexey Shchepin"}.
|
||||||
{"Encodings", "Codificação"}.
|
{"Encodings", "Codificação"}.
|
||||||
{"Enter username and encodings you wish to use for connecting to IRC servers", "Introduza o nome de usuário e codificações de caracteres que quer usar ao conectar-se aos servidores de IRC"}.
|
{"Enter username and encodings you wish to use for connecting to IRC servers", "Introduza o nome de usuário e codificações de caracteres que quer usar ao conectar-se aos servidores de IRC"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", \"iso8859-1\"}].", "Exemplo: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", \"iso8859-1\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", \"iso8859-1\"}].", "Exemplo: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", \"iso8859-1\"}]."}.
|
||||||
@ -209,7 +209,7 @@
|
|||||||
{"ejabberd access control lists configuration", "Configuração das Listas de Controle de Acesso do ejabberd"}.
|
{"ejabberd access control lists configuration", "Configuração das Listas de Controle de Acesso do ejabberd"}.
|
||||||
{"ejabberd access rules configuration", "Configuração de las Regras de Aceso de ejabberd"}.
|
{"ejabberd access rules configuration", "Configuração de las Regras de Aceso de ejabberd"}.
|
||||||
{"ejabberd administration", "Administração de ejabberd"}.
|
{"ejabberd administration", "Administração de ejabberd"}.
|
||||||
{"ejabberd (c) 2002-2005 Alexey Shchepin, 2004-2005 Process One", "ejabberd (c) 2002-2005 Alexey Shchepin, 2004-2005 Process One"}.
|
{"ejabberd (c) 2002-2006 Alexey Shchepin, 2004-2006 Process One", "ejabberd (c) 2002-2006 Alexey Shchepin, 2004-2006 Process One"}.
|
||||||
{"ejabberd stats", "Estatísticas de ejabberd"}.
|
{"ejabberd stats", "Estatísticas de ejabberd"}.
|
||||||
{"ejabberd users", "Usuários do ejabberd"}.
|
{"ejabberd users", "Usuários do ejabberd"}.
|
||||||
{"ejabberd virtual hosts", "Maquinas virtuais de ejabberd"}.
|
{"ejabberd virtual hosts", "Maquinas virtuais de ejabberd"}.
|
||||||
@ -292,6 +292,150 @@
|
|||||||
{"JID", "JID"}.
|
{"JID", "JID"}.
|
||||||
|
|
||||||
|
|
||||||
|
% mod_adhoc.erl
|
||||||
|
{"Commands", "Comandos"}.
|
||||||
|
{"Ping", "Ping"}.
|
||||||
|
{"Pong", "Pong"}.
|
||||||
|
|
||||||
|
% mod_vcard_odbc.erl
|
||||||
|
{"Email", "e-mail"}.
|
||||||
|
{"Search Results for ", "Resultados de pesquisa para"}.
|
||||||
|
{"Jabber ID", "ID Jabber"}.
|
||||||
|
|
||||||
|
% ejabberd_c2s.erl
|
||||||
|
{"Replaced by new connection", "Substituído por nova conexão"}.
|
||||||
|
|
||||||
|
% mod_announce.erl
|
||||||
|
{"Really delete message of the day?", "Deletar realmente a mensagem do dia?"}.
|
||||||
|
{"Subject", "Assunto"}.
|
||||||
|
{"Message body", "Corpo da mensagem"}.
|
||||||
|
{"No body provided for announce message", "Nenhum corpo de texto fornecido para anunciar mensagem"}.
|
||||||
|
{"Announcements", "Anúncios"}.
|
||||||
|
{"Send announcement to all users", "Enviar anúncio a todos os usuários"}.
|
||||||
|
{"Send announcement to all online users", "Enviar anúncio a todos os usuárions online"}.
|
||||||
|
{"Send announcement to all online users on all hosts", "Enviar anúncio a todos usuários online em todas as máquinas"}.
|
||||||
|
{"Set message of the day and send to online users", "Definir mensagem do dia e enviar a todos usuários online"}.
|
||||||
|
{"Update message of the day (don't send)", "Atualizar mensagem do dia (não enviar)"}.
|
||||||
|
{"Delete message of the day", "Apagar mensagem do dia"}.
|
||||||
|
|
||||||
|
% mod_configure.erl
|
||||||
|
{"Database", "Base de dados"}.
|
||||||
|
{"Host Name", "Nome da máquina"}.
|
||||||
|
{"Outgoing s2s Connections", "Conexões que partam de s2s"}.
|
||||||
|
{"Import Users From jabberd 1.4 Spool Files", "Importar usuários de arquivos jabberd 1.4"}.
|
||||||
|
{"Database Tables Configuration at ", "Configuração de Tabelas de Base de dados em "}.
|
||||||
|
{"Stop Modules at ", "Parar módulos em "}.
|
||||||
|
{"List of modules to start", "Listas de módulos para inicializar"}.
|
||||||
|
{"Hostname Configuration", "Configuração do Hostname"}.
|
||||||
|
{"Choose host name", "Definir nome da máquina"}.
|
||||||
|
{"Host name", "Nome da máquina"}.
|
||||||
|
|
||||||
|
% mod_pubsub/mod_pubsub.erl
|
||||||
|
|
||||||
|
% web/ejabberd_web_admin.erl
|
||||||
|
{"ejabberd Web Interface", "Interface Web do ejabberd"}.
|
||||||
|
{"Administration", "Administração"}.
|
||||||
|
{"Nodes", "Nós"}.
|
||||||
|
{"(Raw)", "(Intocado)"}.
|
||||||
|
{"Submitted", "Submetido"}.
|
||||||
|
{"Bad format", "Formato incorreto"}.
|
||||||
|
{"Raw", "Intocado"}.
|
||||||
|
{"Users Last Activity", "Ultimas atividades dos usuários"}.
|
||||||
|
{"Node not found", "Nó não encontrado"}.
|
||||||
|
{"Registered Users", "Usuários Registrados"}.
|
||||||
|
{"Offline Messages", "Mensagens offline"}.
|
||||||
|
{"Registered Users:", "Usuários registrados"}.
|
||||||
|
{"Authenticated Users:", "Usuários Autenticados"}.
|
||||||
|
{"Online Users:", "Usuários online"}.
|
||||||
|
{"Outgoing s2s Connections:", "Conexões que partem de s2s"}.
|
||||||
|
{"Outgoing s2s Servers:", "Servidores que partem de s2s"}.
|
||||||
|
{"None", "Nenhum"}.
|
||||||
|
{"Offline Messages:", "Mensagens offline"}.
|
||||||
|
{"~s's Offline Messages Queue", "~s's Fila de Mensagens Offline"}.
|
||||||
|
{"Add Jabber ID", "Adicionar ID jabber"}.
|
||||||
|
{"No Data", "Nenhum dado"}.
|
||||||
|
{"Node ", "Nó"}.
|
||||||
|
{"Listened Ports", "Portas escutadas"}.
|
||||||
|
{"RPC Call Error", "Erro de chamada RPC"}.
|
||||||
|
{"Database Tables at ", "Tabelas de base de dados em"}.
|
||||||
|
{"Backup of ", "Backup de"}.
|
||||||
|
{"Remark that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.", "Observe que tais opções farão backup apenas da base de dados Mnesia. Caso você esteja utilizando o modulo ODBC, você precisará fazer backup de sua base de dados SQL separadamente."}.
|
||||||
|
{"Store binary backup:", "Armazenar backup binário:"}.
|
||||||
|
{"OK", "OK"}.
|
||||||
|
{"Restore binary backup immediately:", "Restaurar backup binário imediatamente"}.
|
||||||
|
{"Restore binary backup after next ejabberd restart (requires less memory):", "Restaurar backup binário após próximo reinicialização do ejabberd (requer menos memória):"}.
|
||||||
|
{"Store plain text backup:", "Armazenar backup plain text"}.
|
||||||
|
{"Restore plain text backup immediately:", "Restaurar backup plain text imediatamente:"}.
|
||||||
|
{"Statistics of ~p", "Estatísticas de ~p"}.
|
||||||
|
{"Uptime:", "Uptime:"}.
|
||||||
|
{"CPU Time:", "Tempo de CPU"}.
|
||||||
|
{"Transactions Commited:", "Transações:"}.
|
||||||
|
{"Transactions Aborted:", "Transações abortadas:"}.
|
||||||
|
{"Transactions Restarted:", "Transações restauradas:"}.
|
||||||
|
{"Transactions Logged:", "Transações de log:"}.
|
||||||
|
{"Update ", "Atualizar"}.
|
||||||
|
{"Update plan", "Plano de Atualização"}.
|
||||||
|
{"Updated modules", "Módulos atualizados"}.
|
||||||
|
{"Update script", "Script de atualização"}.
|
||||||
|
{"Low level update script", "Script de atualização low level"}.
|
||||||
|
{"Script check", "Verificação de Script"}.
|
||||||
|
{"Not Found", "Não encontrado"}.
|
||||||
|
{"Shared Roster Groups", "Grupos Shared Roster"}.
|
||||||
|
{"Description:", "Descrição:"}.
|
||||||
|
{"Displayed Groups:", "Grupos Indicados"}.
|
||||||
|
|
||||||
|
% mod_irc/mod_irc.erl
|
||||||
|
|
||||||
|
% mod_muc/mod_muc_log.erl
|
||||||
|
{"Chatroom configuration modified", "Configuração da sala de bate-papo modificada"}.
|
||||||
|
{"joins the room", "Entrar na sala"}.
|
||||||
|
{"leaves the room", "Sair da sala"}.
|
||||||
|
{"has been kicked", "foi removido"}.
|
||||||
|
{"has been banned", "foi banido"}.
|
||||||
|
{"is now known as", ""}.
|
||||||
|
{"Monday", "Segunda"}.
|
||||||
|
{"Tuesday", "Terça"}.
|
||||||
|
{"Wednesday", "Quarta"}.
|
||||||
|
{"Thursday", "Quinta"}.
|
||||||
|
{"Friday", "Sexta"}.
|
||||||
|
{"Saturday", "Sábado"}.
|
||||||
|
{"Sunday", "Domingo"}.
|
||||||
|
{"January", "Janeiro"}.
|
||||||
|
{"February", "Fevereiro"}.
|
||||||
|
{"March", "Março"}.
|
||||||
|
{"April", "Abril"}.
|
||||||
|
{"May", "Maio"}.
|
||||||
|
{"June", "Junho"}.
|
||||||
|
{"July", "Julho"}.
|
||||||
|
{"August", "Agosto"}.
|
||||||
|
{"September", "Setembro"}.
|
||||||
|
{"October", "Outubro"}.
|
||||||
|
{"November", "Novembro"}.
|
||||||
|
{"December", "Dezembro"}.
|
||||||
|
{"Room Configuration", "Configuração de salas"}.
|
||||||
|
|
||||||
|
% mod_muc/mod_muc.erl
|
||||||
|
{"Only service administrators are allowed to send service messages", "Apenas administradores possuem permissão para enviar mensagens de serviço"}.
|
||||||
|
{"You must fill in field \"Nickname\" in the form", "Você deve completar o campo \"Apelido\" no formulário"}.
|
||||||
|
|
||||||
|
% mod_muc/mod_muc_room.erl
|
||||||
|
{"This room is not anonymous", "Essa sala não é anônima"}.
|
||||||
|
{"Make room persistent", "Tornar sala persistente"}.
|
||||||
|
{"Make room public searchable", "Tornar sala pública possível de ser encontrada"}.
|
||||||
|
{"Make participants list public", "Tornar pública a lista de participantes"}.
|
||||||
|
{"Make room password protected", "Tornar protegida a senha da sala"}.
|
||||||
|
{"Make room semianonymous", "Tornar sala semi-anônima"}.
|
||||||
|
{"Make room members-only", "Tornar sala apenas para membros"}.
|
||||||
|
{"Make room moderated", "Tornar a sala moderada"}.
|
||||||
|
{"Default users as participants", "Usuários padrões como participantes"}.
|
||||||
|
{"Allow users to change subject", "Permitir a usuários modificar o assunto"}.
|
||||||
|
{"Allow users to send private messages", "Permitir a usuários enviarem mensagens privadas"}.
|
||||||
|
{"Allow users to query other users", "Permitir a usuários pesquisar informações sobre os demais"}.
|
||||||
|
{"Allow users to send invites", "Permitir a usuários envio de convites"}.
|
||||||
|
{"Enable logging", "Permitir criação de logs"}.
|
||||||
|
{"Description", "Descrição"}.
|
||||||
|
{"Number of occupants", "Número de participantes"}.
|
||||||
|
|
||||||
% Local Variables:
|
% Local Variables:
|
||||||
% mode: erlang
|
% mode: erlang
|
||||||
% End:
|
% End:
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
-vsn('$Revision$ ').
|
-vsn('$Revision$ ').
|
||||||
|
|
||||||
-export([new/1,
|
-export([new/1,
|
||||||
|
new/2,
|
||||||
parse/2,
|
parse/2,
|
||||||
close/1,
|
close/1,
|
||||||
parse_element/1]).
|
parse_element/1]).
|
||||||
@ -23,7 +24,7 @@
|
|||||||
-define(PARSE_COMMAND, 0).
|
-define(PARSE_COMMAND, 0).
|
||||||
-define(PARSE_FINAL_COMMAND, 1).
|
-define(PARSE_FINAL_COMMAND, 1).
|
||||||
|
|
||||||
-record(xml_stream_state, {callback_pid, port, stack}).
|
-record(xml_stream_state, {callback_pid, port, stack, size, maxsize}).
|
||||||
|
|
||||||
process_data(CallbackPid, Stack, Data) ->
|
process_data(CallbackPid, Stack, Data) ->
|
||||||
case Data of
|
case Data of
|
||||||
@ -68,23 +69,45 @@ process_data(CallbackPid, Stack, Data) ->
|
|||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
new(CallbackPid) ->
|
new(CallbackPid) ->
|
||||||
|
new(CallbackPid, infinity).
|
||||||
|
|
||||||
|
new(CallbackPid, MaxSize) ->
|
||||||
Port = open_port({spawn, expat_erl}, [binary]),
|
Port = open_port({spawn, expat_erl}, [binary]),
|
||||||
#xml_stream_state{callback_pid = CallbackPid,
|
#xml_stream_state{callback_pid = CallbackPid,
|
||||||
port = Port,
|
port = Port,
|
||||||
stack = []}.
|
stack = [],
|
||||||
|
size = 0,
|
||||||
|
maxsize = MaxSize}.
|
||||||
|
|
||||||
|
|
||||||
parse(#xml_stream_state{callback_pid = CallbackPid,
|
parse(#xml_stream_state{callback_pid = CallbackPid,
|
||||||
port = Port,
|
port = Port,
|
||||||
stack = Stack} = State, Str) ->
|
stack = Stack,
|
||||||
|
size = Size,
|
||||||
|
maxsize = MaxSize} = State, Str) ->
|
||||||
|
StrSize = if
|
||||||
|
is_list(Str) -> length(Str);
|
||||||
|
is_binary(Str) -> size(Str)
|
||||||
|
end,
|
||||||
Res = port_control(Port, ?PARSE_COMMAND, Str),
|
Res = port_control(Port, ?PARSE_COMMAND, Str),
|
||||||
NewStack = lists:foldl(
|
{NewStack, NewSize} =
|
||||||
fun(Data, St) ->
|
lists:foldl(
|
||||||
process_data(CallbackPid, St, Data)
|
fun(Data, {St, Sz}) ->
|
||||||
end, Stack, binary_to_term(Res)),
|
NewSt = process_data(CallbackPid, St, Data),
|
||||||
State#xml_stream_state{stack = NewStack}.
|
case NewSt of
|
||||||
|
[_] -> {NewSt, 0};
|
||||||
|
_ -> {NewSt, Sz}
|
||||||
|
end
|
||||||
|
end, {Stack, Size + StrSize}, binary_to_term(Res)),
|
||||||
|
if
|
||||||
|
NewSize > MaxSize ->
|
||||||
|
catch gen_fsm:send_event(CallbackPid,
|
||||||
|
{xmlstreamerror, "XML stanza is too big"});
|
||||||
|
true ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
State#xml_stream_state{stack = NewStack, size = NewSize}.
|
||||||
|
|
||||||
close(#xml_stream_state{port = Port}) ->
|
close(#xml_stream_state{port = Port}) ->
|
||||||
port_close(Port).
|
port_close(Port).
|
||||||
|
Loading…
Reference in New Issue
Block a user