diff options
Diffstat (limited to 'p11p-daemon/src/p11p_server.erl')
-rw-r--r-- | p11p-daemon/src/p11p_server.erl | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/p11p-daemon/src/p11p_server.erl b/p11p-daemon/src/p11p_server.erl index 880a8c0..ed2c719 100644 --- a/p11p-daemon/src/p11p_server.erl +++ b/p11p-daemon/src/p11p_server.erl @@ -17,6 +17,7 @@ %% Records and types. -record(state, { tokname :: string(), + remote :: pid() | undefined, sockpath :: string(), % FIXME: filename(3erl) socket :: gen_tcp:socket(), msg :: p11rpc_msg() | undefined, @@ -49,7 +50,7 @@ handle_call({add_to_clientbuf, Data}, _From, #state{clientbuf = Buf} = State) -> 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)]), + %%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) -> @@ -75,18 +76,16 @@ handle_cast(Cast, State) -> lager:debug("~p: Unhandled cast: ~p~n", [self(), Cast]), {noreply, State}. -handle_info({tcp, Port, Data}, #state{tokname = TokName, msg = Msg} = State) when Msg == undefined -> - lager:debug("~p: received ~B octets from client on socket ~p, from new client", - [self(), size(Data), Port]), +handle_info({tcp, _Port, Data}, #state{tokname = TokName, remote = Remote} = State) when Remote == undefined -> + %%lager:debug("~p: received ~B octets from client on socket ~p, from new client", [self(), size(Data), Port]), <<Version:8, NewData/binary>> = Data, - p11p_remote:add_to_outbuf(p11p_remote_manager:remote_for_token(TokName), <<Version>>), % FIXME: token reference needs to be cached, for consistancy at least across this and the next function head + NewRemote = p11p_remote_manager:remote_for_token(TokName), + p11p_remote:add_to_outbuf(NewRemote, <<Version>>), NewState = handle_client_data(State, p11p_rpc:new(), NewData), - {noreply, NewState}; -handle_info({tcp, Port, Data}, #state{msg = Msg} = State) -> - lager:debug("~p: received ~B octets from client on socket ~p, with ~B octets already in buffer", - [self(), size(Data), Port, size(Msg#p11rpc_msg.buffer)]), - NewState = handle_client_data(State, Msg, Data), - {noreply, NewState}; + {noreply, NewState#state{remote = NewRemote}}; +handle_info({tcp, _Port, Data}, #state{msg = Msg} = State) -> + %%lager:debug("~p: received ~B octets from client on socket ~p, with ~B octets already in buffer", [self(), size(Data), Port, size(Msg#p11rpc_msg.buffer)]), + {noreply, handle_client_data(State, Msg, Data)}; handle_info({tcp_closed, Port}, State) -> lager:debug("~p: socket ~p closed", [self(), Port]), {stop, {shutdown, close_by_client}, State}; @@ -94,9 +93,10 @@ handle_info(Info, State) -> lager:debug("~p: Unhandled info: ~p~n", [self(), Info]), {noreply, State}. -terminate(_Reason, #state{sockpath = _SocketPath, socket = Socket}) -> +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), ok. code_change(_OldVersion, State, _Extra) -> |