Make some modifications to the API to make bindings easier
authorJuho Vähä-Herttua <juhovh@iki.fi>
Sun, 18 Mar 2012 20:45:10 +0000 (22:45 +0200)
committerJuho Vähä-Herttua <juhovh@iki.fi>
Wed, 16 May 2012 21:33:31 +0000 (00:33 +0300)
src/include/dnssd.h
src/include/raop.h
src/lib/dnssd.c
src/lib/dnssd.m
src/lib/raop_rtp.c
src/test/dnssd_test.c
src/test/dnssd_test.m
src/test/example.c

index 15576bb529ded7aa247cd71a8846a467990ed088..4ad0e348bffc802950771fba2f173e999fbc32f8 100644 (file)
@@ -19,10 +19,10 @@ extern "C" {
 
 typedef struct dnssd_s dnssd_t;
 
-DNSSD_API dnssd_t *dnssd_init(const char *hwaddr, int hwaddrlen, int *error);
+DNSSD_API dnssd_t *dnssd_init(int *error);
 
-DNSSD_API int dnssd_register_raop(dnssd_t *dnssd, const char *name, unsigned short port);
-DNSSD_API int dnssd_register_airplay(dnssd_t *dnssd, const char *name, unsigned short port);
+DNSSD_API int dnssd_register_raop(dnssd_t *dnssd, const char *name, unsigned short port, const char *hwaddr, int hwaddrlen);
+DNSSD_API int dnssd_register_airplay(dnssd_t *dnssd, const char *name, unsigned short port, const char *hwaddr, int hwaddrlen);
 
 DNSSD_API void dnssd_unregister_raop(dnssd_t *dnssd);
 DNSSD_API void dnssd_unregister_airplay(dnssd_t *dnssd);
index 13f60bb3e6c9d15c3f9a36a70604883d4eebe6df..51c8f0a607b280d328f23feb5b8a2b1ac11c3cf3 100644 (file)
@@ -15,7 +15,7 @@ typedef struct raop_s raop_t;
 
 struct raop_callbacks_s {
        void* cls;
-       void  (*audio_init)(void *cls, void **session, int bits, int channels, int samplerate);
+       void* (*audio_init)(void *cls, int bits, int channels, int samplerate);
        void  (*audio_set_volume)(void *cls, void *session, float volume);
        void  (*audio_process)(void *cls, void *session, const void *buffer, int buflen);
        void  (*audio_flush)(void *cls, void *session);
index 3efaa97958755b3e7a7bde8dcd6bc89b482e3b70..3f6d9cf283c748e77bcca4a0105a2a15ba8be31f 100644 (file)
@@ -102,9 +102,6 @@ struct dnssd_s {
        TXTRecordGetBytesPtr_t     TXTRecordGetBytesPtr;
        TXTRecordDeallocate_t      TXTRecordDeallocate;
 
-       char hwaddr[MAX_HWADDR_LEN];
-       int hwaddrlen;
-
        DNSServiceRef raopService;
        DNSServiceRef airplayService;
 };
@@ -112,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) {
@@ -161,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;
 }
 
@@ -179,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)
 {
        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);
@@ -205,7 +197,7 @@ dnssd_register_raop(dnssd_t *dnssd, const char *name, unsigned short port)
        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;
@@ -235,7 +227,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];
@@ -243,9 +235,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;
index ef69178707817830f58508cce1218df499a448dc..5f87b1f68111f4507b0bc18de4bcb01234698b27 100644 (file)
 #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;
 }
 
@@ -60,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)
 {
        char hwaddrstr[MAX_SERVNAME];
        NSString *serviceString;
@@ -75,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;
        }
@@ -110,7 +100,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;
@@ -125,7 +115,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;
        }
index 607e760c31457eea80600793e7adb8343d1e7377..205eee98c097b8b550be662f7bb8aeb2768072c5 100644 (file)
@@ -247,7 +247,7 @@ raop_rtp_thread_udp(void *arg)
        assert(raop_rtp);
 
        config = raop_buffer_get_config(raop_rtp->buffer);
