libeech

BitTorrent library
git clone git://z3bra.org/libeech.git
Log | Files | Refs | README | LICENSE

commit ce235dc3c86e16ce041a209277ebfa9cc50848d2
parent fad1cd5caca4176138b2378e02f18c782ecd886f
Author: z3bra <contactatz3bradotorg>
Date:   Thu Jul  5 13:56:30 +0200

Do not create peer in addpeer()

Diffstat:
libeech.c | 24+++++-------------------
libeech.h | 2+-
torrent.c | 3++-
3 files changed, 8 insertions(+), 21 deletions(-)
diff --git a/libeech.c b/libeech.c @@ -60,7 +60,7 @@ static long writepiece(struct torrent *, struct piece *); static int chkpiece(struct torrent *, struct piece *, long); /* manage a list of peers */ -static struct peer * addpeer(struct peer *, char *, int); +static struct peer * addpeer(struct peer *, struct peer *, char *, int); static struct peer * getpeer(struct peer *, char *, int); static struct peer * delpeer(struct peer *, struct peer *); static int peercnt(struct peer *); @@ -332,22 +332,10 @@ chkpiece(struct torrent *t, struct piece *p, long n) return memcmp(t->ph + n*20, hash, 20); } -/* - * Create a new peer struct, and add it to the list of peers - * - * TODO: Remove the malloc() and have the caller pass the `struct peer` - * to add as an argument. - * Memory tracking of those peers is on the caller responsibility. - */ +/* Initialize a peer and add it to the peer list */ static struct peer * -addpeer(struct peer *pl, char *host, int port) +addpeer(struct peer *pl, struct peer *p, char *host, int port) { - struct peer *p; - - p = malloc(sizeof(*p)); - if (!p) - return NULL; - p->fd = -1; p->state = 0; p->next = pl; @@ -972,15 +960,13 @@ glch_loadtorrent(struct torrent *t, char *b, size_t s) * RETURN VALUE: returns 0 if connection is established, -1 otherwise */ int -glch_addpeer(struct torrent *t, char *host, int port) +glch_addpeer(struct torrent *t, struct peer *p, char *host, int port) { - struct peer *p; - /* ignore request if peer already exists */ if (getpeer(t->peers, host, port)) return 0; - p = addpeer(t->peers, host, port); + addpeer(t->peers, p, host, port); p->fd = netconn(p->host, p->port); if (!p || p->fd < 0) { free(p); diff --git a/libeech.h b/libeech.h @@ -64,5 +64,5 @@ struct torrent { }; int glch_loadtorrent(struct torrent *, char *, size_t); -int glch_addpeer(struct torrent *, char *, int); +int glch_addpeer(struct torrent *, struct peer *, char *, int); int glch_leech(struct torrent *, int); diff --git a/torrent.c b/torrent.c @@ -53,6 +53,7 @@ main(int argc, char *argv[]) char *b, *h = "localhost"; char hex[41]; struct torrent t; + struct peer peer; ARGBEGIN { case 'h': @@ -81,7 +82,7 @@ main(int argc, char *argv[]) for (i=0; i<t.nfile; i++) printf("\t%s\n", t.files[i].path); - glch_addpeer(&t, h, p); + glch_addpeer(&t, &peer, h, p); for (;;) glch_leech(&t, 5000);