forked from jlouis/etorrent_core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
etorrent_magnet_sup.erl
48 lines (39 loc) · 1.75 KB
/
etorrent_magnet_sup.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
%% @author Jesper Louis Andersen <jesper.louis.andersen@gmail.com>
%% @doc Supervise a torrent file.
%% <p>This supervisor controls a single torrent download. It sits at
%% the top of the supervisor tree for a torrent.</p>
%% @end
-module(etorrent_magnet_sup).
-behaviour(supervisor).
%% API
-export([start_link/5]).
%% Supervisor callbacks
-export([init/1]).
%% =======================================================================
%% @doc Start up the supervisor
%% @end
-spec start_link(binary(), binary(), integer(), [[string()]], list()) ->
{ok, pid()} | ignore | {error, term()}.
start_link(TorrentIH, LocalPeerID, TorrentID, UrlTiers, Options)
when is_binary(TorrentIH), is_binary(LocalPeerID), is_integer(TorrentID) ->
supervisor:start_link(?MODULE, [TorrentIH, LocalPeerID, TorrentID, UrlTiers, Options]).
%% ====================================================================
%% @private
init([TorrentIH, LocalPeerID, TorrentID, UrlTiers, Options]) ->
lager:debug("Init torrent magnet supervisor #~p.", [TorrentID]),
etorrent_dht:add_torrent(TorrentIH, TorrentID),
Control =
{control,
{etorrent_magnet_ctl, start_link,
[TorrentIH, LocalPeerID, TorrentID, UrlTiers, Options]},
permanent, 5000, worker, [etorrent_magnet_ctl]},
PeerPool =
{peer_pool_sup,
{etorrent_magnet_peer_pool, start_link, [TorrentID]},
transient, 5000, supervisor, [etorrent_magnet_peer_pool]},
Tracker =
{tracker_communication,
{etorrent_tracker_communication, start_link,
[self(), UrlTiers, TorrentIH, LocalPeerID, TorrentID]},
transient, 15000, worker, [etorrent_tracker_communication]},
{ok, {{one_for_all, 1, 60}, [Control, PeerPool, Tracker]}}.