summaryrefslogtreecommitdiff
path: root/p11p-daemon/src/p11p_remote.erl
diff options
context:
space:
mode:
Diffstat (limited to 'p11p-daemon/src/p11p_remote.erl')
-rw-r--r--p11p-daemon/src/p11p_remote.erl41
1 files changed, 21 insertions, 20 deletions
diff --git a/p11p-daemon/src/p11p_remote.erl b/p11p-daemon/src/p11p_remote.erl
index 6a050e6..d0f9184 100644
--- a/p11p-daemon/src/p11p_remote.erl
+++ b/p11p-daemon/src/p11p_remote.erl
@@ -72,10 +72,10 @@ init([TokName, ModPath, ModEnv]) ->
handle_call({add_to_outbuf, Data}, _From, State) ->
{reply, ok, do_add_to_outbuf(Data, State)};
-handle_call({request, Request}, {FromPid, _Tag}, #state{port = Port} = State) ->
+handle_call({request, Request}, {FromPid, _Tag}, #state{port = Port} = S) ->
%%lager:debug("~p: sending request from ~p to remote ~p", [self(), FromPid, Port]),
- NewState = do_send(do_add_to_outbuf(p11p_rpc:serialise(Request), State)),
- {reply, ok, NewState#state{replyto = FromPid, timer = start_timer(Port)}};
+ State = do_send(do_add_to_outbuf(p11p_rpc:serialise(Request), S)),
+ {reply, ok, State#state{replyto = FromPid, timer = start_timer(Port)}};
handle_call(Request, _From, State) ->
lager:debug("~p: Unhandled call: ~p~n", [self(), Request]),
{reply, unhandled, State}.
@@ -87,17 +87,20 @@ handle_cast(Cast, State) ->
{noreply, State}.
%% TODO: dedup code w/ p11p_server
-handle_info({Port, {data, Data}}, #state{replyto = Pid} = State) when Port == State#state.port, State#state.msg == undefined ->
+handle_info({Port, {data, Data}}, #state{replyto = Pid} = State)
+ when Port == State#state.port, State#state.msg == undefined ->
Version = hd(Data), % First octet is version.
{ok, _BytesAdded} = p11p_server:add_to_clientbuf(Pid, <<Version>>),
{noreply, handle_remote_data(State, p11p_rpc:new(), tl(Data))};
-handle_info({Port, {data, Data}}, #state{msg = Msg} = State) when Port == State#state.port ->
+handle_info({Port, {data, Data}}, #state{msg = Msg} = State)
+ when Port == State#state.port ->
{noreply, handle_remote_data(State, Msg, Data)};
-handle_info({timeout, Timer, Port}, #state{token = TokName, replyto = Server} = State) when Port == State#state.port, Timer == State#state.timer ->
+handle_info({timeout, Timer, Port}, #state{token = Tok, replyto = Server} = S)
+ when Port == S#state.port, Timer == S#state.timer ->
lager:info("~p: rpc request timed out, exiting", [self()]),
- p11p_remote_manager:server_event(timeout, [TokName, Server]),
- NewState = State#state{timer = undefined},
- {stop, normal, NewState};
+ p11p_remote_manager:server_event(timeout, [Tok, Server]),
+ State = S#state{timer = undefined},
+ {stop, normal, State};
handle_info(Info, State) ->
lager:debug("~p: Unhandled info: ~p~n", [self(), Info]),
{noreply, State}.
@@ -111,10 +114,9 @@ code_change(_OldVersion, State, _Extra) ->
{ok, State}.
%% Private
-do_add_to_outbuf(Data, #state{outbuf = Buf} = State) ->
+do_add_to_outbuf(Data, #state{outbuf = OutBuf} = State) ->
%%lager:debug("~p: adding ~B octets to outbuf", [self(), size(Data)]),
- NewBuf = <<Buf/binary, Data/binary>>,
- State#state{outbuf = NewBuf}.
+ State#state{outbuf = <<OutBuf/binary, Data/binary>>}.
do_send(#state{port = Port, outbuf = Buf} = State) ->
%%lager:debug("~p: sending ~B octets to remote", [self(), size(Buf)]),
@@ -127,17 +129,16 @@ do_send(#state{port = Port, outbuf = Buf} = State) ->
%% end,
port_command(Port, Buf),
-
State#state{outbuf = <<>>}.
-handle_remote_data(#state{replyto = Pid, timer = Timer} = State, Msg, Data) ->
- case p11p_rpc:parse(Msg, list_to_binary(Data)) of
- {done, NewMsg} ->
+handle_remote_data(#state{replyto = Pid, timer = Timer} = S, MsgIn, DataIn) ->
+ case p11p_rpc:parse(MsgIn, list_to_binary(DataIn)) of
+ {done, Msg} ->
cancel_timer(Timer),
- {ok, _BytesSent} = p11p_server:reply(Pid, NewMsg),
- State#state{msg = p11p_rpc:new(NewMsg#p11rpc_msg.buffer)};
- {needmore, NewMsg} ->
- State#state{msg = NewMsg}
+ {ok, _BytesSent} = p11p_server:reply(Pid, Msg),
+ S#state{msg = p11p_rpc:new(Msg#p11rpc_msg.buffer)};
+ {needmore, Msg} ->
+ S#state{msg = Msg}
end.
start_timer(Port) ->