summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-10-27 15:39:53 +0100
committerDimitri Sokolyuk <demon@dim13.org>2015-10-27 15:39:53 +0100
commit423f3fab58f987e8ce243bef39a259d310e9d124 (patch)
tree8cb1838a138a17f5f8eb50b74ab4d65d795cae02
parent5550bad85735872be74ba3deae220a600ff8dd22 (diff)
Split files
-rw-r--r--Makefile9
-rw-r--r--acse.erl36
-rw-r--r--tda.erl47
3 files changed, 58 insertions, 34 deletions
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(<<Head:8,_/binary>>) ->
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}).