X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fdnssd.c;h=dea813721152754a998a5c0f157912ba3eaad92e;hb=e66980f2bba24986245c30f481ceee6d977d65b9;hp=d2186e956ce6bf4a164547f40c2ef1863190f3db;hpb=23e7e3ae2b2adfa49635495c0950b76e17987c93;p=deb_shairplay.git diff --git a/src/lib/dnssd.c b/src/lib/dnssd.c index d2186e9..dea8137 100644 --- a/src/lib/dnssd.c +++ b/src/lib/dnssd.c @@ -28,12 +28,13 @@ #ifndef WIN32 # include +# define DNSSD_STDCALL #else # include # 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; @@ -42,7 +43,7 @@ typedef union _TXTRecordRef_t { char PrivateData[16]; char *ForceNaturalAlignmen typedef uint32_t DNSServiceFlags; typedef int32_t DNSServiceErrorType; -typedef void (DNSSD_API *DNSServiceRegisterReply) +typedef void (DNSSD_STDCALL *DNSServiceRegisterReply) ( DNSServiceRef sdRef, DNSServiceFlags flags, @@ -54,7 +55,7 @@ typedef void (DNSSD_API *DNSServiceRegisterReply) ); #endif -typedef DNSServiceErrorType (DNSSD_API *DNSServiceRegister_t) +typedef DNSServiceErrorType (DNSSD_STDCALL *DNSServiceRegister_t) ( DNSServiceRef *sdRef, DNSServiceFlags flags, @@ -69,23 +70,23 @@ typedef DNSServiceErrorType (DNSSD_API *DNSServiceRegister_t) 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 { @@ -101,9 +102,6 @@ struct dnssd_s { TXTRecordGetBytesPtr_t TXTRecordGetBytesPtr; TXTRecordDeallocate_t TXTRecordDeallocate; - char hwaddr[MAX_HWADDR_LEN]; - int hwaddrlen; - DNSServiceRef raopService; DNSServiceRef airplayService; }; @@ -111,15 +109,11 @@ struct dnssd_s { 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) { @@ -160,9 +154,6 @@ dnssd_init(const char *hwaddr, int hwaddrlen, int *error) dnssd->TXTRecordDeallocate = &TXTRecordDeallocate; #endif - memcpy(dnssd->hwaddr, hwaddr, hwaddrlen); - dnssd->hwaddrlen = hwaddrlen; - return dnssd; } @@ -178,13 +169,15 @@ dnssd_destroy(dnssd_t *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, int password) { 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); @@ -195,16 +188,20 @@ dnssd_register_raop(dnssd_t *dnssd, const char *name, unsigned short port) dnssd->TXTRecordSetValue(&txtRecord, "da", strlen(RAOP_DA), RAOP_DA); dnssd->TXTRecordSetValue(&txtRecord, "sr", strlen(RAOP_SR), RAOP_SR); dnssd->TXTRecordSetValue(&txtRecord, "ss", strlen(RAOP_SS), RAOP_SS); - dnssd->TXTRecordSetValue(&txtRecord, "pw", strlen(RAOP_PW), RAOP_PW); + if (password) { + dnssd->TXTRecordSetValue(&txtRecord, "pw", strlen("true"), "true"); + } else { + dnssd->TXTRecordSetValue(&txtRecord, "pw", strlen("false"), "false"); + } dnssd->TXTRecordSetValue(&txtRecord, "vn", strlen(RAOP_VN), RAOP_VN); dnssd->TXTRecordSetValue(&txtRecord, "tp", strlen(RAOP_TP), RAOP_TP); dnssd->TXTRecordSetValue(&txtRecord, "md", strlen(RAOP_MD), RAOP_MD); dnssd->TXTRecordSetValue(&txtRecord, "vs", strlen(GLOBAL_VERSION), GLOBAL_VERSION); - dnssd->TXTRecordSetValue(&txtRecord, "am", strlen(RAOP_AM), RAOP_AM); - dnssd->TXTRecordSetValue(&txtRecord, "sf", strlen(RAOP_SF), RAOP_SF); + dnssd->TXTRecordSetValue(&txtRecord, "sm", strlen(RAOP_SM), RAOP_SM); + dnssd->TXTRecordSetValue(&txtRecord, "ek", strlen(RAOP_EK), RAOP_EK); /* 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; @@ -234,7 +231,7 @@ dnssd_register_raop(dnssd_t *dnssd, const char *name, unsigned short port) } 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]; @@ -242,9 +239,11 @@ dnssd_register_airplay(dnssd_t *dnssd, const char *name, unsigned short port) 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;