From 11cf9c2d90841b3f488def3b50e84b20b0fef160 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Oct 2015 02:46:32 +0200 Subject: Add more handler --- tda.erl | 63 +++++++++++++++++++++++++-------------------------------------- 1 file changed, 25 insertions(+), 38 deletions(-) (limited to 'tda.erl') diff --git a/tda.erl b/tda.erl index c30c1e2..2260f36 100644 --- a/tda.erl +++ b/tda.erl @@ -3,7 +3,6 @@ -export([associate_request/0, associate_result/1]). -export([release_request/0, release_result/1]). -export([associate_abort/1]). --export([system_status/0, system_status/1]). -export([client/0, stop/1, loop/1, start_client/0]). -include("acse.hrl"). @@ -60,30 +59,9 @@ associate_abort(Bin) -> {ok, Pdu} = acse:decode('ABRT-apdu', Bin), {ok, Pdu#'ABRT-apdu'.'abort-source'}. +% ROSE status % <<161,12,2,1,1,2,2,0,211,48,3,10,1,2>> % <<162,11,2,1,1,48,6,2,2,0,211,5,0>> -system_status(Bin) -> - case rose:decode('ROS', Bin) of - {ok, {invoke, Invoke}} -> - {id(Invoke), opcode(Invoke), arg(Invoke)}; - {error, Reason} -> Reason - end. - -opcode(#'Invoke'{opcode = {local, Opcode}}) -> Opcode; -opcode(Any) -> {local, Any}. - -id(#'Invoke'{invokeId = {present, Id}}) -> Id; -id(Any) -> {present, Any}. - -arg(#'Invoke'{argument = Arg}) -> Arg. - -system_status() -> - RR = #'ReturnResult_result'{opcode = {local, 211}, result = <<5,0>>}, - R = #'ReturnResult'{invokeId = {present, 1}, result = RR}, - case rose:encode('ROS', {returnResult, R}) of - {ok, Invoke} -> Invoke; - {error, Reason} -> Reason - end. start_client() -> register(cl, spawn(?MODULE, client, [])). @@ -118,30 +96,25 @@ decode(Sock, Msg) -> case dispatch(Msg) of rose -> {ok, Rose} = rose:decode('ROS', Msg), - rose_handler(Sock, Rose), - io:format("ROSE> ~p~n", [Rose]); + io:format("ROSE> ~p~n", [Rose]), + rose_handler(Sock, Rose); acse -> {ok, Acse} = acse:decode('ACSE-apdu', Msg), - io:format("ACSE> ~p~n", [Acse]) + io:format("ACSE> ~p~n", [Acse]), + acse_handler(Sock, Acse) end. rose_handler(Sock, {invoke, Rose}) -> - gen_tcp:send(Sock, invoke_handler(Rose)). + gen_tcp:send(Sock, invoke_handler(Rose)), + ok. -invoke_handler(#'Invoke'{invokeId = {present, Id}, opcode = {local, Op}}) -> +invoke_handler(#'Invoke'{invokeId = Id, opcode = Op}) -> case Op of - 211 -> - RR = #'ReturnResult_result'{opcode = {local, Op}, - result = <<5,0>>}, - R = #'ReturnResult'{invokeId = {present, Id}, result = RR}, - case rose:encode('ROS', {returnResult, R}) of - {ok, Invoke} -> Invoke; - {error, Reason} -> Reason - end + {_, 211} -> system_status(Id, Op) end. -dispatch(<>) -> - case H of +dispatch(<>) -> + case Head of 96 -> acse; 97 -> acse; 98 -> acse; @@ -150,3 +123,17 @@ dispatch(<>) -> 161 -> rose; 162 -> rose end. + +system_status(Id, Op) -> + RR = #'ReturnResult_result'{opcode = Op, result = <<5,0>>}, + R = #'ReturnResult'{invokeId = Id, result = RR}, + case rose:encode('ROS', {returnResult, R}) of + {ok, Invoke} -> Invoke; + {error, Reason} -> Reason + end. + +acse_handler(Sock, {aare, Apdu}) -> ok; +acse_handler(Sock, {aarq, Apdu}) -> ok; +acse_handler(Sock, {rlre, _}) -> gen_tcp:close(Sock); +acse_handler(Sock, {rlrq, _}) -> gen_tcp:close(Sock); +acse_handler(Sock, {abrt, _}) -> gen_tcp:close(Sock). -- cgit v1.2.3