Skip to content

Latest commit

 

History

History
53 lines (40 loc) · 1.43 KB

API.md

File metadata and controls

53 lines (40 loc) · 1.43 KB

Library

There are several use-cases for this project, the daemon provides one use of the library, yet many others are possible.

Here is a small example how to publish a few records:

char hlocal[384];
char nlocal[384];
char hostname[256];
char *path = "/path/to/service/"

gethostname(hostname, sizeof(hostname));

sprintf(hlocal, "%s._http._tcp.local.", hostname);
sprintf(nlocal, "%s.local.", hostname);

/* Announce that we have a _http._tcp service */
r = mdnsd_shared(d, "_services._dns-sd._udp.local.", QTYPE_PTR, 120);
mdnsd_set_host(d, r, "_http._tcp.local.");

r = mdnsd_shared(d, "_http._tcp.local.", QTYPE_PTR, 120);
mdnsd_set_host(d, r, hlocal);
r = mdnsd_unique(d, hlocal, QTYPE_SRV, 600, conflict, NULL);
mdnsd_set_srv(d, r, 0, 0, port, nlocal);
r = mdnsd_unique(d, nlocal, QTYPE_A, 600, conflict, NULL);
mdnsd_set_ip(d, r, ip_addr);
r = mdnsd_unique(d, nlocal, QTYPE_AAAA, 600, conflict, NULL);
mdnsd_set_ipv6(d, r, ip6_addr);

r = mdnsd_unique(d, hlocal, QTYPE_TXT, 600, conflict, NULL);
h = xht_new(11);
if (path && strlen(path))
	xht_set(h, "path", path);
packet = sd2txt(h, &len);
xht_free(h);
mdnsd_set_raw(d, r, (char *)packet, len);
free(packet);

How to read a previously published record:

r = mdnsd_get_published(d, "_http._tcp.local.");
while (r) {
	const mdns_answer_t *data;

	data = mdnsd_record_data(r);
	if (data)
		DBG("Found record of type %d", data->type);

	r = mdnsd_record_next(r);
}