Add support for password digests.
[deb_shairplay.git] / src / lib / dnssd.m
index 1335a73d115dcc2dd78703b6f5a1d9506ce2bc7c..37ba32f30408e5f88fb3fd69984204214c507558 100644 (file)
@@ -1,3 +1,17 @@
+/**
+ *  Copyright (C) 2011-2012  Juho Vähä-Herttua
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ */
+
 #include <stdlib.h>
 
 #include "dnssd.h"
 #define MAX_SERVNAME 256
 
 struct dnssd_s {
-       char hwaddr[MAX_HWADDR_LEN];
-       int hwaddrlen;
-
        NSNetService *raopService;
        NSNetService *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) {
                if (error) *error = DNSSD_ERROR_OUTOFMEM;
                return NULL;
        }
-       memcpy(dnssd->hwaddr, hwaddr, hwaddrlen);
-       dnssd->hwaddrlen = hwaddrlen;
-
        return dnssd;
 }
 
@@ -46,7 +50,7 @@ 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)
 {
        char hwaddrstr[MAX_SERVNAME];
        NSString *serviceString;
@@ -61,7 +65,7 @@ dnssd_register_raop(dnssd_t *dnssd, const char *name, unsigned short port)
        }
 
        /* Convert the hardware address to string */
-       ret = utils_hwaddr_raop(hwaddrstr, sizeof(hwaddrstr), dnssd->hwaddr, dnssd->hwaddrlen);
+       ret = utils_hwaddr_raop(hwaddrstr, sizeof(hwaddrstr), hwaddr, hwaddrlen);
        if (ret < 0) {
                return -2;
        }
@@ -76,7 +80,11 @@ dnssd_register_raop(dnssd_t *dnssd, const char *name, unsigned short port)
        [txtDict setValue:[NSString stringWithUTF8String:RAOP_DA] forKey:@"da"];
        [txtDict setValue:[NSString stringWithUTF8String:RAOP_SR] forKey:@"sr"];
        [txtDict setValue:[NSString stringWithUTF8String:RAOP_SS] forKey:@"ss"];
-       [txtDict setValue:[NSString stringWithUTF8String:RAOP_PW] forKey:@"pw"];
+       if (password) {
+               [txtDict setValue:@"true" forKey:@"pw"];
+       } else {
+               [txtDict setValue:@"false" forKey:@"pw"];
+       }
        [txtDict setValue:[NSString stringWithUTF8String:RAOP_VN] forKey:@"vn"];
        [txtDict setValue:[NSString stringWithUTF8String:RAOP_TP] forKey:@"tp"];
        [txtDict setValue:[NSString stringWithUTF8String:RAOP_MD] forKey:@"md"];
@@ -96,7 +104,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)
 {
        NSMutableDictionary *txtDict;
        NSData *txtData;
@@ -111,7 +119,7 @@ dnssd_register_airplay(dnssd_t *dnssd, const char *name, unsigned short port)
        }
 
        /* 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) {
                return -2;
        }