From 0720d6b9e3c8655b6222a84a2f37fcab04b3dd94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Tue, 24 May 2011 20:52:19 +0200 Subject: Automatically start crypto, public_key and ssl if needed. Following mochiweb and misultin's example here even though I'm not too thrilled about starting them and not stopping but it's optional and the application's author can start/stop them as normal anyway. --- src/cowboy_ssl_transport.erl | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/cowboy_ssl_transport.erl') diff --git a/src/cowboy_ssl_transport.erl b/src/cowboy_ssl_transport.erl index cbe1ac1..bafa99b 100644 --- a/src/cowboy_ssl_transport.erl +++ b/src/cowboy_ssl_transport.erl @@ -30,6 +30,7 @@ messages() -> {ssl, ssl_closed, ssl_error}. | {keyfile, KeyPath::string()} | {password, Password::string()}]) -> {ok, LSocket::ssl:sslsocket()} | {error, Reason::atom()}. listen(Opts) -> + require([crypto, public_key, ssl]), {port, Port} = lists:keyfind(port, 1, Opts), Backlog = proplists:get_value(backlog, Opts, 1024), {certfile, CertFile} = lists:keyfind(certfile, 1, Opts), @@ -80,6 +81,16 @@ close(Socket) -> %% Internal. +-spec require(Apps::list(module())) -> ok. +require([]) -> + ok; +require([App|Tail]) -> + case application:start(App) of + ok -> ok; + {error, {already_started, App}} -> ok + end, + require(Tail). + -spec ssl_accept(CSocket::ssl:sslsocket(), Timeout::timeout()) -> {ok, Socket::ssl:sslsocket()} | {error, Reason::closed | timeout | atom()}. ssl_accept(CSocket, Timeout) -> -- cgit v1.2.3