#ifndef WIN32
# include <dns_sd.h>
+# define DNSSD_STDCALL
#else
# include <stdint.h>
# if !defined(EFI32) && !defined(EFI64)
-# define DNSSD_API __stdcall
+# define DNSSD_STDCALL __stdcall
# else
-# define DNSSD_API
+# define DNSSD_STDCALL
# endif
typedef struct _DNSServiceRef_t *DNSServiceRef;
typedef uint32_t DNSServiceFlags;
typedef int32_t DNSServiceErrorType;
-typedef void (DNSSD_API *DNSServiceRegisterReply)
+typedef void (DNSSD_STDCALL *DNSServiceRegisterReply)
(
DNSServiceRef sdRef,
DNSServiceFlags flags,
);
#endif
-typedef DNSServiceErrorType (DNSSD_API *DNSServiceRegister_t)
+typedef DNSServiceErrorType (DNSSD_STDCALL *DNSServiceRegister_t)
(
DNSServiceRef *sdRef,
DNSServiceFlags flags,
DNSServiceRegisterReply callBack,
void *context
);
-typedef void (DNSSD_API *DNSServiceRefDeallocate_t)(DNSServiceRef sdRef);
-typedef void (DNSSD_API *TXTRecordCreate_t)
+typedef void (DNSSD_STDCALL *DNSServiceRefDeallocate_t)(DNSServiceRef sdRef);
+typedef void (DNSSD_STDCALL *TXTRecordCreate_t)
(
TXTRecordRef *txtRecord,
uint16_t bufferLen,
void *buffer
);
-typedef void (DNSSD_API *TXTRecordDeallocate_t)(TXTRecordRef *txtRecord);
-typedef DNSServiceErrorType (DNSSD_API *TXTRecordSetValue_t)
+typedef void (DNSSD_STDCALL *TXTRecordDeallocate_t)(TXTRecordRef *txtRecord);
+typedef DNSServiceErrorType (DNSSD_STDCALL *TXTRecordSetValue_t)
(
TXTRecordRef *txtRecord,
const char *key,
uint8_t valueSize,
const void *value
);
-typedef uint16_t (DNSSD_API *TXTRecordGetLength_t)(const TXTRecordRef *txtRecord);
-typedef const void * (DNSSD_API *TXTRecordGetBytesPtr_t)(const TXTRecordRef *txtRecord);
+typedef uint16_t (DNSSD_STDCALL *TXTRecordGetLength_t)(const TXTRecordRef *txtRecord);
+typedef const void * (DNSSD_STDCALL *TXTRecordGetBytesPtr_t)(const TXTRecordRef *txtRecord);
struct dnssd_s {
TXTRecordGetBytesPtr_t TXTRecordGetBytesPtr;
TXTRecordDeallocate_t TXTRecordDeallocate;
- char hwaddr[MAX_HWADDR_LEN];
- int hwaddrlen;
-
DNSServiceRef raopService;
DNSServiceRef airplayService;
};
dnssd_t *
-dnssd_init(const char *hwaddr, int hwaddrlen, int *error)
+dnssd_init(int *error)
{
dnssd_t *dnssd;
if (error) *error = DNSSD_ERROR_NOERROR;
- if (hwaddrlen > MAX_HWADDR_LEN) {
- if (error) *error = DNSSD_ERROR_HWADDRLEN;
- return NULL;
- }
dnssd = calloc(1, sizeof(dnssd_t));
if (!dnssd) {
dnssd->TXTRecordDeallocate = &TXTRecordDeallocate;
#endif
- memcpy(dnssd->hwaddr, hwaddr, hwaddrlen);
- dnssd->hwaddrlen = hwaddrlen;
-
return dnssd;
}
}
int
-dnssd_register_raop(dnssd_t *dnssd, const char *name, unsigned short port)
+dnssd_register_raop(dnssd_t *dnssd, const char *name, unsigned short port, const char *hwaddr, int hwaddrlen)
{
TXTRecordRef txtRecord;
char servname[MAX_SERVNAME];
int ret;
assert(dnssd);
+ assert(name);
+ assert(hwaddr);
dnssd->TXTRecordCreate(&txtRecord, 0, NULL);
dnssd->TXTRecordSetValue(&txtRecord, "txtvers", strlen(RAOP_TXTVERS), RAOP_TXTVERS);
dnssd->TXTRecordSetValue(&txtRecord, "sf", strlen(RAOP_SF), RAOP_SF);
/* Convert hardware address to string */
- ret = utils_hwaddr_raop(servname, sizeof(servname), dnssd->hwaddr, dnssd->hwaddrlen);
+ ret = utils_hwaddr_raop(servname, sizeof(servname), hwaddr, hwaddrlen);
if (ret < 0) {
/* FIXME: handle better */
return -1;
}
int
-dnssd_register_airplay(dnssd_t *dnssd, const char *name, unsigned short port)
+dnssd_register_airplay(dnssd_t *dnssd, const char *name, unsigned short port, const char *hwaddr, int hwaddrlen)
{
TXTRecordRef txtRecord;
char deviceid[3*MAX_HWADDR_LEN];
int ret;
assert(dnssd);
+ assert(name);
+ assert(hwaddr);
/* Convert hardware address to string */
- ret = utils_hwaddr_airplay(deviceid, sizeof(deviceid), dnssd->hwaddr, dnssd->hwaddrlen);
+ ret = utils_hwaddr_airplay(deviceid, sizeof(deviceid), hwaddr, hwaddrlen);
if (ret < 0) {
/* FIXME: handle better */
return -1;