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: [PATCH] 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(+) diff --git a/src/cowboy_ssl_transport.erl b/src/cowboy_ssl_transport.erl index cbe1ac14..bafa99b0 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) ->