summaryrefslogtreecommitdiff
path: root/meta.h
diff options
context:
space:
mode:
Diffstat (limited to 'meta.h')
-rw-r--r--meta.h91
1 files changed, 91 insertions, 0 deletions
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 <demon@vhost.dyndns.org>
+ *
+ * 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 <netinet/in.h>
+#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_ */
+