From cf495efa541318719f1d8eeddecad96e6091aa0c Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Sun, 30 Jun 2019 23:22:02 +0200 Subject: rename manager functions to reflect where the policy lives Servers and remotes (soon renamed "clients") are not the ones implementing policy. They should therefore report events to the manager which then imposes policy. --- p11p-daemon/src/p11p_remote.erl | 2 +- p11p-daemon/src/p11p_remote_manager.erl | 18 +++++++++--------- p11p-daemon/src/p11p_server.erl | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) (limited to 'p11p-daemon/src') diff --git a/p11p-daemon/src/p11p_remote.erl b/p11p-daemon/src/p11p_remote.erl index 200afdc..12f513d 100644 --- a/p11p-daemon/src/p11p_remote.erl +++ b/p11p-daemon/src/p11p_remote.erl @@ -78,7 +78,7 @@ handle_info({Port, {data, Data}}, #state{msg = Msg} = State) when Port == State# {noreply, handle_remote_data(State, Msg, Data)}; handle_info({timeout, Timer, Port}, #state{token = TokName} = State) when Port == State#state.port, Timer == State#state.timer -> lager:info("~p: rpc request timed out, exiting", [self()]), - ok = p11p_remote_manager:timeout(TokName), + ok = p11p_remote_manager:server_change(timeout, [TokName]), NewState = State#state{timer = undefined}, {stop, normal, NewState}; handle_info(Info, State) -> diff --git a/p11p-daemon/src/p11p_remote_manager.erl b/p11p-daemon/src/p11p_remote_manager.erl index 633a4aa..d2bbd11 100644 --- a/p11p-daemon/src/p11p_remote_manager.erl +++ b/p11p-daemon/src/p11p_remote_manager.erl @@ -12,8 +12,8 @@ %% API. -export([start_link/0]). --export([remote_for_token/1, kill_remote/2]). % For servers. --export([timeout/1]). % For remotes. +-export([remote_for_token/1, client_change/2]). % For servers. +-export([server_change/2]). % For remotes. %% Genserver callbacks. -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, @@ -44,11 +44,11 @@ start_link() -> -spec remote_for_token(string()) -> pid(). remote_for_token(TokName) -> gen_server:call(?MODULE, {remote_for_token, TokName}). -kill_remote(TokName, Pid) -> - gen_server:call(?MODULE, {kill_remote, {TokName, Pid}}). +client_change(Change, Args) -> + gen_server:call(?MODULE, {client_change, Change, Args}). -timeout(TokName) -> - gen_server:call(?MODULE, {timeout, TokName}). +server_change(Change, Args) -> + gen_server:call(?MODULE, {server_change, Change, Args}). %% Genserver callbacks. init([]) -> @@ -68,7 +68,7 @@ handle_call({remote_for_token, TokName}, _From, #state{tokens = Tokens} = State) _ -> {reply, Pid, State} end; -handle_call({timeout, TokName}, _From, #state{tokens = Tokens} = State) -> +handle_call({server_change, timeout, [TokName]}, _From, #state{tokens = Tokens} = State) -> lager:debug("~p: ~s: timed out", [self(), TokName]), %% TODO: do some code dedup with remote_for_token? #{TokName := Token} = Tokens, @@ -79,12 +79,12 @@ handle_call({timeout, TokName}, _From, #state{tokens = Tokens} = State) -> NewState = State#state{tokens = Tokens#{TokName := NewToken}}, lager:debug("~p: ~s: updated token: ~p", [self(), TokName, NewToken]), {reply, ok, NewState}; -handle_call({kill_remote, {TokName, Pid}}, From, #state{tokens = Tokens} = State) -> +handle_call({client_change, client_gone, [TokName, Pid]}, From, #state{tokens = Tokens} = State) -> lager:debug("~p: killing off remote ~p on request from ~p", [self(), Pid, From]), gen_server:stop(Pid), #{TokName := Token} = Tokens, Remotes = Token#token.remotes, - NewRemotes = lists:map(fun(E) -> + NewRemotes = lists:map(fun(E) -> % TODO: any risk of losing list order? case E#remote.pid of Pid -> E#remote{pid = undefined}; _ -> E diff --git a/p11p-daemon/src/p11p_server.erl b/p11p-daemon/src/p11p_server.erl index ed2c719..f0feec7 100644 --- a/p11p-daemon/src/p11p_server.erl +++ b/p11p-daemon/src/p11p_server.erl @@ -96,7 +96,7 @@ handle_info(Info, State) -> terminate(_Reason, #state{socket = Socket, tokname = TokName, remote = Remote}) -> lager:debug("~p: terminated", [self()]), gen_tcp:close(Socket), - p11p_remote_manager:kill_remote(TokName, Remote), + p11p_remote_manager:client_change(client_gone, [TokName, Remote]), ok. code_change(_OldVersion, State, _Extra) -> -- cgit v1.1