From 51b913eb2ff91adfe8cd5e417759a6057c5a8a21 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 13 Nov 2008 16:17:55 +0000 Subject: XBitTorrent --- meta.h | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 meta.h (limited to 'meta.h') diff --git a/meta.h b/meta.h new file mode 100644 index 0000000..c6ba67c --- /dev/null +++ b/meta.h @@ -0,0 +1,91 @@ +/* $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_ */ + -- cgit v1.2.3