Current section

Files

Jump to
nodefinder src nodefinder.erl
Raw

src/nodefinder.erl

%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
-module(nodefinder).
%% external interface
-export([ec2_start/5,
ec2_discover/1,
ec2_stop/0,
multicast_start/0,
multicast_start/5,
multicast_discover/1,
multicast_stop/0,
timeout_min/0]).
-spec ec2_start(AccessKeyID :: string(),
SecretAccessKey :: string(),
EC2Host :: string(),
Groups :: list(nodefinder_ec2:group()),
Tags :: list(nodefinder_ec2:tag())) ->
{ok, pid()} |
{error, any()}.
ec2_start(AccessKeyID, SecretAccessKey, EC2Host, Groups, Tags)
when is_integer(hd(AccessKeyID)), is_integer(hd(SecretAccessKey)),
is_integer(hd(EC2Host)), is_list(Groups), is_list(Tags) ->
nodefinder_sup:start_child(nodefinder_ec2,
[AccessKeyID, SecretAccessKey, EC2Host,
Groups, Tags]).
-spec ec2_discover(Timeout :: pos_integer()) ->
ok |
{error, any()}.
ec2_discover(Timeout)
when is_integer(Timeout), Timeout > 0 ->
nodefinder_ec2:discover(Timeout).
-spec ec2_stop() ->
ok |
{error, any()}.
ec2_stop() ->
nodefinder_sup:stop_child(nodefinder_ec2).
-spec multicast_start() ->
{ok, pid()} |
{error, any()}.
multicast_start() ->
multicast_start({0,0,0,0}, {224,0,0,1}, 4475, 1, 300).
-spec multicast_start(Interface :: inet:ip_address(),
Address :: inet:ip_address(),
Port :: inet:port_number(),
TTL :: non_neg_integer(),
TimeoutSeconds :: pos_integer()) ->
{ok, pid()} |
{error, any()}.
multicast_start(Interface, Address, Port, TTL, TimeoutSeconds)
when is_integer(Port), Port > 0,
is_integer(TTL), TTL >= 0,
is_integer(TimeoutSeconds), TimeoutSeconds > 0 ->
nodefinder_sup:start_child(nodefinder_multicast,
[Interface, Address,
Port, TTL, TimeoutSeconds]).
-spec multicast_discover(Timeout :: pos_integer()) ->
ok |
{error, any()}.
multicast_discover(Timeout)
when is_integer(Timeout), Timeout > 0 ->
nodefinder_multicast:discover(Timeout).
-spec multicast_stop() ->
ok |
{error, any()}.
multicast_stop() ->
nodefinder_sup:stop_child(nodefinder_multicast).
-spec timeout_min() ->
pos_integer().
timeout_min() ->
net_kernel:connecttime() + 100.