From 7c26a9278f57db6f663e3272ac1a4e3b01436db4 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Sun, 2 Mar 2025 16:49:42 +0000 Subject: [PATCH] Transfer ownership of client socket in session_server:init/1 --- server/src/session_server.erl | 21 ++++++++++----------- server/src/tcp_server.erl | 3 +-- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/server/src/session_server.erl b/server/src/session_server.erl index 2676d07..5798a92 100644 --- a/server/src/session_server.erl +++ b/server/src/session_server.erl @@ -12,6 +12,7 @@ start_link(Socket) -> gen_server:start_link(?MODULE, Socket, []). init(Socket) -> + ok = ssl:controlling_process(Socket, self()), ok = ssl:setopts(Socket, [{active, true}]), process_flag(trap_exit, true), {ok, #{socket => Socket, transactions => #{}}}. @@ -38,9 +39,7 @@ handle_info({'EXIT', Pid, Reason}, TransactionId = maps:get(Pid, Transactions), Response = case Reason of {response, Value} -> Value; - _ -> - io:format("Error handling request: ~p~n", [Reason]), - {error, serverError} + _ -> {error, serverError} end, send(Socket, TransactionId, Response), {noreply, State#{transactions := maps:remove(Pid, Transactions)}}; @@ -59,25 +58,25 @@ code_change(_OldVsn, State, _Extra) -> handle_request(Request) -> timer:kill_after(500), - exit(map_request(Request)). + exit({response, map_request(Request)}). map_request({ping, 'NULL'}) -> - {response, {ack, 'NULL'}}; + {ack, 'NULL'}; map_request({listActivities, 'NULL'}) -> {activities, Activities} = subject_router:get_activities(), SortedActivities = lists:reverse(lists:keysort(3, Activities)), - {response, {activities, - [{'Activity', Subject, Type, round(Priority * 100)} - || {Subject, Type, Priority} <- SortedActivities]}}; + {activities, + [{'Activity', Subject, Type, round(Priority * 100)} + || {Subject, Type, Priority} <- SortedActivities]}; map_request({logSession, {'Session', Subject, Type, Timestamp, Minutes}}) -> Session = {unicode:characters_to_list(Subject), Type, Timestamp, Minutes}, case subject_router:log_session(Session) of - ok -> {response, {ack, 'NULL'}}; - {error, _Error} -> {response, {error, invalidArguments}} + ok -> {ack, 'NULL'}; + {error, _Error} -> {error, invalidArguments} end; map_request(_) -> - {response, {error, invalidArguments}}. + {error, invalidArguments}. send(Socket, TransactionId, Response) -> {ok, Encoded} = 'StudySystemProtocol':encode( diff --git a/server/src/tcp_server.erl b/server/src/tcp_server.erl index 64b6d90..fdd9407 100644 --- a/server/src/tcp_server.erl +++ b/server/src/tcp_server.erl @@ -41,8 +41,7 @@ handle_info(accept, State = #state{socket = Socket}) -> handle_info({handshake, TlsSocket}, State) -> case ssl:handshake(TlsSocket, 5000) of {ok, ClientSocket} -> - {ok, Pid} = session_sup:start_session(ClientSocket), - ok = ssl:controlling_process(ClientSocket, Pid); + {ok, _Pid} = session_sup:start_session(ClientSocket); {error, _Reason} -> ok end,