summaryrefslogtreecommitdiffstats
path: root/utils/info.c
blob: 6f082dc26ba64f218eeb01d9663cee090b5500df (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <error.h>
#include <sys/time.h>
#include <poll.h>
#define TORRENT_USERDATA struct dht * dht;
#define DHT_USERDATA struct pollfd ** pollfds; size_t * pollfds_size; nfds_t * nfds;
#include <dht.c>
#define S0(x) (x ? x : "")
int we_have_disconnected = 0;
#define DISCONNECTION_MIXIN_BOTTOM we_have_disconnected++;
#include <tcp.c>
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);
}