summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--p11p-daemon/config/sys.config6
-rw-r--r--p11p-daemon/src/p11p_config.erl19
2 files changed, 20 insertions, 5 deletions
diff --git a/p11p-daemon/config/sys.config b/p11p-daemon/config/sys.config
index 2dbaa87..eb6ca10 100644
--- a/p11p-daemon/config/sys.config
+++ b/p11p-daemon/config/sys.config
@@ -5,9 +5,11 @@
{loglevel, 3},
{groups,
[{"vtoken0",
- [{modules,
+ [{mode, failover, [timeout]}, % {mode, failover|balance, [timeout]|[TBD]}
+ {modules,
[{"softhsm2", "/usr/lib/softhsm/libsofthsm2.so"},
- {"bogusmod_0", "/usr/lib/softhsm/libsofthsm2.so"}]}]},
+ {"bogusmod_0", "/usr/lib/softhsm/libsofthsm2.so"}]}
+ ]},
{"vtoken1",
[{modules,
[{"softhsm2", "/usr/lib/softhsm/libsofthsm2.so"}]}]}]}]},
diff --git a/p11p-daemon/src/p11p_config.erl b/p11p-daemon/src/p11p_config.erl
index 954f941..c9ada5f 100644
--- a/p11p-daemon/src/p11p_config.erl
+++ b/p11p-daemon/src/p11p_config.erl
@@ -6,7 +6,7 @@
%%-export([config/0]).
-export([nameof/1]).
-export([tokens/0]).
--export([modules_for_token/1, module_path/1]).
+-export([modules_for_token/1, module_path/1, token_mode/1]).
%% Genserver callbacks.
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
@@ -19,8 +19,11 @@
}).
-type p11module() :: #p11module{}.
+-type token_mode() :: {failover | balance, [term()]}.
+
-record(token, {
name :: string(),
+ mode :: token_mode(),
modules = #{} :: #{string() => p11module()}
}).
-type token() :: #token{}.
@@ -42,6 +45,10 @@ start_link() ->
tokens() ->
gen_server:call(?MODULE, tokens).
+-spec token_mode(string()) -> token_mode().
+token_mode(TokName) ->
+ gen_server:call(?MODULE, {token_mode, TokName}).
+
-spec modules_for_token(string()) -> [p11module()].
modules_for_token(TokName) ->
gen_server:call(?MODULE, {modules_for_token, TokName}).
@@ -67,9 +74,12 @@ init(_Args) ->
%% {reply, State, State};
handle_call(tokens, _From, #state{tokens = Tokens} = State) ->
{reply, maps:values(Tokens), State};
-handle_call({modules_for_token, TokenString}, _, #state{tokens = Tokens} = S) ->
- #{TokenString := Token} = Tokens,
+handle_call({modules_for_token, TokName}, _, #state{tokens = Tokens} = S) ->
+ #{TokName := Token} = Tokens,
{reply, maps:values(Token#token.modules), S};
+handle_call({token_mode, TokName}, _, #state{tokens = Tokens} = State) ->
+ #{TokName := Token} = Tokens,
+ {reply, Token#token.mode, State};
handle_call(Request, _From, State) ->
lager:warning("Unhandled call: ~p", [Request]),
{reply, unhandled, State}.
@@ -107,6 +117,7 @@ conf_tokens([H = {Name, _}|T], Acc) ->
new_token({Name, Settings}) ->
#token{
name = Name,
+ mode = proplists:get_value(mode, Settings, {failover, [timeout]}),
modules = conf_modules(proplists:get_value(modules, Settings))
}.
@@ -145,12 +156,14 @@ tokens_init_test_() ->
[?_assertEqual(
#{"vtoken0" =>
{token,"vtoken0",
+ {failover,[timeout]},
#{"bogusmod0_0" =>
{p11module,"bogusmod0_0", "/path/to/bogusmod0_0"},
"bogusmod0_1" =>
{p11module,"bogusmod0_1", "/path/to/bogusmod0_1"}}},
"vtoken1" =>
{token,"vtoken1",
+ {failover,[timeout]},
#{"bogusmod1_0" =>
{p11module,"bogusmod1_0", "/path/to/bogusmod1_0"}}}
},