summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordu.net>2014-04-29 16:56:09 +0200
committerLinus Nordberg <linus@nordu.net>2014-04-29 16:56:09 +0200
commit7c5a0789ba80f890c868e81b981315dd53e9dd94 (patch)
treea68cc11778fe4ea56ddb0bbaf9709960c0e71bcb /src
parent73a6c28e22991f2f6dc0ab303c1c5274f083de77 (diff)
Turn it all into an application.
Warning: Rough edges.
Diffstat (limited to 'src')
-rw-r--r--src/db.erl1
-rw-r--r--src/plop.erl4
-rw-r--r--src/plop.hrl79
-rw-r--r--src/plop_app.erl9
-rw-r--r--src/plop_sup.erl28
5 files changed, 40 insertions, 81 deletions
diff --git a/src/db.erl b/src/db.erl
index e1604d1..ef9c536 100644
--- a/src/db.erl
+++ b/src/db.erl
@@ -64,6 +64,7 @@ code_change(_OldVsn, State, _Extra) ->
{ok, State}.
terminate(_Reason, _State) ->
+ io:format("~p terminating~n", [?MODULE]),
ok.
%%%%%%%%%%%%%%%%%%%%
diff --git a/src/plop.erl b/src/plop.erl
index bee9cb4..6ffc856 100644
--- a/src/plop.erl
+++ b/src/plop.erl
@@ -31,8 +31,7 @@
hashtree :: ht:head()}).
start_link() ->
- db:start_link(),
- start_link("test/rsakey.pem", "sikrit").
+ start_link("src/test/rsakey.pem", "sikrit"). % FIXME: Remove.
start_link(Keyfile, Passphrase) ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [Keyfile, Passphrase], []).
@@ -59,6 +58,7 @@ code_change(_OldVsn, State, _Extra) ->
{ok, State}.
terminate(_Reason, _State) ->
+ io:format("~p terminating~n", [?MODULE]),
ok.
%%%%%%%%%%%%%%%%%%%%
diff --git a/src/plop.hrl b/src/plop.hrl
deleted file mode 100644
index 5492024..0000000
--- a/src/plop.hrl
+++ /dev/null
@@ -1,79 +0,0 @@
-%%% plop data structures. Heavily based on RFC 6962. Some are for
-%%% database storage, some for interfacing with consumers and some are
-%%% for serialisation.
-
--type signature_type() :: certificate_timestamp | tree_hash | test. % uint8
--type entry_type() :: x509 | precert | test. % uint16
--type leaf_type() :: timestamped_entry | test. % uint8
-
-%% @doc What's stored in the database.
--record(plop, {
- index :: non_neg_integer(), % Primary key.
- hash :: binary(), % SHA-256 over #FIXME.entry. Indexed in db.
- spt :: binary() % serialise(#spt_on_wire{})
- }).
-
-%% @doc Merkle Tree Leaf -- input to hash function for leaf hashes.
--record(mtl, {
- version = 1 :: pos_integer(),
- leaf_type = timestamped_entry :: leaf_type(),
- entry :: timestamped_entry()
- }).
--type mtl() :: #mtl{}.
-
-%% @doc Parts of what goes in an SPT. Used for FIXME.
-%% -record(spt, {
-%% version = 1 :: pos_integer(),
-%% signature_type :: signature_type(),
-%% entry :: timestamped_entry()
-%% }).
-%%-type spt() :: #spt{}.
-
--record(spt_on_wire, {
- version :: pos_integer(), % uint8
- logid :: binary(), % SHA-256 over DER encoded public log key
- timestamp :: integer(), % uint64
- signature :: binary()
- }).
--type spt_on_wire() :: #spt_on_wire{}.
-
-%% @doc What's signed in an SPT. Used for serialisation before hasning
-%% and signing. FIXME: Overlapping #spt{} -- merge somehow.
--record(spt_signed, {
- version :: pos_integer(),
- signature_type :: signature_type(),
- timestamp :: integer(),
- entry_type :: entry_type(),
- signed_entry :: binary()
- }).
--type spt_signed() :: #spt_signed{}.
-
-%% Internal representation of a data entry.
--record(timestamped_entry, {
- timestamp = now :: now | integer(),
- entry_type :: entry_type(),
- entry :: binary()
- }).
--type timestamped_entry() :: #timestamped_entry{}.
-
-%% %% Part of interface to plop:add/1.
-%% -record(plop_entry, {
-%% type :: entry_type(),
-%% data :: binary()
-%% }).
-%% -type plop_entry() :: #plop_entry{}.
-
-
-%% @doc The parts of an STH which is to be signed. Used as the
-%% interface to plop:sth/1, for testing. Should probably be internal
-%% to plop, if that can be arranged wrt testing.
--record(sth, {
- version = 1 :: pos_integer(),
- signature_type :: signature_type(),
- timestamp = now :: 'now' | integer(),
- tree_size :: integer(),
- root_hash :: binary() % SHA-256
- }).
--type sth() :: #sth{}.
-
--export_type([timestamped_entry/0, mtl/0, entry_type/0]).
diff --git a/src/plop_app.erl b/src/plop_app.erl
new file mode 100644
index 0000000..d2e99ac
--- /dev/null
+++ b/src/plop_app.erl
@@ -0,0 +1,9 @@
+-module(plop_app).
+-behaviour(application).
+-export([start/2, stop/1]).
+
+start(_Type, Args) ->
+ plop_sup:start_link(Args).
+
+stop(_State) ->
+ ok.
diff --git a/src/plop_sup.erl b/src/plop_sup.erl
new file mode 100644
index 0000000..18ed926
--- /dev/null
+++ b/src/plop_sup.erl
@@ -0,0 +1,28 @@
+-module(plop_sup).
+-behaviour(supervisor).
+
+-export([start_link/1, init/1]).
+-export([start_in_shell/0]).
+
+start_link(Args) ->
+ supervisor:start_link({local, ?MODULE}, ?MODULE, Args).
+
+%% For testing.
+start_in_shell() ->
+ {ok, Pid} = start_link([]),
+ unlink(Pid).
+
+%% Supervisor callback
+init(_Args) ->
+ {ok, {{one_for_one, 3, 10},
+ [{the_plop,
+ {plop, start_link, []}, % Here's where key file name and pass phrase go.
+ permanent,
+ 10000, % Shut down in 10s.
+ worker, [plop]},
+ {the_db,
+ {db, start_link, []},
+ permanent,
+ 10000,
+ worker, [db]}
+ ]}}.