diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | doc/guide.html | 44 | ||||
-rw-r--r-- | doc/guide.tex | 48 | ||||
-rw-r--r-- | src/ejabberd.cfg.example | 2 | ||||
-rw-r--r-- | src/ejabberd_config.erl | 8 | ||||
-rw-r--r-- | src/ejabberd_s2s_out.erl | 27 | ||||
-rw-r--r-- | src/jlib.erl | 11 |
7 files changed, 104 insertions, 48 deletions
@@ -1,3 +1,15 @@ +2003-10-12 Alexey Shchepin <alexey@sevcom.net> + + * doc/guide.tex: Updated + + * src/ejabberd_s2s_out.erl: Added support for IPv6 and + "_jabber-server.tcp" lookups + + * src/jlib.erl (string_to_jid1): Bugfix + + * src/ejabberd_config.erl: Now possible to specify path to config + file in command line + 2003-10-11 Alexey Shchepin <alexey@sevcom.net> * doc/guide.tex: Updated diff --git a/doc/guide.html b/doc/guide.html index 1cd15fece..9bc46851f 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -113,8 +113,8 @@ server. It is writen mostly in Erlang.<BR> <BR> The main features of <TT>ejabberd</TT> is: <UL><LI> -Works on most of popular platforms: *nix (tested on Linux and FreeBSD) - and Win32 +Works on most of popular platforms: *nix (tested on Linux, FreeBSD and + NetBSD) and Win32 <LI>Distributed: You can run <TT>ejabberd</TT> on a cluster of machines and all of them will serve one Jabber domain. <LI>Fault-tolerance: You can setup an <TT>ejabberd</TT> cluster so that all the @@ -247,16 +247,31 @@ Windows distribution of Erlang emulator.<BR> <H3><A NAME="htoc10">2.4</A> Starting</H3><!--SEC END --> <A NAME="sec:starting"></A> -... To use more than 1024 connections, you will need to set environment -variable <TT>ERL_MAX_PORTS</TT>: +To start <TT>ejabberd</TT>, use the following command: +<PRE> +erl -name ejabberd -s ejabberd +</PRE>or +<PRE> +erl -sname ejabberd -s ejabberd +</PRE>In second case Erlang node will be identified using only first part of host +name, i. e. other Erlang nodes not inside this domain can't contact this node.<BR> +<BR> +To specify path to config file, use command like this: +<PRE> +erl -sname ejabberd -s ejabberd -ejabberd config \"/etc/ejabberd/ejabberd.cfg\" +</PRE> +To use more than 1024 connections, you will need to set environment variable +<CODE>ERL_MAX_PORTS</CODE>: <PRE> export ERL_MAX_PORTS=32000 </PRE>Note that with this value <TT>ejabberd</TT> will use more memory (approximately 6MB -more)... +more).<BR> +<BR> +To reduce memory usage, you can set environment variable +<CODE>ERL_FULLSWEEP_AFTER</CODE>: <PRE> -erl -name ejabberd -s ejabberd -</PRE> -TBD<BR> +export ERL_FULLSWEEP_AFTER=0 +</PRE>But in this case <TT>ejabberd</TT> can start to work slower.<BR> <BR> <!--TOC section Configuration--> @@ -415,18 +430,21 @@ Port number; </UL> Currently three modules are implemented: <DL COMPACT=compact><DT> -<B><TT>ejabberd_c2s</TT></B><DD> This module serves C2S connections.<BR> +<CODE><B>ejabberd_c2s</B></CODE><DD> This module serves C2S connections.<BR> <BR> The following options are defined: <DL COMPACT=compact><DT> - <B><TT>{access, <access rule>}</TT></B><DD> This option defines access of users + <CODE><B>{access, <access rule>}</B></CODE><DD> This option defines access of users to this C2S port. Default value is ``<TT>all</TT>''. - <DT><B><TT>{shaper, <access rule>}</TT></B><DD> This option is like previous, but + <DT><CODE><B>{shaper, <access rule>}</B></CODE><DD> This option is like previous, but use shapers instead of ``<TT>allow</TT>'' and ``<TT>deny</TT>''. Default value is ``<TT>none</TT>''. + <DT><CODE><B>{ssl, SSLOpts}</B></CODE><DD> This option defines that traffic on this port + will be encrypted using SSL. SSL options are the same as described by + ``<CODE>erl -man ssl</CODE>'' command </DL> -<DT><B><TT>ejabberd_s2s_in</TT></B><DD> This module serves incoming S2S connections. -<DT><B><TT>ejabberd_service</TT></B><DD> This module serves connections from Jabber +<DT><CODE><B>ejabberd_s2s_in</B></CODE><DD> This module serves incoming S2S connections. +<DT><CODE><B>ejabberd_service</B></CODE><DD> This module serves connections from Jabber services (i. e. that use the <TT>jabber:component:accept</TT> namespace). </DL> For example, the following configuration defines that C2S connections are diff --git a/doc/guide.tex b/doc/guide.tex index 53bbdd036..703ee3ee8 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -62,8 +62,8 @@ server. It is writen mostly in Erlang. The main features of \ejabberd{} is: \begin{itemize} -\item Works on most of popular platforms: *nix (tested on Linux and FreeBSD) - and Win32 +\item Works on most of popular platforms: *nix (tested on Linux, FreeBSD and + NetBSD) and Win32 \item Distributed: You can run \ejabberd{} on a cluster of machines and all of them will serve one Jabber domain. \item Fault-tolerance: You can setup an \ejabberd{} cluster so that all the @@ -201,19 +201,40 @@ Windows distribution of Erlang emulator. \subsection{Starting} \label{sec:starting} -\ldots{} To use more than 1024 connections, you will need to set environment -variable \texttt{ERL\_MAX\_PORTS}: +To start \ejabberd{}, use the following command: +\begin{verbatim} +erl -name ejabberd -s ejabberd +\end{verbatim} +or +\begin{verbatim} +erl -sname ejabberd -s ejabberd +\end{verbatim} +In second case Erlang node will be identified using only first part of host +name, i.\,e. other Erlang nodes not inside this domain can't contact this node. + +To specify path to config file, use command like this: +\begin{verbatim} +erl -sname ejabberd -s ejabberd -ejabberd config \"/etc/ejabberd/ejabberd.cfg\" +\end{verbatim} + + +To use more than 1024 connections, you will need to set environment variable +\verb|ERL_MAX_PORTS|: \begin{verbatim} export ERL_MAX_PORTS=32000 \end{verbatim} Note that with this value \ejabberd{} will use more memory (approximately 6MB -more)\ldots{} +more). +To reduce memory usage, you can set environment variable +\verb|ERL_FULLSWEEP_AFTER|: \begin{verbatim} -erl -name ejabberd -s ejabberd +export ERL_FULLSWEEP_AFTER=0 \end{verbatim} +But in this case \ejabberd{} can start to work slower. + + -TBD \section{Configuration} \label{sec:configuration} @@ -395,18 +416,21 @@ runned on them. Each element of list is a tuple with following elements: Currently three modules are implemented: \begin{description} -\item[\texttt{ejabberd\_c2s}] This module serves C2S connections. +\item[\verb|ejabberd_c2s|] This module serves C2S connections. The following options are defined: \begin{description} - \item[\texttt{\{access, <access rule>\}}] This option defines access of users + \item[\verb|{access, <access rule>}|] This option defines access of users to this C2S port. Default value is ``\texttt{all}''. - \item[\texttt{\{shaper, <access rule>\}}] This option is like previous, but + \item[\verb|{shaper, <access rule>}|] This option is like previous, but use shapers instead of ``\texttt{allow}'' and ``\texttt{deny}''. Default value is ``\texttt{none}''. + \item[\verb|{ssl, SSLOpts}|] This option defines that traffic on this port + will be encrypted using SSL. SSL options are the same as described by + ``\verb|erl -man ssl|'' command \end{description} -\item[\texttt{ejabberd\_s2s\_in}] This module serves incoming S2S connections. -\item[\texttt{ejabberd\_service}] This module serves connections from \Jabber{} +\item[\verb|ejabberd_s2s_in|] This module serves incoming S2S connections. +\item[\verb|ejabberd_service|] This module serves connections from \Jabber{} services (i.\,e.\ that use the \texttt{jabber:component:accept} namespace). \end{description} diff --git a/src/ejabberd.cfg.example b/src/ejabberd.cfg.example index 2cc561b65..4474f3b68 100644 --- a/src/ejabberd.cfg.example +++ b/src/ejabberd.cfg.example @@ -14,7 +14,7 @@ % Another examples of ACLs: %{acl, jabberorg, {server, "jabber.org"}}. %{acl, aleksey, {user, "aleksey", "jabber.ru"}}. -%{acl, test, {user_regexp, "^test"}}. +%{acl, test, {user_regexp, "^test"}}. %{acl, test, {user_glob, "test*"}}. diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl index 9afa704dc..6b93c4954 100644 --- a/src/ejabberd_config.erl +++ b/src/ejabberd_config.erl @@ -34,7 +34,11 @@ start() -> {local_content, true}, {attributes, record_info(fields, local_config)}]), mnesia:add_table_copy(local_config, node(), ram_copies), - load_file(?CONFIG_PATH). + Config = case application:get_env(config) of + {ok, Path} -> Path; + undefined -> ?CONFIG_PATH + end, + load_file(Config). load_file(File) -> @@ -43,7 +47,7 @@ load_file(File) -> Res = lists:foldl(fun process_term/2, #state{}, Terms), set_opts(Res); {error, Reason} -> - ?ERROR_MSG("~p", [Reason]), + ?ERROR_MSG("Can't load config file ~p: ~p", [File, Reason]), exit(file:format_error(Reason)) end. diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index 16c76fea8..466f9fd0b 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -107,9 +107,16 @@ init([From, Server, Type]) -> open_socket(init, StateData) -> {Addr, Port} = get_addr_port(StateData#state.server), ?DEBUG("s2s_out: connecting to ~s:~p~n", [Addr, Port]), - case gen_tcp:connect(Addr, - Port, - [binary, {packet, 0}]) of + Res = case gen_tcp:connect(Addr, Port, + [binary, {packet, 0}]) of + {ok, _Socket} = R -> R; + {error, Reason1} -> + ?DEBUG("s2s_out: connect return ~p~n", [Reason1]), + gen_tcp:connect(Addr, Port, + [binary, {packet, 0}, + {tcp_module, inet6_tcp}]) + end, + case Res of {ok, Socket} -> XMLStreamPid = xml_stream:start(self()), send_text(Socket, io_lib:format(?STREAM_HEADER, @@ -120,11 +127,8 @@ open_socket(init, StateData) -> streamid = new_id()}, ?S2STIMEOUT}; {error, Reason} -> - ?DEBUG("s2s_out: connect return ~p~n", [Reason]), - Error = case Reason of - timeout -> ?ERR_REMOTE_SERVER_TIMEOUT; - _ -> ?ERR_REMOTE_SERVER_NOT_FOUND - end, + ?DEBUG("s2s_out: inet6 connect return ~p~n", [Reason]), + Error = ?ERR_REMOTE_SERVER_NOT_FOUND, bounce_messages(Error), {stop, normal, StateData} end. @@ -439,7 +443,12 @@ is_verify_res(_) -> -include_lib("kernel/include/inet.hrl"). get_addr_port(Server) -> - case inet_res:getbyname("_jabber._tcp." ++ Server, srv) of + Res = case inet_res:getbyname("_jabber-server._tcp." ++ Server, srv) of + {error, _Reason} -> + inet_res:getbyname("_jabber._tcp." ++ Server, srv); + {ok, _HEnt} = R -> R + end, + case Res of {error, Reason} -> ?DEBUG("srv lookup of '~s' failed: ~p~n", [Server, Reason]), {Server, ejabberd_config:get_local_option(outgoing_s2s_port)}; diff --git a/src/jlib.erl b/src/jlib.erl index 839d6739c..f8b4062e1 100644 --- a/src/jlib.erl +++ b/src/jlib.erl @@ -171,17 +171,6 @@ string_to_jid1([$/ | J], "") -> error; string_to_jid1([$/ | J], N) -> string_to_jid3(J, "", lists:reverse(N), ""); -string_to_jid1([C | J], N) - when (C =< 32) or - (C == $") or - (C == $&) or - (C == $') or - (C == $:) or - (C == $<) or - (C == $>) or - (C == 127) - -> - error; string_to_jid1([C | J], N) -> string_to_jid1(J, [C | N]); string_to_jid1([], "") -> |