Просмотр исходного кода

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.
Loïc Hoguin 14 лет назад
Родитель
Сommit
0720d6b9e3
1 измененных файлов с 11 добавлено и 0 удалено
  1. 11 0
      src/cowboy_ssl_transport.erl

+ 11 - 0
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) ->