summaryrefslogtreecommitdiff
path: root/p11p-daemon/src/p11p_server_sup.erl
diff options
context:
space:
mode:
Diffstat (limited to 'p11p-daemon/src/p11p_server_sup.erl')
-rw-r--r--p11p-daemon/src/p11p_server_sup.erl30
1 files changed, 22 insertions, 8 deletions
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() ].