From 423f3fab58f987e8ce243bef39a259d310e9d124 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 27 Oct 2015 15:39:53 +0100 Subject: Split files --- Makefile | 9 +++++++++ acse.erl | 36 ++++++++++++++++++++++++++++++++++++ tda.erl | 47 +++++++++++++---------------------------------- 3 files changed, 58 insertions(+), 34 deletions(-) create mode 100644 Makefile create mode 100644 acse.erl diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..dcdf711 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +SRCS = ACSE-1.erl \ + CSTA-application-context-information-csta3.erl \ + Remote-Operations-Generic-ROS-PDUs.erl \ + KME-specific-types.erl + +all: $(SRCS) + +%.erl: lib/%.asn1 + erlc $< diff --git a/acse.erl b/acse.erl new file mode 100644 index 0000000..82ba4b1 --- /dev/null +++ b/acse.erl @@ -0,0 +1,36 @@ +-module(acse). + +-include("ACSE-1.hrl"). +-include("CSTA-application-context-information-csta3.hrl"). + +-export([user_information/0, associate_request/0, release_request/0]). +-export([decode/1, accepted/1]). + +user_information() -> + {ok, UI} = 'CSTA-application-context-information-csta3':encode( + 'ACSEUserInformationForCSTA', {newDefinition, + #'NewACSEUserInformationForCSTA'{cSTAVersion = [versionFive]}}), + {'single-ASN1-type', UI}. + +associate_request() -> + 'ACSE-1':encode('ACSE-apdu', {aarq, #'AARQ-apdu'{ + 'protocol-version' = [version1], + 'application-context-name' = {1, 3, 12, 0, 218}, + 'user-information' = [#'EXTERNAL'{ + 'direct-reference' = {1, 3, 12, 0, 285, 200}, + encoding = user_information()}]}}). + +release_request() -> 'ACSE-1':encode('ACSE-apdu', {rlrq, #'RLRQ-apdu'{}}). + +decode(Msg) -> 'ACSE-1':decode('ACSE-apdu', Msg). + +accepted({aarq, _}) -> error; +accepted({aare, Apdu}) -> + case Apdu#'AARE-apdu'.result of + accepted -> ok; + 'rejected-permanent' -> error; + 'rejected-transient' -> error + end; +accepted({rlrq, _}) -> error; +accepted({rlre, _}) -> error; +accepted({abrt, _}) -> error. diff --git a/tda.erl b/tda.erl index d72739f..58efe09 100644 --- a/tda.erl +++ b/tda.erl @@ -1,28 +1,16 @@ -module(tda). -export([start/0, client/1, stop/0, co_lines/0]). +-export([rose/1]). --include("acse.hrl"). --include("rose.hrl"). --include("kme.hrl"). +-include("KME-specific-types.hrl"). +-include("Remote-Operations-Generic-ROS-PDUs.hrl"). -define(TIMEOUT, 300000). -define(CONNECT_TIMEOUT, 3000). -define(HOST, "192.168.240.20"). -define(PORT, 33333). -associate_request() -> - {ok, UI} = acse:encode('ACSEUserInformationForCSTA', {newDefinition, - #'NewACSEUserInformationForCSTA'{cSTAVersion = [versionFive]}}), - acse:encode('ACSE-apdu', {aarq, #'AARQ-apdu'{ - 'protocol-version' = [version1], - 'application-context-name' = {1, 3, 12, 0, 218}, - 'user-information' = [#'EXTERNAL'{ - 'direct-reference' = {1, 3, 12, 0, 285, 200}, - encoding = {'single-ASN1-type', UI}}]}}). - -release_request() -> acse:encode('ACSE-apdu', {rlrq, #'RLRQ-apdu'{}}). - start() -> register(tda_client, spawn(?MODULE, client, [{dial, ?HOST, ?PORT}])). stop() -> tda_client ! {logout}. @@ -47,12 +35,12 @@ loop(Sock) -> receive {login} -> io:format("Login~n", []), - {ok, Hello} = associate_request(), + {ok, Hello} = acse:associate_request(), gen_tcp:send(Sock, Hello), loop(Sock); {logout} -> io:format("Logout~n", []), - {ok, Bye} = release_request(), + {ok, Bye} = acse:release_request(), gen_tcp:send(Sock, Bye), loop(Sock); {tcp, Sock, Msg} -> @@ -70,16 +58,18 @@ loop(Sock) -> timeout end. +rose(Msg) -> 'Remote-Operations-Generic-ROS-PDUs':decode('ROS', Msg). + decode(Sock, Msg) -> case dispatch(Msg) of rose -> - {ok, Rose} = rose:decode('ROS', Msg), + {ok, Rose} = rose(Msg), io:format("ROSE> ~p~n", [Rose]), rose_handler(Sock, Rose); acse -> - {ok, Acse} = acse:decode('ACSE-apdu', Msg), + {ok, Acse} = acse:decode(Msg), io:format("ACSE> ~p~n", [Acse]), - acse_handler(Acse) + acse:accepted(Acse) end. rose_handler(Sock, {invoke, Rose}) -> @@ -105,25 +95,14 @@ dispatch(<>) -> 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 + case 'Remote-Operations-Generic-ROS-PDUs':encode('ROS', {returnResult, R}) of {ok, Invoke} -> Invoke; {error, Reason} -> Reason end. -acse_handler({aarq, _}) -> error; -acse_handler({aare, Apdu}) -> - case Apdu#'AARE-apdu'.result of - accepted -> ok; - 'rejected-permanent' -> error; - 'rejected-transient' -> error - end; -acse_handler({rlrq, _}) -> error; -acse_handler({rlre, _}) -> error; -acse_handler({abrt, _}) -> error. - co_lines() -> - {ok, CO} = kme:encode('KMESpecificPrivateData', {kmeSystemData, + {ok, CO} = 'KME-specific-types':encode('KMESpecificPrivateData', {kmeSystemData, {getSystemData, {request, {deviceList, {category, {standardDevice, networkInterface}}}}}}), CO. - %kme:encode('EscapeArgument', #'EscapeArgument'{privateData = CO}). + %'KME-specific-types':encode('EscapeArgument', #'EscapeArgument'{privateData = CO}). -- cgit v1.2.3