diff --git a/ChangeLog b/ChangeLog index 610b4307e..2162c330c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2003-10-12 Alexey Shchepin + + * 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 * 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.

The main features of ejabberd is: Currently three modules are implemented:
-ejabberd_c2s
This module serves C2S connections.
+ejabberd_c2s
This module serves C2S connections.

The following options are defined:
- {access, <access rule>}
This option defines access of users + {access, <access rule>}
This option defines access of users to this C2S port. Default value is ``all''. -
{shaper, <access rule>}
This option is like previous, but +
{shaper, <access rule>}
This option is like previous, but use shapers instead of ``allow'' and ``deny''. Default value is ``none''. +
{ssl, SSLOpts}
This option defines that traffic on this port + will be encrypted using SSL. SSL options are the same as described by + ``erl -man ssl'' command
-
ejabberd_s2s_in
This module serves incoming S2S connections. -
ejabberd_service
This module serves connections from Jabber +
ejabberd_s2s_in
This module serves incoming S2S connections. +
ejabberd_service
This module serves connections from Jabber services (i. e. that use the jabber:component:accept namespace).
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, \}}] This option defines access of users + \item[\verb|{access, }|] This option defines access of users to this C2S port. Default value is ``\texttt{all}''. - \item[\texttt{\{shaper, \}}] This option is like previous, but + \item[\verb|{shaper, }|] 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([], "") ->