diff --git a/server/asn1/StudySystemProtocol.asn1 b/server/asn1/StudySystemProtocol.asn1 index b460c10..2831050 100644 --- a/server/asn1/StudySystemProtocol.asn1 +++ b/server/asn1/StudySystemProtocol.asn1 @@ -12,12 +12,17 @@ Session ::= SEQUENCE { minutes INTEGER } -Request ::= CHOICE { +RequestBody ::= CHOICE { ping [0] NULL, listPrioritizedActivities [1] NULL, logSession [2] Session } +Request ::= SEQUENCE { + transactionId INTEGER, + body RequestBody +} + PrioritizedActivity ::= SEQUENCE { subjectId INTEGER, subjectName UTF8String, @@ -31,10 +36,15 @@ Error ::= ENUMERATED { serverError(2) } -Response ::= CHOICE { +ResponseBody ::= CHOICE { error [0] Error, ack [1] NULL, prioritizedActivities [2] SEQUENCE OF PrioritizedActivity } +Response ::= SEQUENCE { + transactionId INTEGER, + body ResponseBody +} + END diff --git a/server/src/session_server.erl b/server/src/session_server.erl index c814fe8..5c73f1d 100644 --- a/server/src/session_server.erl +++ b/server/src/session_server.erl @@ -23,13 +23,16 @@ handle_cast(_Msg, State) -> handle_info({ssl, Socket, Data}, State) -> case 'StudySystemProtocol':decode('Request', Data) of - {ok, {ping, _}} -> + {ok, {'Request', TransactionId, RequestBody}} -> + ResponseBody = map_request(RequestBody), {ok, Encoded} = 'StudySystemProtocol':encode( - 'Response', {ack, 'NULL'}), + 'Response', + {'Response', TransactionId, ResponseBody}), ok = ssl:send(Socket, Encoded); {error, {asn1, _Reason}} -> {ok, Encoded} = 'StudySystemProtocol':encode( - 'Response', {error, invalidRequest}), + 'Response', + {'Response', -1, {error, invalidRequest}}), ok = ssl:send(Socket, Encoded) end, {noreply, State}; @@ -45,3 +48,8 @@ terminate(_Reason, #{socket := Socket}) -> code_change(_OldVsn, State, _Extra) -> {ok, State}. + +map_request({ping, 'NULL'}) -> + {ack, 'NULL'}; +map_request(_) -> + {error, invalidRequest}.