summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ACSE-1.asn12
-rw-r--r--tda.erl48
2 files changed, 20 insertions, 30 deletions
diff --git a/lib/ACSE-1.asn1 b/lib/ACSE-1.asn1
index 6307857..490221f 100644
--- a/lib/ACSE-1.asn1
+++ b/lib/ACSE-1.asn1
@@ -40,7 +40,7 @@ ACSE-apdu ::= CHOICE {
AARQ-apdu ::= [APPLICATION 0] IMPLICIT SEQUENCE {
protocol-version
- [0] IMPLICIT BIT STRING {version1(0)},
+ [0] IMPLICIT BIT STRING {version1(0)}, -- DEFAULT {version1},
application-context-name [1] Application-context-name,
called-AP-title [2] AP-title OPTIONAL,
called-AE-qualifier [3] AE-qualifier OPTIONAL,
diff --git a/tda.erl b/tda.erl
index 2260f36..bd93a20 100644
--- a/tda.erl
+++ b/tda.erl
@@ -1,9 +1,6 @@
-module(tda).
--export([associate_request/0, associate_result/1]).
--export([release_request/0, release_result/1]).
--export([associate_abort/1]).
--export([client/0, stop/1, loop/1, start_client/0]).
+-export([client/0, start_client/0]).
-include("acse.hrl").
-include("rose.hrl").
@@ -42,22 +39,9 @@ associate_request() ->
% <<97,47,128,2,7,128,161,7,6,5,43,12,0,129,90,162,3,2,1,0,163,5,161,3,2,1,1,190,20,40,18,6,7,43,12,0,130,29,129,72,160,7,160,5,3,3,0,8,0>>
% Reject
% <<97,25,128,2,7,128,161,7,6,5,43,12,0,129,90,162,3,2,1,1,163,5,161,3,2,1,1>>
-associate_result(Bin) ->
- case acse:decode('AARE-apdu', Bin) of
- {ok, Pdu} -> Pdu#'AARE-apdu'.result;
- {error, Reason} -> Reason
- end.
-
-release_request() ->
- acse:encode('ACSE-apdu', {rlrq, #'RLRQ-apdu'{}}).
-
-release_result(Bin) ->
- acse:decode('RLRE-apdu', Bin).
+% Abort
% <<100,3,128,1,0>>
-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>>
@@ -77,18 +61,19 @@ client() ->
{error, Reason} -> {error, Reason}
end.
-stop(Sock) -> gen_tcp:close(Sock).
-
loop(Sock) ->
%inet:setopts(Sock, [{active, once}]),
+ io:format("loop~n", []),
receive
{tcp, Sock, Msg} ->
- decode(Sock, Msg),
- loop(Sock);
+ case decode(Sock, Msg) of
+ ok -> loop(Sock);
+ error -> gen_tcp:close(Sock)
+ end;
{tcp_closed, _} ->
closed
after ?TIMEOUT ->
- stop(Sock),
+ gen_tcp:close(Sock),
timeout
end.
@@ -101,7 +86,7 @@ decode(Sock, Msg) ->
acse ->
{ok, Acse} = acse:decode('ACSE-apdu', Msg),
io:format("ACSE> ~p~n", [Acse]),
- acse_handler(Sock, Acse)
+ acse_handler(Acse)
end.
rose_handler(Sock, {invoke, Rose}) ->
@@ -132,8 +117,13 @@ system_status(Id, Op) ->
{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).
+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.