summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-10-26 12:13:06 +0100
committerDimitri Sokolyuk <demon@dim13.org>2015-10-26 12:13:06 +0100
commitf20412b9607d9cae365925a9b25a50bb9de3ed79 (patch)
treeb8d0f1fd2613e9ff74eb19d79411d8ddccbca7c3
parent94fc12ac423938c387c07d6a99b5d9f7836343ed (diff)
WIP
-rw-r--r--tda.erl45
1 files changed, 32 insertions, 13 deletions
diff --git a/tda.erl b/tda.erl
index fc2367e..bccf84b 100644
--- a/tda.erl
+++ b/tda.erl
@@ -1,6 +1,6 @@
-module(tda).
--export([start_client/0, client/1]).
+-export([start/0, client/1, stop/0]).
-include("acse.hrl").
-include("rose.hrl").
@@ -8,6 +8,7 @@
-define(TIMEOUT, 300000).
-define(CONNECT_TIMEOUT, 3000).
-define(HOST, "192.168.240.20").
+-define(PORT, 33333).
associate_request() ->
{ok, UI} = acse:encode('ACSEUserInformationForCSTA', {newDefinition,
@@ -20,29 +21,47 @@ associate_request() ->
encoding = {'single-ASN1-type', UI}}]},
acse:encode('ACSE-apdu', {aarq, Pdu}).
-start_client() ->
- register(tda_client, spawn(?MODULE, client, [?HOST])).
+start() ->
+ register(tda_client, spawn(?MODULE, client, [{dial, ?HOST, ?PORT}])).
-client(Host) ->
- case gen_tcp:connect(Host, 33333, [binary, {active, true}, {packet, 2}],
- ?CONNECT_TIMEOUT) of
- {ok, Sock} ->
- {ok, Hello} = associate_request(),
- gen_tcp:send(Sock, Hello),
- loop(Sock);
- {error, Reason} -> {error, Reason}
- end.
+stop() ->
+ tda_client ! {logout}.
+
+client({dial, Host, Port}) ->
+ io:format("Dial ~p:~p~n", [Host, Port]),
+ Conn = gen_tcp:connect(Host, Port,
+ [binary, {active, once}, {packet, 2}],
+ ?CONNECT_TIMEOUT),
+ client(Conn);
+client({ok, Sock}) ->
+ io:format("Connected~n", []),
+ tda_client ! {login},
+ loop(Sock);
+client({error, Reason}) ->
+ io:format("Error: ~p~n", [Reason]),
+ {error, Reason}.
loop(Sock) ->
- io:format("loop~n", []),
+ inet:setopts(Sock, [{active, once}]),
+ io:format("Loop~n", []),
receive
+ {login} ->
+ io:format("Login~n", []),
+ {ok, Hello} = associate_request(),
+ gen_tcp:send(Sock, Hello),
+ loop(Sock);
+ {logout} ->
+ io:format("Logout~n", []),
+ gen_tcp:close(Sock);
{tcp, Sock, Msg} ->
+ io:format("Reply ~p~n", [Msg]),
case decode(Sock, Msg) of
ok -> loop(Sock);
error -> gen_tcp:close(Sock),
error
end;
{tcp_closed, _} ->
+ io:format("Connection closed~n", []),
closed
after ?TIMEOUT ->
gen_tcp:close(Sock),