diff options
Diffstat (limited to 'p11p-daemon/src/p11p_remote.erl')
-rw-r--r-- | p11p-daemon/src/p11p_remote.erl | 41 |
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) -> |