Example #1
0
struct peer_manager *peerman_seed(bool use_dns)
{
	struct peer_manager *peers;

	peers = peerman_new();
	if (!peers)
		return NULL;

	/* make DNS query for seed data */
	clist *tmp, *seedlist = NULL;
	if (use_dns)
		seedlist = bu_dns_seed_addrs();

	log_debug("peerman: DNS returned %zu addresses",
		clist_length(seedlist));

	clist_shuffle(seedlist);

	/* import seed data into peerman */
	tmp = seedlist;
	while (tmp) {
		struct bp_address *addr = tmp->data;
		tmp = tmp->next;

		peerman_add_addr(peers, addr, true);
		free(addr);
	}
	clist_free(seedlist);

	return peers;
}
Example #2
0
static void list_dns_seeds(void)
{
    GList *tmp, *addrlist = bu_dns_seed_addrs();

    size_t list_len = g_list_length(addrlist);
    unsigned int n_ent = 0;

    printf("[\n");

    for (tmp = addrlist; tmp != NULL; tmp = tmp->next) {
        struct bp_address *addr = tmp->data;
        char host[64];
        bool is_ipv4 = is_ipv4_mapped(addr->ip);

        if (is_ipv4) {
            struct sockaddr_in saddr;

            memset(&saddr, 0, sizeof(saddr));
            saddr.sin_family = AF_INET;
            memcpy(&saddr.sin_addr, &addr->ip[12], 4);

            getnameinfo((struct sockaddr *) &saddr, sizeof(saddr),
                        host, sizeof(host),
                        NULL, 0, NI_NUMERICHOST);
        } else {
            struct sockaddr_in6 saddr;

            memset(&saddr, 0, sizeof(saddr));
            saddr.sin6_family = AF_INET6;
            memcpy(&saddr.sin6_addr, &addr->ip, 16);

            getnameinfo((struct sockaddr *) &saddr, sizeof(saddr),
                        host, sizeof(host),
                        NULL, 0, NI_NUMERICHOST);
        }

        printf("  [ %s, \"%s\", %u, %llu ]%s\n",
               is_ipv4 ? "true" : "false",
               host,
               addr->port,
               (unsigned long long) addr->nServices,
               (n_ent == (list_len - 1)) ? "" : ",");

        n_ent++;
    }

    g_list_free_full(addrlist, g_free);

    printf("]\n");
}