summary refs log tree commit diff
path: root/btpd/torrent.h
blob: c9a942b6063cc35cffdb8d2906da3e0db0a4c1c3 (plain)
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
#ifndef BTPD_TORRENT_H
#define BTPD_TORRENT_H

#define PIECE_BLOCKLEN (1 << 14)
#define RELPATH_SIZE 41

enum torrent_state {
    T_STARTING,
    T_ACTIVE,
    T_STOPPING
};

struct torrent {
    char relpath[RELPATH_SIZE];
    struct metainfo meta;

    enum torrent_state state;

    struct content *cm;
    struct tracker *tr;
    struct net *net;

    BTPDQ_ENTRY(torrent) entry;
};

BTPDQ_HEAD(torrent_tq, torrent);

unsigned torrent_count(void);
const struct torrent_tq *torrent_get_all(void);
struct torrent *torrent_get(const uint8_t *hash);

int torrent_start(const uint8_t *hash);
void torrent_stop(struct torrent *tp);
int torrent_set_links(const uint8_t *hash, const char *torrent,
    const char *content);

off_t torrent_piece_size(struct torrent *tp, uint32_t piece);
uint32_t torrent_piece_blocks(struct torrent *tp, uint32_t piece);
uint32_t torrent_block_size(struct torrent *tp, uint32_t piece,
    uint32_t nblocks, uint32_t block);

void torrent_on_cm_stopped(struct torrent *tp);
void torrent_on_cm_started(struct torrent *tp);
void torrent_on_tr_stopped(struct torrent *tp);

#endif