diff options
Diffstat (limited to 'p11p-daemon')
-rw-r--r-- | p11p-daemon/config/sys.config | 6 | ||||
-rw-r--r-- | p11p-daemon/src/p11p_config.erl | 19 |
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"}}} }, |