/* $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. */ #include #include #include #include #include #include #include #include #include #include /* close(), getopt() */ #include "bencode.h" #include "context.h" #include "meta.h" #include "files.h" #include "peer.h" #include "tools.h" #include "tracker.h" #include "version.h" const char usagearg[] = "torrent"; int main(int argc, char **argv) { struct btmeta *mp; struct bttracker *tp; struct progresscb cb; enum event ev = EV_NONE; int ch, port = DEFPORT + 1; while ((ch = getopt(argc, argv, "p:skn")) != -1) switch (ch) { case 'p': port = atoi(optarg); if (port > 65535 || port < 1024) usage(usagearg); /* NOTREACHED */ break; case 's': ev = EV_STARTED; break; case 'k': ev = EV_STOPPED; break; case 'n': ev = EV_NONE; break; case '?': default: usage(usagearg); /* NOTREACHED */ } argc -= optind; argv += optind; if (argc != 1 || (mp = btreadmeta(*argv)) == NULL) usage(usagearg); if (btmkhier(mp) == -1) return -1; cb.progress = btchkprogress; cb.done = btchkdone; btchkfiles(mp, &cb); tp = btinittracker(mp, port); /* ---8<------ */ memcpy(tp->localid, "-XB0100-AAAAAAAAAAAA", SHA1LEN); tp->event = ev; /* DEBUG: initial call */ tp->event = EV_STARTED; btcalltracker(tp); btdumpplist(&tp->plist); printf("def interval: %d\n", tp->interval); printf("min interval: %d\n", tp->minterval); sleep(10); tp->event = EV_NONE; btcalltracker(tp); btdumpplist(&tp->plist); /* DEBUG: final call */ tp->event = EV_STOPPED; btcalltracker(tp); /* btmainloop(); */ btfreetracker(tp); btfreemeta(mp); return 0; }