summaryrefslogtreecommitdiff
path: root/p11p-daemon
diff options
context:
space:
mode:
authorLinus Nordberg <linus@sunet.se>2019-06-24 20:12:59 +0200
committerLinus Nordberg <linus@sunet.se>2019-06-24 20:12:59 +0200
commit1870d9a5f40f488c8c2a3bcbb9aec155f5c570f5 (patch)
tree29115ade7293280b1b7d7499e6009813f403a60a /p11p-daemon
parentd8c774d3665f66aff93be2fd717b032308af4651 (diff)
init servers from config; cleanup on app stop
Diffstat (limited to 'p11p-daemon')
-rw-r--r--p11p-daemon/src/p11p_app.erl9
-rw-r--r--p11p-daemon/src/p11p_server.erl1
-rw-r--r--p11p-daemon/src/p11p_server_sup.erl30
3 files changed, 29 insertions, 11 deletions
diff --git a/p11p-daemon/src/p11p_app.erl b/p11p-daemon/src/p11p_app.erl
index ad48080..56172d2 100644
--- a/p11p-daemon/src/p11p_app.erl
+++ b/p11p-daemon/src/p11p_app.erl
@@ -1,15 +1,20 @@
-module(p11p_app).
-behaviour(application).
--export([start/2, stop/1]).
+-export([start/2, prep_stop/1, stop/1]).
-include("p11p_defs.hrl").
-start(_Type, _Args) -> % Args from application spec (key 'p11p'?).
+start(_Type, _Args) -> % Args from 'mod' in application spec.
lager:notice("p11p version ~s starting", [p11p:version()]),
{ok, Sup} = p11p_sup:start_link(),
{ok, Sup}.
+-spec prep_stop(term()) -> term().
+prep_stop(State) ->
+ p11p_server_sup:cleanup(),
+ State.
+
-spec stop([]) -> ok.
stop(_State) ->
ok.
diff --git a/p11p-daemon/src/p11p_server.erl b/p11p-daemon/src/p11p_server.erl
index c2422dc..faa22be 100644
--- a/p11p-daemon/src/p11p_server.erl
+++ b/p11p-daemon/src/p11p_server.erl
@@ -75,7 +75,6 @@ handle_info(Info, State) ->
terminate(_Reason, #state{sockpath = _SocketPath, socket = Socket}) ->
lager:debug("~p: ~p: terminated", [self(), Socket]),
gen_tcp:close(Socket),
- %%FIXME: clean up socket file where? file:delete(SocketPath),
ok.
code_change(_OldVersion, State, _Extra) ->
diff --git a/p11p-daemon/src/p11p_server_sup.erl b/p11p-daemon/src/p11p_server_sup.erl
index 18f1247..064de05 100644
--- a/p11p-daemon/src/p11p_server_sup.erl
+++ b/p11p-daemon/src/p11p_server_sup.erl
@@ -2,20 +2,29 @@
-behaviour(supervisor).
-export([start_link/0, start_server/1]).
--export([init/1]).
+-export([init/1, cleanup/0]).
+
+-include("p11p_defs.hrl").
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init([]) ->
- Names = ["vtoken0", "vtoken1"], % FIXME: get from config
- ok = start_servers(Names),
+ ok = start_servers(tokens()),
{ok, {{simple_one_for_one, 1, 5},
- [{sock_server, % Ignored childspec id.
+ [{sock_server,
{p11p_server, start_link, []},
temporary, 1000, worker, [p11p_server]}
]}}.
+start_server(Args) ->
+ {ok, Pid} = supervisor:start_child(?MODULE, [Args]),
+ Pid.
+
+cleanup() ->
+ cleanup(tokens()).
+
+%% Private functions.
start_servers([]) ->
ok;
start_servers([Name|T]) ->
@@ -26,11 +35,12 @@ start_servers([Name|T]) ->
spawn_link(?MODULE, start_server, [[Path, Socket]]),
start_servers(T).
-start_server(Args) ->
- {ok, Pid} = supervisor:start_child(?MODULE, [Args]),
- Pid.
+cleanup([]) ->
+ ok;
+cleanup([Token|Tail]) ->
+ file:delete(socket_path(mkdir_socket_basepath(), Token)),
+ cleanup(Tail).
-%% Private functions.
mkdir_socket_basepath() ->
%%"/run/user/$UNIXUID/p11p/$TokenCfg-$UNIXPID"
EUID = "1000", % FIXME: get euid
@@ -47,3 +57,7 @@ mkdir_socket_basepath() ->
-spec socket_path(string(), string()) -> string().
socket_path(BasePath, Name) ->
BasePath ++ Name ++ "-" ++ os:getpid(). % FIXME: filename(3erl)
+
+-spec tokens() -> [string()].
+tokens() ->
+ [ T#token.name || T <- p11p_config:tokens() ].