owntone-server/src/mdns.h
ejurgensen df7456dc39 [mdns] Make connection test optional and only do it for Airplay (fixes #602)
Some remotes don't respond as expected to the test. Retune will give connection
refused, because the test is made too quickly, before the service is running.

Even if we delay the test it won't work because Retune crashes.

Since the false mdns advertisements are only seen on Airplay, we only do the
test there.
2018-10-14 22:13:58 +02:00

71 lines
2.0 KiB
C

#ifndef __MDNS_H__
#define __MDNS_H__
#include "misc.h"
enum mdns_options
{
// Test connection to device and only call back if successful
MDNS_CONNECTION_TEST = (1 << 1),
};
typedef void (* mdns_browse_cb)(const char *name, const char *type, const char *domain, const char *hostname, int family, const char *address, int port, struct keyval *txt);
/*
* Start a mDNS client
* Call only from the main thread!
*
* @return 0 on success, -1 on error
*/
int
mdns_init(void);
/*
* Removes registered services, stops service browsers and stop the mDNS client
* Call only from the main thread!
*
*/
void
mdns_deinit(void);
/*
* Register (announce) a service with mDNS
* Call only from the main thread!
*
* @in name Name of service, e.g. "My Music on Debian"
* @in type Type of service to announce, e.g. "_daap._tcp"
* @in port Port of the service
* @in txt Pointer to array of strings with txt key/values ("Version=1")
* for DNS-SD TXT. The array must be terminated by a NULL pointer.
* @return 0 on success, -1 on error
*/
int
mdns_register(char *name, char *type, int port, char **txt);
/*
* Register a CNAME record, it will be an alias for hostname
* Call only from the main thread!
*
* @in name The CNAME alias, e.g. "forked-daapd.local"
* @return 0 on success, -1 on error
*/
int
mdns_cname(char *name);
/*
* Start a service browser, a callback will be made when the service changes state
* Call only from the main thread!
*
* @in type Type of service to look for, e.g. "_raop._tcp"
* @in family AF_INET to browse for ipv4 services, AF_INET6 for ipv6,
AF_UNSPEC for both
* @in flags See mdns_options (only supported by Avahi implementation)
* @in cb Callback when service state changes (e.g. appears/disappears)
* @return 0 on success, -1 on error
*/
int
mdns_browse(char *type, int family, mdns_browse_cb cb, enum mdns_options flags);
#endif /* !__MDNS_H__ */