diff options
author | Linus Nordberg <linus@sunet.se> | 2019-06-30 14:15:54 +0200 |
---|---|---|
committer | Linus Nordberg <linus@sunet.se> | 2019-06-30 14:15:54 +0200 |
commit | 9f83e6035743942b58005305f62af9bcceb52341 (patch) | |
tree | 867be41311eb73816d36c4a60ea0d6f4c6c9e9ec /p11p-daemon | |
parent | 3bdaeaafe9d0927d87963d7e54e38745d2c1f8ca (diff) |
make p11p_server:reply/2 a call too
Diffstat (limited to 'p11p-daemon')
-rw-r--r-- | p11p-daemon/src/p11p_remote.erl | 4 | ||||
-rw-r--r-- | p11p-daemon/src/p11p_server.erl | 20 |
2 files changed, 12 insertions, 12 deletions
diff --git a/p11p-daemon/src/p11p_remote.erl b/p11p-daemon/src/p11p_remote.erl index c968aad..f7bdcab 100644 --- a/p11p-daemon/src/p11p_remote.erl +++ b/p11p-daemon/src/p11p_remote.erl @@ -72,7 +72,7 @@ handle_cast(Request, 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 -> Version = hd(Data), % First octet is version. - p11p_server:add_to_clientbuf(Pid, <<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 -> {noreply, handle_remote_data(State, Msg, Data)}; @@ -108,7 +108,7 @@ handle_remote_data(#state{replyto = Pid, timer = Timer} = State, Msg, Data) -> case p11p_rpc:parse(Msg, list_to_binary(Data)) of {done, NewMsg} -> cancel_timer(Timer), - ok = p11p_server:reply(Pid, NewMsg), + {ok, _BytesSent} = p11p_server:reply(Pid, NewMsg), State#state{msg = p11p_rpc:new(NewMsg#p11rpc_msg.buffer)}; {needmore, NewMsg} -> State#state{msg = NewMsg} diff --git a/p11p-daemon/src/p11p_server.erl b/p11p-daemon/src/p11p_server.erl index ab71c6d..880a8c0 100644 --- a/p11p-daemon/src/p11p_server.erl +++ b/p11p-daemon/src/p11p_server.erl @@ -28,13 +28,13 @@ start_link(Args) -> gen_server:start_link(?MODULE, Args, []). --spec add_to_clientbuf(pid(), binary()) -> binary(). +-spec add_to_clientbuf(pid(), binary()) -> {ok, non_neg_integer()}. add_to_clientbuf(Pid, Data) -> gen_server:call(Pid, {add_to_clientbuf, Data}). --spec reply(pid(), p11rpc_msg()) -> ok. +-spec reply(pid(), p11rpc_msg()) -> {ok, non_neg_integer()}. reply(Pid, Response) -> - gen_server:cast(Pid, {response, Response}). + gen_server:call(Pid, {response, Response}). %% Genserver callbacks. init([Token, SocketPath, Socket]) -> @@ -45,7 +45,13 @@ init([Token, SocketPath, Socket]) -> handle_call({add_to_clientbuf, Data}, _From, #state{clientbuf = Buf} = State) -> NewBuf = <<Buf/binary, Data/binary>>, - {reply, NewBuf, State#state{clientbuf = NewBuf}}; + {reply, {ok, size(NewBuf)}, State#state{clientbuf = NewBuf}}; +handle_call({response, Response}, _From, #state{socket = ClientPort, clientbuf = Buf} = State) -> + Data = p11p_rpc:serialise(Response), + NewBuf = <<Buf/binary, Data/binary>>, + lager:debug("~p: sending ~B octets back to client as reply", [self(), size(NewBuf)]), + ok = gen_tcp:send(ClientPort, NewBuf), % TODO: what about short writes? + {reply, {ok, size(NewBuf)}, State#state{clientbuf = <<>>}}; handle_call(Call, _From, State) -> lager:debug("~p: Unhandled call: ~p~n", [self(), Call]), {reply, unhandled, State}. @@ -65,12 +71,6 @@ handle_cast(accept, State = #state{tokname = TokName, sockpath = SocketPath, soc lager:debug("~p: listening socket closed", [self()]), {stop, normal, State} end; -handle_cast({response, Response}, #state{socket = ClientPort, clientbuf = Buf} = State) -> - %%lager:debug("~p: received ~B octets from remote", [self(), length(Data)]), - Data = p11p_rpc:serialise(Response), - NewBuf = <<Buf/binary, Data/binary>>, - ok = gen_tcp:send(ClientPort, NewBuf), % TODO: what about short writes? - {noreply, State#state{clientbuf = <<>>}}; handle_cast(Cast, State) -> lager:debug("~p: Unhandled cast: ~p~n", [self(), Cast]), {noreply, State}. |