/* $Id$ */ /* * Copyright (c) 2005 Dimitri Sokolyuk * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _META_H_ #define _META_H_ #if 0 #include #endif #ifndef SHA1LEN #define SHA1LEN 20 #endif #define btsetbit(a, i) ((a)[(i) / NBBY] |= 1 << (NBBY - ((i) % NBBY) - 1)) #define btclrbit(a, i) ((a)[(i) / NBBY] &= ~(1 << (NBBY - ((i) % NBBY) - 1))) #define btisset(a, i) ((a)[(i) / NBBY] & (1 << (NBBY - ((i) % NBBY) - 1))) #define btisclr(a, i) (((a)[(i) / NBBY] & (1 << (NBBY - ((i) % NBBY) - 1))) == 0) struct btannounce { SIMPLEQ_ENTRY(btannounce) link; /* isn't used jet, preparation for an ann-list */ #if 0 /* obsolete */ struct sockaddr_in sin; #endif char *host; int port; char *path; }; SIMPLEQ_HEAD(btalist, btannounce); struct btfile { SIMPLEQ_ENTRY(btfile) link; off_t length; char *path; }; SIMPLEQ_HEAD(btflist, btfile); struct btmeta { char *fname; int nann; /* number of tracker */ struct btalist btalist; /* SIMPLEQ_HEAD */ struct btannounce *announce; /* announce url */ char *name; /* name of file or directory */ off_t plength; /* length of one piece */ int npieces; /* number of pieces */ u_char (*pieces)[SHA1LEN]; /* pieces SHA1 check-sum */ u_char infohash[SHA1LEN]; /* needed by peer */ off_t size; /* size overall */ int nfiles; /* num of files */ struct btflist flist; /* SIMPLEQ_HEAD */ /* aux */ char *comment; char *by; /* publisher */ time_t date; /* published */ /* should that all be there? */ int bitlen; char *bitfield; /* needed by peer (bitfield) */ int good; /* good pieces */ off_t left; /* needed by tracker */ #if 0 struct btmeta *next; /* XXX next torrent, isn't used yet */ #endif }; __BEGIN_DECLS struct btmeta *btreadmeta(char *); void btfreemeta(struct btmeta *); __END_DECLS #endif /* not _META_H_ */