Пример #1
0
int
mdns_lookup_rev(struct mdns *m, struct in_addr *addr)
{
	char	name[MAXHOSTNAMELEN];

	reversstr(name, addr);
	name[sizeof(name) - 1] = '\0';
	
	return (mdns_lookup_PTR(m, name));
}
Пример #2
0
int
main(int argc, char *argv[])
{
	int			sockfd;
	struct mdns		mdns;
	struct mdns_service	ms;

	/* parse options */
	if ((res = parse(argc - 1, argv + 1)) == NULL)
		exit(1);

	if ((sockfd = mdns_open(&mdns)) == -1)
		err(1, "mdns_open");

	mdns_set_lookup_A_hook(&mdns, my_lookup_A_hook);
	mdns_set_lookup_PTR_hook(&mdns, my_lookup_PTR_hook);
	mdns_set_lookup_HINFO_hook(&mdns, my_lookup_HINFO_hook);
	mdns_set_browse_hook(&mdns, my_browse_hook);
	mdns_set_resolve_hook(&mdns, my_resolve_hook);
	mdns_set_group_hook(&mdns, my_group_hook);

	/* process user request */
	switch (res->action) {
	case NONE:
		usage();
		/* not reached */
		break;
	case LOOKUP:
		if (res->flags & F_A || res->flags == 0)
			if (mdns_lookup_A(&mdns, res->hostname) == -1)
				err(1, "mdns_lookup_A");

		if (res->flags & F_HINFO)
			if (mdns_lookup_HINFO(&mdns, res->hostname) == -1)
				err(1, "mdns_lookup_A");

		if (res->flags & F_PTR)
			if (mdns_lookup_PTR(&mdns, res->hostname) == -1)
				err(1, "mdns_lookup_A");
		break;
	case RLOOKUP:
		if (mdns_lookup_rev(&mdns, &res->addr) == -1)
			err(1, "mdns_lookup_A");
		break;
	case BROWSE_PROTO:
		if (mdns_browse_add(&mdns, res->app, res->proto) == -1)
			err(1, "mdns_browse_add");
		break;		/* NOTREACHED */
	case PUBLISH:
		if (mdns_group_add(&mdns, res->srvname) == -1)
			err(1, "mdns_group_add");
		if (mdns_service_init(&ms, res->srvname, res->app, res->proto,
		    res->port, res->txtstring, NULL, NULL) == -1)
			errx(1, "mdns_service_init");
		if (mdns_group_add_service(&mdns, res->srvname, &ms) == -1)
			errx(1, "mdns_group_add_service");
		if (mdns_group_commit(&mdns, res->srvname) == -1)
			errx(1, "mdns_group_commit");
		break;
	case PROXY:
		if (mdns_group_add(&mdns, res->srvname) == -1)
			err(1, "mdns_group_add");
		if (mdns_service_init(&ms, res->srvname, res->app, res->proto,
		    res->port, res->txtstring, res->hostname, &res->addr) == -1)
			errx(1, "mdns_service_init");
		if (mdns_group_add_service(&mdns, res->srvname, &ms) == -1)
			errx(1, "mdns_group_add_service");
		if (mdns_group_commit(&mdns, res->srvname) == -1)
			errx(1, "mdns_group_commit");
		break;
	default:
		errx(1, "Unknown action");
		break;		/* NOTREACHED */
	}

	for (; ;) {
		ssize_t n;

		n = mdns_read(&mdns);
		fflush(stdout);
		if (n == -1)
			err(1, "mdns_read");
		if (n == 0)
			errx(1, "Server closed socket");
		if ((res->action == LOOKUP ||
		    res->action == RLOOKUP)
		    && res->flags == 0)
			exit(0);
	}
}