-       raop_rtp->callbacks.audio_init(raop_rtp->callbacks.cls, &cb_data,
+       cb_data = raop_rtp->callbacks.audio_init(raop_rtp->callbacks.cls,
                                       config->bitDepth,
                                       config->numChannels,
                                       config->sampleRate);
@@ -376,7 +376,7 @@ raop_rtp_thread_tcp(void *arg)
        assert(raop_rtp);
 
        config = raop_buffer_get_config(raop_rtp->buffer);
-       raop_rtp->callbacks.audio_init(raop_rtp->callbacks.cls, &cb_data,
+       cb_data = raop_rtp->callbacks.audio_init(raop_rtp->callbacks.cls,
                                       config->bitDepth,
                                       config->numChannels,
                                       config->sampleRate);
index 7e329c4a0140cfad80810aaef81725acec8b7509..9e5b4fc90e25e270f593873a0003021a3bc4be66 100644 (file)
@@ -26,13 +26,13 @@ main(int argc, char *argv[])
        }
 #endif
 
-       dnssd = dnssd_init(hwaddr, sizeof(hwaddr), NULL);
+       dnssd = dnssd_init(NULL);
        if (!dnssd) {
                printf("Failed to init dnssd\n");
                return -1;
        }
-       dnssd_register_raop(dnssd, "Test", 5000);
-       dnssd_register_airplay(dnssd, "Test", 6000);
+       dnssd_register_raop(dnssd, "Test", 5000, hwaddr, sizeof(hwaddr));
+       dnssd_register_airplay(dnssd, "Test", 6000, hwaddr, sizeof(hwaddr));
 
        sleepms(60000);
 
index d4ccbe25695543aef60196e9e8c16f63c5f39ae6..d05040b22c5a1df281e3604da301f2caa5b5b554 100644 (file)
@@ -13,13 +13,13 @@ main(int argc, char *argv[])
        const char hwaddr[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB };
        dnssd_t *dnssd;
 
-       dnssd = dnssd_init(hwaddr, sizeof(hwaddr), NULL);
+       dnssd = dnssd_init(NULL);
        if (!dnssd) {
                printf("Failed to init dnssd\n");
                return -1;
        }
-       dnssd_register_raop(dnssd, "Test", 5000);
-       dnssd_register_airplay(dnssd, "Test", 6000);
+       dnssd_register_raop(dnssd, "Test", 5000, hwaddr, sizeof(hwaddr));
+       dnssd_register_airplay(dnssd, "Test", 6000, hwaddr, sizeof(hwaddr));
 
        sleepms(60000);
 
index 98c6fcd66f5ac5b213e7c6bab4eb8dff5e2b0bb9..41beb567b31c4c96d8d86316901f42c6364dd5ee 100644 (file)
@@ -9,10 +9,10 @@
 #include "dnssd.h"
 #include "raop.h"
 
-static void
-audio_init(void *cls, void **session, int bits, int channels, int samplerate)
+static void *
+audio_init(void *cls, int bits, int channels, int samplerate)
 {
-       *session = fopen("audio.pcm", "wb");
+       return fopen("audio.pcm", "wb");
 }
 
 static void
@@ -63,8 +63,8 @@ main(int argc, char *argv[])
        raop = raop_init_from_keyfile(&raop_cbs, "airport.key");
        raop_start(raop, &raop_port, hwaddr, sizeof(hwaddr));
 
-       dnssd = dnssd_init(hwaddr, sizeof(hwaddr), NULL);
-       dnssd_register_raop(dnssd, name, raop_port);
+       dnssd = dnssd_init(NULL);
+       dnssd_register_raop(dnssd, name, raop_port, hwaddr, sizeof(hwaddr));
 
 #ifndef WIN32
        sleep(100);