aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_listener.erl
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2003-02-06 19:09:22 +0000
committerAlexey Shchepin <alexey@process-one.net>2003-02-06 19:09:22 +0000
commita8a8e3b5a6cb872bbcf95b271515fc2aae9085d4 (patch)
treec4ee4a13df74090c1bae59014ef32d397fdc1bab /src/ejabberd_listener.erl
parent*** empty log message *** (diff)
*** empty log message ***
SVN Revision: 62
Diffstat (limited to 'src/ejabberd_listener.erl')
-rw-r--r--src/ejabberd_listener.erl46
1 files changed, 36 insertions, 10 deletions
diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl
index 3ed030c7b..004ddba38 100644
--- a/src/ejabberd_listener.erl
+++ b/src/ejabberd_listener.erl
@@ -10,7 +10,10 @@
-author('alexey@sevcom.net').
-vsn('$Revision$ ').
--export([start_link/0, init/1, start/4, init/4]).
+-export([start_link/0, init/1, start/4,
+ init/4,
+ init_ssl/5
+ ]).
start_link() ->
supervisor:start_link({local, ejabberd_listeners}, ?MODULE, []).
@@ -25,7 +28,7 @@ init(_) ->
lists:map(
fun({Port, Module, Fun, Opts}) ->
{Port,
- {?MODULE, start, [Port, Module, Fun, [Opts]]},
+ {?MODULE, start, [Port, Module, Fun, Opts]},
permanent,
brutal_kill,
worker,
@@ -34,22 +37,45 @@ init(_) ->
end.
-start(Port, Module, Fun, Args) ->
- {ok, spawn_link(?MODULE, init, [Port, Module, Fun, Args])}.
+start(Port, Module, Fun, Opts) ->
+ case lists:keysearch(ssl, 1, Opts) of
+ {value, {ssl, SSLOpts}} ->
+ {ok, spawn_link(?MODULE, init_ssl,
+ [Port, Module, Fun, Opts, SSLOpts])};
+ _ ->
+ {ok, spawn_link(?MODULE, init, [Port, Module, Fun, Opts])}
+ end.
-init(Port, Module, Fun, Args) ->
+init(Port, Module, Fun, Opts) ->
{ok, ListenSocket} = gen_tcp:listen(Port, [binary,
{packet, 0},
{active, false},
{reuseaddr, true}]),
- accept(ListenSocket, Module, Fun, Args).
+ accept(ListenSocket, Module, Fun, Opts).
-accept(ListenSocket, Module, Fun, Args) ->
+accept(ListenSocket, Module, Fun, Opts) ->
case gen_tcp:accept(ListenSocket) of
{ok,Socket} ->
- apply(Module, Fun, [Socket] ++ Args),
- %ejabberd_c2s:start(Socket),
- accept(ListenSocket, Module, Fun, Args)
+ apply(Module, Fun, [{gen_tcp, Socket}, Opts]),
+ accept(ListenSocket, Module, Fun, Opts)
+ end.
+
+
+init_ssl(Port, Module, Fun, Opts, SSLOpts) ->
+ {ok, ListenSocket} = ssl:listen(Port, [binary,
+ {packet, 0},
+ {active, false},
+ {nodelay, true},
+ {backlog, 0},
+ {cachetimout, 0} |
+ SSLOpts]),
+ accept_ssl(ListenSocket, Module, Fun, Opts).
+
+accept_ssl(ListenSocket, Module, Fun, Opts) ->
+ case ssl:accept(ListenSocket) of
+ {ok,Socket} ->
+ apply(Module, Fun, [{ssl, Socket}, Opts]),
+ accept_ssl(ListenSocket, Module, Fun, Opts)
end.