summaryrefslogtreecommitdiff
path: root/src/plopcontrol.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/plopcontrol.erl')
-rw-r--r--src/plopcontrol.erl44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/plopcontrol.erl b/src/plopcontrol.erl
new file mode 100644
index 0000000..de7faba
--- /dev/null
+++ b/src/plopcontrol.erl
@@ -0,0 +1,44 @@
+%%% Copyright (c) 2017, NORDUnet A/S.
+%%% See LICENSE for licensing information.
+
+-module(plopcontrol).
+-export([start_link/0, server_start/2]).
+
+start_link() ->
+ case gen_tcp:listen(application:get_env(plop, plopcontrolport, 0), [binary, {packet, line},
+ {active, false},
+ {ip, {127, 0, 0, 1}}]) of
+ {ok, ListenSocket} ->
+ proc_lib:start_link(?MODULE,server_start,[self(), ListenSocket]);
+ {error,Reason} ->
+ {error,Reason}
+ end.
+
+server_start(Parent, ListenSocket) ->
+ proc_lib:init_ack(Parent, {ok, self()}),
+ {ok, Port} = inet:port(ListenSocket),
+ {ok, PlopcontrolFile} = application:get_env(plop, plopcontrol),
+ atomic:replacefile(PlopcontrolFile, integer_to_list(Port)),
+ acceptloop(ListenSocket).
+
+acceptloop(ListenSocket) ->
+ {ok, Socket} = gen_tcp:accept(ListenSocket),
+ commandloop(Socket),
+ acceptloop(ListenSocket).
+
+commandloop(Socket) ->
+ case gen_tcp:recv(Socket, 0) of
+ {ok, Packet} ->
+ Answer = command(Packet),
+ gen_tcp:send(Socket, Answer),
+ commandloop(Socket);
+ {error, _Reason} ->
+ ok
+ end.
+
+command(<<"reload\n">>) ->
+ plopconfig:load_config(),
+ "reload completed\n";
+
+command(_) ->
+ "unknown command\n".