aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2003-10-12 18:21:16 +0000
committerAlexey Shchepin <alexey@process-one.net>2003-10-12 18:21:16 +0000
commit5c0ba6e337a9166be985101eae83153e96251d7d (patch)
tree1329509ed87bc31f3bee7ee45c3c7a0ebbda0e69
parent* doc/guide.tex: Updated (diff)
* 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 SVN Revision: 149
-rw-r--r--ChangeLog12
-rw-r--r--doc/guide.html44
-rw-r--r--doc/guide.tex48
-rw-r--r--src/ejabberd.cfg.example2
-rw-r--r--src/ejabberd_config.erl8
-rw-r--r--src/ejabberd_s2s_out.erl27
-rw-r--r--src/jlib.erl11
7 files changed, 104 insertions, 48 deletions
diff --git a/ChangeLog b/ChangeLog
index 610b4307e..2162c330c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>&nbsp;&nbsp;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.&nbsp;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, &lt;access rule&gt;}</TT></B><DD> This option defines access of users
+ <CODE><B>{access, &lt;access rule&gt;}</B></CODE><DD> This option defines access of users
to this C2S port. Default value is ``<TT>all</TT>''.
- <DT><B><TT>{shaper, &lt;access rule&gt;}</TT></B><DD> This option is like previous, but
+ <DT><CODE><B>{shaper, &lt;access rule&gt;}</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.&nbsp;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([], "") ->