#include #include #include #define TORRENT_USERDATA struct dht * dht; #define DHT_USERDATA struct pollfd ** pollfds; size_t * pollfds_size; nfds_t * nfds; #include #define S0(x) (x ? x : "") int we_have_disconnected = 0; #define DISCONNECTION_MIXIN_BOTTOM we_have_disconnected++; #include int main (int argc, char ** argv) { if (argc != 1+3) error_at_line(1, 0, __FILE__, __LINE__, "%s infohash ipv6 port", S0(argv[0])); struct dht * dht = dht_init(NULL); nfds_t nfds = 0; size_t pollfds_size = 1; struct pollfd * pollfds = malloc(sizeof *pollfds); dht->nfds = &nfds; dht->pollfds_size = &pollfds_size; dht->pollfds = &pollfds; dht->connection = connection; dht->verbosity |= incoming_dht | outgoing_dht | expected | debug; dht->torrents = torrent_init(); hex2bin(dht->torrents->hash, argv[1], 20); dht->torrents->type = info; dht->torrents->peers = peer_init(); inet_pton(AF_INET6, argv[2], dht->torrents->peers->addr.sin6_addr.s6_addr); dht->torrents->peers->addr.sin6_port = htons(atoi(argv[3])); periodic(dht); while (!we_have_disconnected && poll(*dht->pollfds, *dht->nfds, -1) != -1) tcp_work(dht); dht_free(dht); }