diff options
author | popcornmix <popcornmix@gmail.com> | 2013-07-26 12:53:10 +0100 |
---|---|---|
committer | popcornmix <popcornmix@gmail.com> | 2013-08-07 22:35:12 +0100 |
commit | a9dbaf5280bc371e969ac19d3a822e8ef51608da (patch) | |
tree | 77f1bb38b2cf5e1d77506b98a6157ad469e10af2 /tools/rbp | |
parent | 5f2981bc15a6c65faaa69cdc80c816dfca26fb47 (diff) |
[rbp] Switch from libshairport to libshairplay for airplay
Diffstat (limited to 'tools/rbp')
-rw-r--r-- | tools/rbp/depends/Makefile | 2 | ||||
-rw-r--r-- | tools/rbp/depends/libshairplay/.gitignore | 1 | ||||
-rw-r--r-- | tools/rbp/depends/libshairplay/Makefile | 42 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/.gitignore | 1 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/001_add_ao.patch | 270 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/002_fix_install_header.patch | 12 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/003_fix_deadlock.patch | 10 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/004_fix_bad_access.patch | 22 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/005_fix_shutdown.patch | 10 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/006_no_printf.patch | 843 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/007_fix_syslog_defines.patch | 24 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/008-add-missing-libs.patch | 21 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/009_fix_ipv6.patch | 22 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/010_handle_metadata.patch | 154 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/011_fix_ipv4_fallback.patch | 10 | ||||
-rw-r--r-- | tools/rbp/depends/libshairport/Makefile | 51 |
16 files changed, 44 insertions, 1451 deletions
diff --git a/tools/rbp/depends/Makefile b/tools/rbp/depends/Makefile index 0bb195ef7d..5afbc5a0a8 100644 --- a/tools/rbp/depends/Makefile +++ b/tools/rbp/depends/Makefile @@ -5,7 +5,7 @@ ifeq ($(USE_BUILDROOT),1) SUBDIRS = xbmc else BUILDTOOLS = help2man autoconf automake libtool pkg-config yasm cmake patchelf - SUBDIRS = liblzo2 tiff libnfs jasper libplist libshairport tinyxml xbmc + SUBDIRS = liblzo2 tiff libnfs jasper libplist libshairplay tinyxml xbmc endif IMAGENAME = xbmc-rbp-`date +'%y%m%d'` diff --git a/tools/rbp/depends/libshairplay/.gitignore b/tools/rbp/depends/libshairplay/.gitignore new file mode 100644 index 0000000000..249df501e5 --- /dev/null +++ b/tools/rbp/depends/libshairplay/.gitignore @@ -0,0 +1 @@ +shairplay-139d5ef diff --git a/tools/rbp/depends/libshairplay/Makefile b/tools/rbp/depends/libshairplay/Makefile new file mode 100644 index 0000000000..28394662fe --- /dev/null +++ b/tools/rbp/depends/libshairplay/Makefile @@ -0,0 +1,42 @@ +include ../../Makefile.include +include ../depends.mk + +# lib name, version +LIBNAME=shairplay +VERSION=139d5ef +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.bz2 + +# configuration settings +CONFIGURE=./configure --prefix=$(PREFIX) + +# configuration settings +CONFIGURE=./configure --prefix=$(PREFIX) --host=$(HOST) + +LIBDYLIB=$(SOURCE)/.libs/$(LIBNAME).so + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) http://ftp3.ie.freebsd.org/pub/xbmc/build-deps/sources/shairplay-139d5ef.tar.bz2 #$(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + #cd $(SOURCE); patch -p0 < ../011_fix_ipv4_fallback.patch + cd $(SOURCE); autoreconf -vif + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j 1 -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + rm -rf $(SOURCE) .installed + +distclean:: + rm -rf $(SOURCE) .installed diff --git a/tools/rbp/depends/libshairport/.gitignore b/tools/rbp/depends/libshairport/.gitignore deleted file mode 100644 index fbc1ee7dff..0000000000 --- a/tools/rbp/depends/libshairport/.gitignore +++ /dev/null @@ -1 +0,0 @@ -libshairport-1.2.0.20310_lib diff --git a/tools/rbp/depends/libshairport/001_add_ao.patch b/tools/rbp/depends/libshairport/001_add_ao.patch deleted file mode 100644 index 995f7b78ee..0000000000 --- a/tools/rbp/depends/libshairport/001_add_ao.patch +++ /dev/null @@ -1,270 +0,0 @@ -diff -uP libshairport-1.2.0.20310_lib/src/ao.h ../../../../../libshairport-1.2.0.20310_lib/src/ao.h ---- src/ao.h 1970-01-01 01:00:00.000000000 +0100 -+++ src/ao.h 2011-09-25 20:36:36.000000000 +0200 -@@ -0,0 +1,156 @@ -+/* -+ * -+ * ao.h -+ * -+ * Original Copyright (C) Aaron Holtzman - May 1999 -+ * Modifications Copyright (C) Stan Seibert - July 2000, July 2001 -+ * More Modifications Copyright (C) Jack Moffitt - October 2000 -+ * -+ * This file is part of libao, a cross-platform audio outputlibrary. See -+ * README for a history of this source code. -+ * -+ * libao is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2, or (at your option) -+ * any later version. -+ * -+ * libao 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 General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with GNU Make; see the file COPYING. If not, write to -+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#ifndef __AO_H__ -+#define __AO_H__ -+ -+#ifdef __cplusplus -+extern "C" -+{ -+#endif /* __cplusplus */ -+ -+#include <stdio.h> -+#include <stdlib.h> -+#include <stdint.h> -+#include <errno.h> -+ -+/* --- Constants ---*/ -+ -+#define AO_TYPE_LIVE 1 -+#define AO_TYPE_FILE 2 -+ -+ -+#define AO_ENODRIVER 1 -+#define AO_ENOTFILE 2 -+#define AO_ENOTLIVE 3 -+#define AO_EBADOPTION 4 -+#define AO_EOPENDEVICE 5 -+#define AO_EOPENFILE 6 -+#define AO_EFILEEXISTS 7 -+#define AO_EBADFORMAT 8 -+ -+#define AO_EFAIL 100 -+ -+ -+#define AO_FMT_LITTLE 1 -+#define AO_FMT_BIG 2 -+#define AO_FMT_NATIVE 4 -+ -+/* --- Structures --- */ -+ -+typedef struct ao_info { -+ int type; /* live output or file output? */ -+ char *name; /* full name of driver */ -+ char *short_name; /* short name of driver */ -+ char *author; /* driver author */ -+ char *comment; /* driver comment */ -+ int preferred_byte_format; -+ int priority; -+ char **options; -+ int option_count; -+} ao_info; -+ -+typedef struct ao_functions ao_functions; -+typedef struct ao_device ao_device; -+ -+typedef struct ao_sample_format { -+ int bits; /* bits per sample */ -+ int rate; /* samples per second (in a single channel) */ -+ int channels; /* number of audio channels */ -+ int byte_format; /* Byte ordering in sample, see constants below */ -+ char *matrix; /* input channel location/ordering */ -+} ao_sample_format; -+ -+typedef struct ao_option { -+ char *key; -+ char *value; -+ struct ao_option *next; -+} ao_option; -+ -+#if defined(AO_BUILDING_LIBAO) -+#include "ao_private.h" -+#endif -+ -+/* --- Functions --- */ -+ -+/* library setup/teardown */ -+void ao_initialize(void); -+void ao_shutdown(void); -+ -+/* device setup/playback/teardown */ -+int ao_append_global_option(const char *key, -+ const char *value); -+int ao_append_option(ao_option **options, -+ const char *key, -+ const char *value); -+void ao_free_options(ao_option *options); -+ -+char* ao_get_option(ao_option *options, const char* key); -+ -+ao_device* ao_open_live(int driver_id, -+ ao_sample_format *format, -+ ao_option *option); -+ao_device* ao_open_file(int driver_id, -+ const char *filename, -+ int overwrite, -+ ao_sample_format *format, -+ ao_option *option); -+ -+int ao_play(ao_device *device, -+ char *output_samples, -+ uint32_t num_bytes); -+int ao_close(ao_device *device); -+ -+/* driver information */ -+int ao_driver_id(const char *short_name); -+int ao_default_driver_id(void); -+ao_info *ao_driver_info(int driver_id); -+ao_info **ao_driver_info_list(int *driver_count); -+char *ao_file_extension(int driver_id); -+ -+/* miscellaneous */ -+int ao_is_big_endian(void); -+ -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif /* __AO_H__ */ -+ -+extern struct AudioOutput g_ao; -+struct AudioOutput -+ { -+ void (*ao_initialize)(void); -+ int (*ao_play)(ao_device *, char *, uint32_t); -+ int (*ao_default_driver_id)(void); -+ ao_device* (*ao_open_live)( int, ao_sample_format *, ao_option *); -+ int (*ao_close)(ao_device *); -+ /* -- Device Setup/Playback/Teardown -- */ -+ int (*ao_append_option)(ao_option **, const char *, const char *); -+ void (*ao_free_options)(ao_option *); -+ char* (*ao_get_option)(ao_option *, const char* ); -+ }; -diff -uP libshairport-1.2.0.20310_lib/src/hairtunes.c ../../../../../libshairport-1.2.0.20310_lib/src/hairtunes.c ---- src/hairtunes.c 2011-09-23 21:55:48.000000000 +0200 -+++ src/hairtunes.c 2011-09-25 20:37:49.000000000 +0200 -@@ -25,7 +25,7 @@ - */ - - #define XBMC --//#defined HAS_AO -+#define HAS_AO - - #include <stdio.h> - #include <stdlib.h> -@@ -45,7 +45,7 @@ - #include <sys/signal.h> - #include <fcntl.h> - #ifdef HAS_AO --#include <ao/ao.h> -+#include "ao.h" - #endif - - #ifdef FANCY_RESAMPLING -@@ -881,7 +881,7 @@ - } - #ifdef HAS_AO - } else { -- ao_play(dev, (char *)outbuf, play_samples*4); -+ g_ao.ao_play(dev, (char *)outbuf, play_samples*4); - #endif - } - } -@@ -906,7 +906,7 @@ - ao_device *dev; - - void* init_ao() { -- ao_initialize(); -+ g_ao.ao_initialize(); - - int driver; - #ifndef XBMC -@@ -921,7 +921,7 @@ - #endif - { - // otherwise choose the default -- driver = ao_default_driver_id(); -+ driver = g_ao.ao_default_driver_id(); - } - - ao_sample_format fmt; -@@ -944,9 +944,9 @@ - } - #endif - -- ao_append_option(&ao_opts, "name", "Streaming..."); -+ g_ao.ao_append_option(&ao_opts, "name", "Streaming..."); - -- dev = ao_open_live(driver, &fmt, ao_opts); -+ dev = g_ao.ao_open_live(driver, &fmt, ao_opts); - if (dev == NULL) { - die("Could not open ao device"); - } -@@ -985,7 +985,7 @@ - audio_running = 0; - pthread_join(audio_thread, NULL); - #ifdef HAS_AO -- ao_close(dev); -+ g_ao.ao_close(dev); - #endif - } - -diff -uP libshairport-1.2.0.20310_lib/src/shairport.c ../../../../../libshairport-1.2.0.20310_lib/src/shairport.c ---- src/shairport.c 2011-08-21 01:57:56.000000000 +0200 -+++ src/shairport.c 2011-09-25 20:44:40.000000000 +0200 -@@ -92,6 +92,14 @@ - static char tPassword[56] = ""; - static char tHWID[HWID_SIZE] = {0,51,52,53,54,55}; - -+#ifdef XBMC -+struct AudioOutput g_ao; -+void shairport_set_ao(struct AudioOutput *ao) -+{ -+ g_ao=*ao; -+} -+#endif -+ - #ifndef XBMC - int main(int argc, char **argv) - #else -diff -uP libshairport-1.2.0.20310_lib/src/shairport.h ../../../../../libshairport-1.2.0.20310_lib/src/shairport.h ---- src/shairport.h 2011-08-21 01:58:11.000000000 +0200 -+++ src/shairport.h 2011-09-25 20:36:43.000000000 +0200 -@@ -11,6 +11,7 @@ - #include <regex.h> - #include <sys/types.h> - #include <regex.h> -+#include "ao.h" - - - #define HWID_SIZE 6 -@@ -62,9 +63,11 @@ - void shairport_exit(void); - int shairport_loop(void); - int shairport_is_running(void); -+void shairport_set_ao(struct AudioOutput *ao); - - #ifdef __cplusplus - } - #endif /* __cplusplus */ - - #endif -+ diff --git a/tools/rbp/depends/libshairport/002_fix_install_header.patch b/tools/rbp/depends/libshairport/002_fix_install_header.patch deleted file mode 100644 index 495b97346c..0000000000 --- a/tools/rbp/depends/libshairport/002_fix_install_header.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- src/Makefile.am.old 2011-09-23 23:14:39.000000000 +0200 -+++ src/Makefile.am 2011-09-25 21:38:08.000000000 +0200 -@@ -1,7 +1,7 @@ - lib_LTLIBRARIES=libshairport.la - --library_includedir=$(includedir) --library_include_HEADERS = shairport.h -+library_includedir=$(includedir)/shairport -+library_include_HEADERS = shairport.h ao.h socketlib.h - - libshairport_la_SOURCES=shairport.c hairtunes.c socketlib.c alac.c - libshairport_la_LDFLAGS=-dynamiclib diff --git a/tools/rbp/depends/libshairport/003_fix_deadlock.patch b/tools/rbp/depends/libshairport/003_fix_deadlock.patch deleted file mode 100644 index c05970e138..0000000000 --- a/tools/rbp/depends/libshairport/003_fix_deadlock.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- src/hairtunes.c.orig 2011-09-25 21:58:08.000000000 +0200 -+++ src/hairtunes.c 2011-09-25 21:58:12.000000000 +0200 -@@ -991,6 +991,7 @@ - - void hairtunes_cleanup(void) - { -+ pthread_cond_signal(&ab_buffer_ready); - clean_output(); - clean_rtp(); - clean_buffer(); diff --git a/tools/rbp/depends/libshairport/004_fix_bad_access.patch b/tools/rbp/depends/libshairport/004_fix_bad_access.patch deleted file mode 100644 index 1976904c4d..0000000000 --- a/tools/rbp/depends/libshairport/004_fix_bad_access.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- src/hairtunes.c.orig 2011-09-25 23:26:56.000000000 +0200 -+++ src/hairtunes.c 2011-09-25 23:29:27.000000000 +0200 -@@ -89,7 +89,6 @@ - // maximal resampling shift - conservative - #define OUTFRAME_BYTES (4*(frame_size+3)) - -- - alac_file *decoder_info; - - #ifdef FANCY_RESAMPLING -@@ -849,6 +848,11 @@ - inbuf = buffer_get_frame(); - } while (!inbuf && audio_running); - -+ if(!audio_running) -+ { -+ return 0; //don't access inbuf if audio stopped -+ } -+ - #ifdef FANCY_RESAMPLING - if (fancy_resampling) { - int i; diff --git a/tools/rbp/depends/libshairport/005_fix_shutdown.patch b/tools/rbp/depends/libshairport/005_fix_shutdown.patch deleted file mode 100644 index 32bd282719..0000000000 --- a/tools/rbp/depends/libshairport/005_fix_shutdown.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- src/shairport.c 2011-09-25 23:58:06.000000000 +0200 -+++ src/shairport.c.new 2011-09-25 23:57:54.000000000 +0200 -@@ -368,6 +368,7 @@ - void shairport_exit(void) - { - m_running = 0; -+ close(tServerSock); - } - - int shairport_is_running(void) diff --git a/tools/rbp/depends/libshairport/006_no_printf.patch b/tools/rbp/depends/libshairport/006_no_printf.patch deleted file mode 100644 index eb69d42b74..0000000000 --- a/tools/rbp/depends/libshairport/006_no_printf.patch +++ /dev/null @@ -1,843 +0,0 @@ ---- src/alac.c 2011-08-21 00:06:21.000000000 +0200 -+++ src/alac.c 2011-10-01 04:12:09.000000000 +0200 -@@ -804,7 +804,7 @@ - } - else - { -- fprintf(stderr, "FIXME: unhandled predicition type: %i\n", prediction_type); -+ xprintf("FIXME: unhandled predicition type: %i\n", prediction_type); - /* i think the only other prediction type (or perhaps this is just a - * boolean?) runs adaptive fir twice.. like: - * predictor_decompress_fir_adapt(predictor_error, tempout, ...) -@@ -885,7 +885,7 @@ - } - case 20: - case 32: -- fprintf(stderr, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); -+ xprintf("FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); - break; - default: - break; -@@ -1004,7 +1004,7 @@ - } - else - { /* see mono case */ -- fprintf(stderr, "FIXME: unhandled predicition type: %i\n", prediction_type_a); -+ xprintf("FIXME: unhandled predicition type: %i\n", prediction_type_a); - } - - /* channel 2 */ -@@ -1029,7 +1029,7 @@ - } - else - { -- fprintf(stderr, "FIXME: unhandled predicition type: %i\n", prediction_type_b); -+ xprintf("FIXME: unhandled predicition type: %i\n", prediction_type_b); - } - } - else -@@ -1106,7 +1106,7 @@ - } - case 20: - case 32: -- fprintf(stderr, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); -+ xprintf("FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); - break; - default: - break; ---- src/hairtunes.c 2011-10-01 17:45:08.000000000 +0200 -+++ src/hairtunes.c 2011-10-01 17:42:07.000000000 +0200 -@@ -121,8 +121,8 @@ - pthread_cond_t ab_buffer_ready; - - static void die(char *why) { -- fprintf(stderr, "FATAL: %s\n", why); -- exit(1); -+ xprintf("FATAL: %s\n", why); -+ //exit(1); - } - - static int hex2bin(unsigned char *buf, char *hex) { -@@ -245,13 +245,13 @@ - continue; - } - if (!strcmp(line, "exit\n")) { -- exit(0); -+ ;//exit(0); - } - if (!strcmp(line, "flush\n")) { - hairtunes_flush(); - } - } -- fprintf(stderr, "bye!\n"); -+ xprintf("bye!\n"); - fflush(stderr); - #endif - -@@ -262,7 +262,7 @@ - { - assert(f<=0); - if (debug) -- fprintf(stderr, "VOL: %lf\n", f); -+ xprintf("VOL: %lf\n", f); - volume = pow(10.0,0.05*f); - fix_volume = 65536.0 * volume; - } -@@ -273,7 +273,7 @@ - ab_resync(); - pthread_mutex_unlock(&ab_mutex); - if (debug) -- fprintf(stderr, "FLUSH\n"); -+ xprintf("FLUSH\n"); - } - - #ifdef HAIRTUNES_STANDALONE -@@ -423,7 +423,7 @@ - } else if (seq_order(ab_read, seqno)) { // late but not yet played - abuf = audio_buffer + BUFIDX(seqno); - } else { // too late. -- fprintf(stderr, "\nlate packet %04X (%04X:%04X)\n", seqno, ab_read, ab_write); -+ xprintf("\nlate packet %04X (%04X:%04X)\n", seqno, ab_read, ab_write); - } - buf_fill = ab_write - ab_read; - pthread_mutex_unlock(&ab_mutex); -@@ -520,7 +520,7 @@ - if (seq_order(last, first)) - return; - -- fprintf(stderr, "requesting resend on %d packets (port %d)\n", last-first+1, controlport); -+ xprintf("requesting resend on %d packets (port %d)\n", last-first+1, controlport); - - char req[8]; // *not* a standard RTCP NACK - req[0] = 0x80; -@@ -604,8 +604,8 @@ - port += 3; - } - -- printf("port: %d\n", port); // let our handler know where we end up listening -- printf("cport: %d\n", port+1); -+ xprintf("port: %d\n", port); // let our handler know where we end up listening -+ xprintf("cport: %d\n", port+1); - - rtp_sockets[0] = sock; - rtp_sockets[1] = csock; -@@ -708,7 +708,7 @@ - bf_est_drift = biquad_filt(&bf_drift_lpf, CONTROL_B*(bf_est_err*CONTROL_A + err_deriv) + bf_est_drift); - - if (debug) -- fprintf(stderr, "bf %d err %f drift %f desiring %f ed %f estd %f\r", fill, bf_est_err, bf_est_drift, desired_fill, err_deriv, err_deriv + CONTROL_A*bf_est_err); -+ xprintf("bf %d err %f drift %f desiring %f ed %f estd %f\r", fill, bf_est_err, bf_est_drift, desired_fill, err_deriv, err_deriv + CONTROL_A*bf_est_err); - bf_playback_rate = 1.0 + CONTROL_A*bf_est_err + bf_est_drift; - - bf_last_err = bf_est_err; -@@ -724,7 +724,7 @@ - buf_fill = ab_write - ab_read; - if (buf_fill < 1 || !ab_synced || ab_buffering) { // init or underrun. stop and wait - if (ab_synced) -- fprintf(stderr, "\nunderrun\n"); -+ xprintf("\nunderrun\n"); - - ab_buffering = 1; - pthread_cond_wait(&ab_buffer_ready, &ab_mutex); -@@ -736,7 +736,7 @@ - return 0; - } - if (buf_fill >= BUFFER_FRAMES) { // overrunning! uh-oh. restart at a sane distance -- fprintf(stderr, "\noverrun.\n"); -+ xprintf("\noverrun.\n"); - ab_read = ab_write - START_FILL; - } - read = ab_read; -@@ -748,7 +748,7 @@ - - volatile abuf_t *curframe = audio_buffer + BUFIDX(read); - if (!curframe->ready) { -- fprintf(stderr, "\nmissing frame.\n"); -+ xprintf("\nmissing frame.\n"); - memset(curframe->data, 0, FRAME_BYTES); - } - curframe->ready = 0; -@@ -775,13 +775,13 @@ - if (stuff) { - if (stuff==1) { - if (debug) -- fprintf(stderr, "+++++++++\n"); -+ xprintf("+++++++++\n"); - // interpolate one sample - *outptr++ = dithered_vol(((long)inptr[-2] + (long)inptr[0]) >> 1); - *outptr++ = dithered_vol(((long)inptr[-1] + (long)inptr[1]) >> 1); - } else if (stuff==-1) { - if (debug) -- fprintf(stderr, "---------\n"); -+ xprintf("---------\n"); - inptr++; - inptr++; - } ---- src/shairport.c 2011-10-01 17:45:08.000000000 +0200 -+++ src/shairport.c 2011-10-01 17:41:04.000000000 +0200 -@@ -31,6 +31,27 @@ - #include "shairport.h" - #include "hairtunes.h" - -+static struct printfPtr g_printf={NULL}; -+ -+int xprintf(const char *format, ...) -+{ -+ char dbg[2048]; -+ va_list args; -+ va_start(args, format); -+ vsnprintf(dbg, sizeof(dbg), format, args); -+ va_end(args); -+ if(g_printf.extprintf) -+ { -+ g_printf.extprintf(dbg, sizeof(dbg)); -+ } -+ else -+ { -+ printf(dbg); -+ } -+ -+ return 1; -+} -+ - #ifndef TRUE - #define TRUE (-1) - #endif -@@ -98,6 +119,11 @@ - { - g_ao=*ao; - } -+ -+void shairport_set_printf(struct printfPtr *funcPtr) -+{ -+ g_printf = *funcPtr; -+} - #endif - - #ifndef XBMC -@@ -106,7 +132,7 @@ - int shairport_main(int argc, char **argv) - #endif - { -- printf("initializing shairport\n"); -+ xprintf("initializing shairport\n",NULL); - char tHWID_Hex[HWID_SIZE * 2 + 1]; - char tKnownHwid[32]; - -@@ -185,22 +211,22 @@ - } - else if(!strcmp(arg, "-h") || !strcmp(arg, "--help")) - { -- slog(LOG_INFO, "ShairPort version 0.05 C port - Airport Express emulator\n"); -- slog(LOG_INFO, "Usage:\nshairport [OPTION...]\n\nOptions:\n"); -- slog(LOG_INFO, " -a, --apname=AirPort Sets Airport name\n"); -- slog(LOG_INFO, " -p, --password=secret Sets Password (not working)\n"); -- slog(LOG_INFO, " -o, --server_port=5000 Sets Port for Avahi/dns-sd\n"); -- slog(LOG_INFO, " -b, --buffer=282 Sets Number of frames to buffer before beginning playback\n"); -- slog(LOG_INFO, " -d Daemon mode\n"); -- slog(LOG_INFO, " -q, --quiet Supresses all output.\n"); -- slog(LOG_INFO, " -v,-v2,-v3,-vv Various debugging levels\n"); -- slog(LOG_INFO, "\n"); -+ xprintf("ShairPort version 0.05 C port - Airport Express emulator\n"); -+ xprintf("Usage:\nshairport [OPTION...]\n\nOptions:\n"); -+ xprintf(" -a, --apname=AirPort Sets Airport name\n"); -+ xprintf(" -p, --password=secret Sets Password (not working)\n"); -+ xprintf(" -o, --server_port=5000 Sets Port for Avahi/dns-sd\n"); -+ xprintf(" -b, --buffer=282 Sets Number of frames to buffer before beginning playback\n"); -+ xprintf(" -d Daemon mode\n"); -+ xprintf(" -q, --quiet Supresses all output.\n"); -+ xprintf(" -v,-v2,-v3,-vv Various debugging levels\n"); -+ xprintf("\n"); - return 0; - } - } - - if ( buffer_start_fill < 30 || buffer_start_fill > BUFFER_FRAMES ) { -- fprintf(stderr, "buffer value must be > 30 and < %d\n", BUFFER_FRAMES); -+ xprintf("buffer value must be > 30 and < %d\n", BUFFER_FRAMES); - return(0); - } - -@@ -209,11 +235,11 @@ - int tPid = fork(); - if(tPid < 0) - { -- exit(1); // Error on fork -+ //exit(1); // Error on fork - } - else if(tPid > 0) - { -- exit(0); -+ //exit(0); - } - else - { -@@ -254,10 +280,10 @@ - sscanf(tHWID_Hex, "%02X%02X%02X%02X%02X%02X", &tHWID[0], &tHWID[1], &tHWID[2], &tHWID[3], &tHWID[4], &tHWID[5]); - } - -- slog(LOG_INFO, "LogLevel: %d\n", kCurrentLogLevel); -- slog(LOG_INFO, "AirName: %s\n", tServerName); -- slog(LOG_INFO, "HWID: %.*s\n", HWID_SIZE, tHWID+1); -- slog(LOG_INFO, "HWID_Hex(%d): %s\n", strlen(tHWID_Hex), tHWID_Hex); -+ xprintf("LogLevel: %d\n", kCurrentLogLevel); -+ xprintf("AirName: %s\n", tServerName); -+ xprintf("HWID: %.*s\n", HWID_SIZE, tHWID+1); -+ xprintf("HWID_Hex(%d): %s\n", strlen(tHWID_Hex), tHWID_Hex); - - if(tSimLevel >= 1) - { -@@ -271,12 +297,12 @@ - #ifndef XBMC - startAvahi(tHWID_Hex, tServerName, tPort); - #endif -- slog(LOG_DEBUG_V, "Starting connection server: specified server port: %d\n", tPort); -+ xprintf("Starting connection server: specified server port: %d\n", tPort); - tServerSock = setupListenServer(&tAddrInfo, tPort); - if(tServerSock < 0) - { - freeaddrinfo(tAddrInfo); -- slog(LOG_INFO, "Error setting up server socket on port %d, try specifying a different port\n", tPort); -+ xprintf("Error setting up server socket on port %d, try specifying a different port\n", tPort); - return 0; - } - -@@ -303,7 +329,7 @@ - - int readsock; - -- slog(LOG_DEBUG_V, "Waiting for clients to connect\n"); -+ xprintf("Waiting for clients to connect\n"); - - while(m_running) - { -@@ -335,7 +361,7 @@ - { - freeaddrinfo(tAddrInfo); - tAddrInfo = NULL; -- slog(LOG_DEBUG, "...Accepted Client Connection..\n"); -+ xprintf("...Accepted Client Connection..\n"); - close(tServerSock); - handleClient(tClientSock, tPassword, tHWID); - //close(tClientSock); -@@ -343,11 +369,11 @@ - } - else - { -- slog(LOG_DEBUG_VV, "Child now busy handling new client\n"); -+ xprintf("Child now busy handling new client\n"); - close(tClientSock); - } - #else -- slog(LOG_DEBUG, "...Accepted Client Connection..\n"); -+ xprintf("...Accepted Client Connection..\n"); - handleClient(tClientSock, tPassword, tHWID); - #endif - } -@@ -357,7 +383,7 @@ - } - } - -- slog(LOG_DEBUG_VV, "Finished\n"); -+ xprintf("Finished\n"); - if(tAddrInfo != NULL) - { - freeaddrinfo(tAddrInfo); -@@ -416,7 +442,7 @@ - - void handleClient(int pSock, char *pPassword, char *pHWADDR) - { -- slog(LOG_DEBUG_VV, "In Handle Client\n"); -+ xprintf("In Handle Client\n"); - fflush(stdout); - - socklen_t len; -@@ -435,7 +461,7 @@ - - // deal with both IPv4 and IPv6: - if (addr.ss_family == AF_INET) { -- slog(LOG_DEBUG_V, "Constructing ipv4 address\n"); -+ xprintf("Constructing ipv4 address\n"); - struct sockaddr_in *s = (struct sockaddr_in *)&addr; - port = ntohs(s->sin_port); - inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr); -@@ -455,20 +481,20 @@ - if(memcmp(&addr.bin[0], "\x00\x00\x00\x00" "\x00\x00\x00\x00" "\x00\x00\xff\xff", 12) == 0) - { - // its ipv4... -- slog(LOG_DEBUG_V, "Constructing ipv4 from ipv6 address\n"); -+ xprintf("Constructing ipv4 from ipv6 address\n"); - memcpy(ipbin, &addr.bin[12], 4); - ipbinlen = 4; - } - else - { -- slog(LOG_DEBUG_V, "Constructing ipv6 address\n"); -+ xprintf("Constructing ipv6 address\n"); - memcpy(ipbin, &s->sin6_addr, 16); - ipbinlen = 16; - } - } - -- slog(LOG_DEBUG_V, "Peer IP address: %s\n", ipstr); -- slog(LOG_DEBUG_V, "Peer port : %d\n", port); -+ xprintf("Peer IP address: %s\n", ipstr); -+ xprintf("Peer port : %d\n", port); - - int tMoreDataNeeded = 1; - struct keyring tKeys; -@@ -489,16 +515,16 @@ - tError = readDataFromClient(pSock, &(tConn.recv)); - if(!tError && strlen(tConn.recv.data) > 0) - { -- slog(LOG_DEBUG_VV, "Finished Reading some data from client\n"); -+ xprintf("Finished Reading some data from client\n"); - // parse client request - tMoreDataNeeded = parseMessage(&tConn, ipbin, ipbinlen, pHWADDR); - if(1 == tMoreDataNeeded) - { -- slog(LOG_DEBUG_VV, "\n\nNeed to read more data\n"); -+ xprintf("\n\nNeed to read more data\n"); - } - else if(-1 == tMoreDataNeeded) // Forked process down below ended. - { -- slog(LOG_DEBUG_V, "Forked Process ended...cleaning up\n"); -+ xprintf("Forked Process ended...cleaning up\n"); - cleanup(&tConn); - // pSock was already closed - return; -@@ -507,13 +533,13 @@ - } - else - { -- slog(LOG_DEBUG, "Error reading from socket, closing client\n"); -+ xprintf("Error reading from socket, closing client\n"); - // Error reading data....quit. - cleanup(&tConn); - return; - } - } -- slog(LOG_DEBUG_VV, "Writing: %d chars to socket\n", tConn.resp.current); -+ xprintf("Writing: %d chars to socket\n", tConn.resp.current); - //tConn->resp.data[tConn->resp.current-1] = '\0'; - writeDataToClient(pSock, &(tConn.resp)); - // Finished reading one message... -@@ -526,9 +552,9 @@ - - void writeDataToClient(int pSock, struct shairbuffer *pResponse) - { -- slog(LOG_DEBUG_VV, "\n----Beg Send Response Header----\n%.*s\n", pResponse->current, pResponse->data); -+ xprintf("\n----Beg Send Response Header----\n%.*s\n", pResponse->current, pResponse->data); - send(pSock, pResponse->data, pResponse->current,0); -- slog(LOG_DEBUG_VV, "----Send Response Header----\n"); -+ xprintf("----Send Response Header----\n"); - } - - int readDataFromClient(int pSock, struct shairbuffer *pClientBuffer) -@@ -541,7 +567,7 @@ - while(tRetval > 0 && tEnd < 0) - { - // Read from socket until \n\n, \r\n\r\n, or \r\r is found -- slog(LOG_DEBUG_V, "Waiting To Read...\n"); -+ xprintf("Waiting To Read...\n"); - fflush(stdout); - tRetval = read(pSock, tReadBuf, MAX_SIZE); - // if new buffer contains the end of request string, only copy partial buffer? -@@ -552,40 +578,40 @@ - { - pClientBuffer->marker = tEnd+1; // Marks start of content - } -- slog(SOCKET_LOG_LEVEL, "Found end of http request at: %d\n", tEnd); -+ xprintf("Found end of http request at: %d\n", tEnd); - fflush(stdout); - } - else - { - tEnd = MAX_SIZE; -- slog(SOCKET_LOG_LEVEL, "Read %d of data so far\n%s\n", tRetval, tReadBuf); -+ xprintf("Read %d of data so far\n%s\n", tRetval, tReadBuf); - fflush(stdout); - } - if(tRetval > 0) - { - // Copy read data into tReceive; -- slog(SOCKET_LOG_LEVEL, "Read %d data, using %d of it\n", tRetval, tEnd); -+ xprintf("Read %d data, using %d of it\n", tRetval, tEnd); - addNToShairBuffer(pClientBuffer, tReadBuf, tRetval); -- slog(LOG_DEBUG_VV, "Finished copying data\n"); -+ xprintf("Finished copying data\n"); - } - else - { -- slog(LOG_DEBUG, "Error reading data from socket, got: %d bytes", tRetval); -+ xprintf("Error reading data from socket, got: %d bytes", tRetval); - return tRetval; - } - } - if(tEnd + 1 != tRetval) - { -- slog(SOCKET_LOG_LEVEL, "Read more data after end of http request. %d instead of %d\n", tRetval, tEnd+1); -+ xprintf("Read more data after end of http request. %d instead of %d\n", tRetval, tEnd+1); - } -- slog(SOCKET_LOG_LEVEL, "Finished Reading Data:\n%s\nEndOfData\n", pClientBuffer->data); -+ xprintf("Finished Reading Data:\n%s\nEndOfData\n", pClientBuffer->data); - fflush(stdout); - return 0; - } - - char *getFromBuffer(char *pBufferPtr, const char *pField, int pLenAfterField, int *pReturnSize, char *pDelims) - { -- slog(LOG_DEBUG_V, "GettingFromBuffer: %s\n", pField); -+ xprintf("GettingFromBuffer: %s\n", pField); - char* tFound = strstr(pBufferPtr, pField); - int tSize = 0; - if(tFound != NULL) -@@ -606,7 +632,7 @@ - } - - tSize = (int) (tShortest - tFound); -- slog(LOG_DEBUG_VV, "Found %.*s length: %d\n", tSize, tFound, tSize); -+ xprintf("Found %.*s length: %d\n", tSize, tFound, tSize); - if(pReturnSize != NULL) - { - *pReturnSize = tSize; -@@ -614,7 +640,7 @@ - } - else - { -- slog(LOG_DEBUG_V, "Not Found\n"); -+ xprintf("Not Found\n"); - } - return tFound; - } -@@ -648,10 +674,10 @@ - { - char tTrim[tFoundSize + 2]; - getTrimmed(tFound, tFoundSize, TRUE, TRUE, tTrim); -- slog(LOG_DEBUG_VV, "HeaderChallenge: [%s] len: %d sizeFound: %d\n", tTrim, strlen(tTrim), tFoundSize); -+ xprintf("HeaderChallenge: [%s] len: %d sizeFound: %d\n", tTrim, strlen(tTrim), tFoundSize); - int tChallengeDecodeSize = 16; - char *tChallenge = decode_base64((unsigned char *)tTrim, tFoundSize, &tChallengeDecodeSize); -- slog(LOG_DEBUG_VV, "Challenge Decode size: %d expected 16\n", tChallengeDecodeSize); -+ xprintf("Challenge Decode size: %d expected 16\n", tChallengeDecodeSize); - - int tCurSize = 0; - unsigned char tChalResp[38]; -@@ -673,7 +699,7 @@ - } - - char *tTmp = encode_base64((unsigned char *)tChalResp, tCurSize); -- slog(LOG_DEBUG_VV, "Full sig: %s\n", tTmp); -+ xprintf("Full sig: %s\n", tTmp); - free(tTmp); - - // RSA Encrypt -@@ -722,10 +748,10 @@ - { - if(isLogEnabledFor(HEADER_LOG_LEVEL)) - { -- slog(HEADER_LOG_LEVEL, "Content-Length: %s value -> %d\n", tContent, tContentSize); -+ xprintf("Content-Length: %s value -> %d\n", tContent, tContentSize); - if(pConn->recv.marker != 0) - { -- slog(HEADER_LOG_LEVEL, "ContentPtr has %d, but needs %d\n", -+ xprintf("ContentPtr has %d, but needs %d\n", - strlen(pConn->recv.data+pConn->recv.marker), tContentSize); - } - } -@@ -735,7 +761,7 @@ - } - else - { -- slog(LOG_DEBUG_VV, "No content, header only\n"); -+ xprintf("No content, header only\n"); - } - - // "Creates" a new Response Header for our response message -@@ -748,7 +774,7 @@ - { - tLen = 20; - } -- slog(LOG_INFO, "********** RECV %.*s **********\n", tLen, pConn->recv.data); -+ xprintf("********** RECV %.*s **********\n", tLen, pConn->recv.data); - } - - if(pConn->password != NULL) -@@ -758,7 +784,7 @@ - - if(buildAppleResponse(pConn, pIpBin, pIpBinLen, pHWID)) // need to free sig - { -- slog(LOG_DEBUG_V, "Added AppleResponse to Apple-Challenge request\n"); -+ xprintf("Added AppleResponse to Apple-Challenge request\n"); - } - - // Find option, then based on option, do different actions. -@@ -778,14 +804,14 @@ - int tKeySize = 0; - char tEncodedAesIV[tSize + 2]; - getTrimmed(tHeaderVal, tSize, TRUE, TRUE, tEncodedAesIV); -- slog(LOG_DEBUG_VV, "AESIV: [%.*s] Size: %d Strlen: %d\n", tSize, tEncodedAesIV, tSize, strlen(tEncodedAesIV)); -+ xprintf("AESIV: [%.*s] Size: %d Strlen: %d\n", tSize, tEncodedAesIV, tSize, strlen(tEncodedAesIV)); - char *tDecodedIV = decode_base64((unsigned char*) tEncodedAesIV, tSize, &tSize); - - // grab the key, copy it out of the receive buffer - tHeaderVal = getFromContent(tContent, "a=rsaaeskey", &tKeySize); - char tEncodedAesKey[tKeySize + 2]; // +1 for nl, +1 for \0 - getTrimmed(tHeaderVal, tKeySize, TRUE, TRUE, tEncodedAesKey); -- slog(LOG_DEBUG_VV, "AES KEY: [%s] Size: %d Strlen: %d\n", tEncodedAesKey, tKeySize, strlen(tEncodedAesKey)); -+ xprintf("AES KEY: [%s] Size: %d Strlen: %d\n", tEncodedAesKey, tKeySize, strlen(tEncodedAesKey)); - // remove base64 coding from key - char *tDecodedAesKey = decode_base64((unsigned char*) tEncodedAesKey, - tKeySize, &tKeySize); // Need to free DecodedAesKey -@@ -794,7 +820,7 @@ - int tFmtpSize = 0; - char *tFmtp = getFromContent(tContent, "a=fmtp", &tFmtpSize); // Don't need to free - tFmtp = getTrimmedMalloc(tFmtp, tFmtpSize, TRUE, FALSE); // will need to free -- slog(LOG_DEBUG_VV, "Format: %s\n", tFmtp); -+ xprintf("Format: %s\n", tFmtp); - - RSA *rsa = loadKey(); - // Decrypt the binary aes key -@@ -803,11 +829,11 @@ - if(RSA_private_decrypt(tKeySize, (unsigned char *)tDecodedAesKey, - (unsigned char*) tDecryptedKey, rsa, RSA_PKCS1_OAEP_PADDING) >= 0) - { -- slog(LOG_DEBUG, "Decrypted AES key from RSA Successfully\n"); -+ xprintf("Decrypted AES key from RSA Successfully\n"); - } - else - { -- slog(LOG_INFO, "Error Decrypting AES key from RSA\n"); -+ xprintf("Error Decrypting AES key from RSA\n"); - } - free(tDecodedAesKey); - RSA_free(rsa); -@@ -823,13 +849,13 @@ - // struct comms *tComms = pConn->hairtunes; - // if (! (pipe(tComms->in) == 0 && pipe(tComms->out) == 0)) - // { --// slog(LOG_INFO, "Error setting up hairtunes communications...some things probably wont work very well.\n"); -+// xprintf("Error setting up hairtunes communications...some things probably wont work very well.\n"); - // } - - // Setup fork - char tPort[8] = "6000"; // get this from dup()'d stdout of child pid - -- printf("******** SETUP!!!!!\n"); -+ xprintf("******** SETUP!!!!!\n",NULL); - #ifndef XBMC - int tPid = fork(); - if(tPid == 0) -@@ -845,11 +871,11 @@ - tFound = getFromSetup(pConn->recv.data, "timing_port", &tSize); - getTrimmed(tFound, tSize, 1, 0, tTPortStr); - -- slog(LOG_DEBUG_VV, "converting %s and %s from str->int\n", tCPortStr, tTPortStr); -+ xprintf("converting %s and %s from str->int\n", tCPortStr, tTPortStr); - int tControlport = atoi(tCPortStr); - int tTimingport = atoi(tTPortStr); - -- slog(LOG_DEBUG_V, "Got %d for CPort and %d for TPort\n", tControlport, tTimingport); -+ xprintf("Got %d for CPort and %d for TPort\n", tControlport, tTimingport); - char *tRtp = NULL; - char *tPipe = NULL; - char *tAoDriver = NULL; -@@ -884,7 +910,7 @@ - tDataport, tRtp, tPipe, tAoDriver, tAoDeviceName, tAoDeviceId); - #ifndef XBMC - // Quit when finished. -- slog(LOG_DEBUG, "Returned from hairtunes init....returning -1, should close out this whole side of the fork\n"); -+ xprintf("Returned from hairtunes init....returning -1, should close out this whole side of the fork\n"); - return -1; - } - else if(tPid >0) -@@ -897,7 +923,7 @@ - int tRead = read(tComms->out[0], tFromHairtunes, 80); - if(tRead <= 0) - { -- slog(LOG_INFO, "Error reading port from hairtunes function, assuming default port: %d\n", tPort); -+ xprintf("Error reading port from hairtunes function, assuming default port: %d\n", tPort); - } - else - { -@@ -909,7 +935,7 @@ - } - else - { -- slog(LOG_INFO, "Read %d bytes, Error translating %s into a port\n", tRead, tFromHairtunes); -+ xprintf("Read %d bytes, Error translating %s into a port\n", tRead, tFromHairtunes); - } - } - -@@ -930,7 +956,7 @@ - } - else - { -- slog(LOG_INFO, "Error forking process....dere' be errors round here.\n"); -+ xprintf("Error forking process....dere' be errors round here.\n"); - return -1; - } - #endif -@@ -942,7 +968,7 @@ - propogateCSeq(pConn); - #ifndef XBMC - close(pConn->hairtunes->in[1]); -- slog(LOG_DEBUG, "Tearing down connection, closing pipes\n"); -+ xprintf("Tearing down connection, closing pipes\n"); - #else - hairtunes_cleanup(); - #endif -@@ -964,7 +990,7 @@ - propogateCSeq(pConn); - int tSize = 0; - char *tVol = getFromHeader(pConn->recv.data, "volume", &tSize); -- slog(LOG_DEBUG_VV, "About to write [vol: %.*s] data to hairtunes\n", tSize, tVol); -+ xprintf("About to write [vol: %.*s] data to hairtunes\n", tSize, tVol); - // TBD VOLUME - #ifndef XBMC - write(pConn->hairtunes->in[1], "vol: ", 5); -@@ -973,11 +999,11 @@ - #else - hairtunes_setvolume(atof(tVol)); - #endif -- slog(LOG_DEBUG_VV, "Finished writing data write data to hairtunes\n"); -+ xprintf("Finished writing data write data to hairtunes\n"); - } - else - { -- slog(LOG_DEBUG, "\n\nUn-Handled recv: %s\n", pConn->recv.data); -+ xprintf("\n\nUn-Handled recv: %s\n", pConn->recv.data); - propogateCSeq(pConn); - } - addToShairBuffer(&(pConn->resp), "\r\n"); -@@ -1056,7 +1082,7 @@ - char tName[100 + HWID_SIZE + 3]; - if(strlen(pServerName) > tMaxServerName) - { -- slog(LOG_INFO,"Hey dog, we see you like long server names, " -+ xprintf("Hey dog, we see you like long server names, " - "so we put a strncat in our command so we don't buffer overflow, while you listen to your flow.\n" - "We just used the first %d characters. Pick something shorter if you want\n", tMaxServerName); - } -@@ -1067,7 +1093,7 @@ - strcat(tName, pHWStr); - strcat(tName, "@"); - strncat(tName, pServerName, tMaxServerName); -- slog(AVAHI_LOG_LEVEL, "Avahi/DNS-SD Name: %s\n", tName); -+ xprintf("Avahi/DNS-SD Name: %s\n", tName); - - execlp("avahi-publish-service", "avahi-publish-service", tName, - "_raop._tcp", tPort, "tp=UDP","sm=false","sv=false","ek=1","et=0,1", -@@ -1079,12 +1105,12 @@ - perror("error"); - } - -- slog(LOG_INFO, "Bad error... couldn't find or failed to run: avahi-publish-service OR dns-sd\n"); -- exit(1); -+ xprintf("Bad error... couldn't find or failed to run: avahi-publish-service OR dns-sd\n"); -+ //exit(1); - } - else - { -- slog(LOG_DEBUG_VV, "Avahi/DNS-SD started on PID: %d\n", tPid); -+ xprintf("Avahi/DNS-SD started on PID: %d\n", tPid); - } - return tPid; - } -@@ -1092,7 +1118,7 @@ - - void printBufferInfo(struct shairbuffer *pBuf, int pLevel) - { -- slog(pLevel, "Buffer: [%s] size: %d maxchars:%d\n", pBuf->data, pBuf->current, pBuf->maxsize/sizeof(char)); -+ xprintf("Buffer: [%s] size: %d maxchars:%d\n", pBuf->data, pBuf->current, pBuf->maxsize/sizeof(char)); - } - - int getAvailChars(struct shairbuffer *pBuf) -@@ -1173,7 +1199,8 @@ - { - va_list argp; - va_start(argp, pFormat); -- vprintf(pFormat, argp); -+ xprintf(pFormat, argp); -+ //vprintf(pFormat, argp); - va_end(argp); - } - //#endif -@@ -1227,9 +1254,9 @@ - { - if(pBuf->data != NULL) - { -- slog(LOG_DEBUG_VV, "Hrm, buffer wasn't cleaned up....trying to free\n"); -+ xprintf("Hrm, buffer wasn't cleaned up....trying to free\n"); - free(pBuf->data); -- slog(LOG_DEBUG_VV, "Free didn't seem to seg fault....huzzah\n"); -+ xprintf("Free didn't seem to seg fault....huzzah\n"); - } - pBuf->current = 0; - pBuf->marker = 0; -@@ -1287,6 +1314,6 @@ - BIO *tBio = BIO_new_mem_buf(AIRPORT_PRIVATE_KEY, -1); - RSA *rsa = PEM_read_bio_RSAPrivateKey(tBio, NULL, NULL, NULL); //NULL, NULL, NULL); - BIO_free(tBio); -- slog(RSA_LOG_LEVEL, "RSA Key: %d\n", RSA_check_key(rsa)); -+ xprintf("RSA Key: %d\n", RSA_check_key(rsa)); - return rsa; - } ---- src/shairport.h 2011-10-01 17:45:08.000000000 +0200 -+++ src/shairport.h 2011-10-01 17:19:43.000000000 +0200 -@@ -59,11 +59,17 @@ - { - #endif /* __cplusplus */ - -+struct printfPtr -+{ -+ int (*extprintf)(const char* msg, size_t msgSize); -+}; -+ - int shairport_main(int argc, char **argv); - void shairport_exit(void); - int shairport_loop(void); - int shairport_is_running(void); - void shairport_set_ao(struct AudioOutput *ao); -+void shairport_set_printf(struct printfPtr *funcPtr); - - #ifdef __cplusplus - } ---- src/socketlib.c 2011-09-23 22:00:48.000000000 +0200 -+++ src/socketlib.c 2011-10-01 17:42:39.000000000 +0200 -@@ -82,7 +82,7 @@ - delay(RETRY_DELAY, &tRes); - } - } -- printf("%d Retry attempts exceeded\n", RETRY_COUNT); -+ xprintf("%d Retry attempts exceeded\n", RETRY_COUNT); - return ERROR; - } - -@@ -102,7 +102,7 @@ - tError = getaddrinfo(pHostname, pService, &hints, pAddrInfo); - if(tError != 0) - { -- printf("Error getting address info\n"); -+ xprintf("Error getting address info\n"); - } - return tError; - } -@@ -200,7 +200,7 @@ - else - { - // Invalid encoded data, no other cases are possible. -- printf("Unrecoverable error....base64 values are incorrectly encoded\n"); -+ xprintf("Unrecoverable error....base64 values are incorrectly encoded\n"); - return pSize; - } - } -@@ -226,7 +226,7 @@ - memset(input, 0, length); - memcpy(input, pInput, pLength); - memset(input+pLength, '=', length-pLength); -- printf("Fixed value: [%.*s]\n", length, input); -+ xprintf("Fixed value: [%.*s]\n", length, input); - } - char *buffer = (char *)malloc(length); - memset(buffer, 0, length); diff --git a/tools/rbp/depends/libshairport/007_fix_syslog_defines.patch b/tools/rbp/depends/libshairport/007_fix_syslog_defines.patch deleted file mode 100644 index 4d9b834f9c..0000000000 --- a/tools/rbp/depends/libshairport/007_fix_syslog_defines.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- src/shairport.h 2011-10-01 04:09:16.000000000 +0200 -+++ src/shairport.h 2011-11-07 18:05:05.000000000 +0100 -@@ -16,10 +16,17 @@ - - #define HWID_SIZE 6 - #define SHAIRPORT_LOG 1 --#define LOG_INFO 1 --#define LOG_DEBUG 5 --#define LOG_DEBUG_V 6 --#define LOG_DEBUG_VV 7 -+ -+#ifndef LOG_INFO -+#define LOG_INFO 5 -+#endif -+ -+#ifndef LOG_DEBUG -+#define LOG_DEBUG 6 -+#endif -+ -+#define LOG_DEBUG_V 7 -+#define LOG_DEBUG_VV 8 - - struct shairbuffer - { diff --git a/tools/rbp/depends/libshairport/008-add-missing-libs.patch b/tools/rbp/depends/libshairport/008-add-missing-libs.patch deleted file mode 100644 index 6efd30222a..0000000000 --- a/tools/rbp/depends/libshairport/008-add-missing-libs.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- configure.in-org 2011-11-08 11:53:42.802419355 -0500 -+++ configure.in 2011-11-08 11:55:38.082419413 -0500 -@@ -11,8 +11,9 @@ AC_PROG_LIBTOOL - - # Checks for libraries. - #AC_CHECK_LIB([c], [main]) --#AC_CHECK_LIB([m], [main]) -+AC_CHECK_LIB([m], [main]) - AC_CHECK_LIB([ssl], [main],, AC_MSG_ERROR($missing_library)) -+AC_CHECK_LIB([crypto], [main],, AC_MSG_ERROR($missing_library)) - AC_CHECK_LIB([pthread], [main],, AC_MSG_ERROR($missing_library)) - - OUTPUT_FILES="Makefile" -@@ -21,4 +22,4 @@ LIBDIR=$PREFIX - - AC_CONFIG_FILES([${OUTPUT_FILES}]) - AC_OUTPUT(Makefile src/Makefile) --AC_OUTPUT -\ No newline at end of file -+AC_OUTPUT - diff --git a/tools/rbp/depends/libshairport/009_fix_ipv6.patch b/tools/rbp/depends/libshairport/009_fix_ipv6.patch deleted file mode 100644 index 01ff026d07..0000000000 --- a/tools/rbp/depends/libshairport/009_fix_ipv6.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- src/socketlib.c 2012-01-04 20:41:05.000000000 +0100 -+++ src/socketlib.c 2012-01-04 20:35:53.000000000 +0100 -@@ -48,7 +48,7 @@ - if((tSock==-1) && (pAddrInfo->ai_family == AF_INET6) && (errno == EAFNOSUPPORT)) - { - //Fallback to ipv4 -- perror("Failed to create ipv6 socket. Trying ipv4"); -+ xprintf("Failed to create ipv6 socket. Trying ipv4"); - pAddrInfo->ai_family = AF_INET; - tSock = socket(pAddrInfo->ai_family, pAddrInfo->ai_socktype, 0); - } -@@ -158,8 +158,8 @@ - sprintf(tService, "%d", pPort); // copies port to string - int tFamily = AF_INET; - #ifdef AF_INET6 -- //printf("Listening on IPv6 Socket\n"); -- //tFamily = AF_INET6; -+ xprintf("Listening on IPv6 Socket\n"); -+ tFamily = AF_INET6; - #else - //printf("Listening on IPv4 Socket"); - #endif diff --git a/tools/rbp/depends/libshairport/010_handle_metadata.patch b/tools/rbp/depends/libshairport/010_handle_metadata.patch deleted file mode 100644 index a48782ed08..0000000000 --- a/tools/rbp/depends/libshairport/010_handle_metadata.patch +++ /dev/null @@ -1,154 +0,0 @@ -diff -ruP src/ao.h libshairport.new/src/ao.h ---- src/ao.h 2012-05-07 22:26:53.000000000 +0200 -+++ src/ao.h 2012-05-08 18:46:42.000000000 +0200 -@@ -152,5 +152,7 @@ - /* -- Device Setup/Playback/Teardown -- */ - int (*ao_append_option)(ao_option **, const char *, const char *); - void (*ao_free_options)(ao_option *); -- char* (*ao_get_option)(ao_option *, const char* ); -+ char* (*ao_get_option)(ao_option *, const char* ); -+ void (*ao_set_metadata)(const char *buffer, unsigned int size); -+ void (*ao_set_metadata_coverart)(const char *buffer, unsigned int size); - }; -diff -ruP src/hairtunes.c src/hairtunes.c ---- src/hairtunes.c 2012-05-07 22:26:53.000000000 +0200 -+++ src/hairtunes.c 2012-05-08 18:45:51.000000000 +0200 -@@ -267,6 +267,16 @@ - fix_volume = 65536.0 * volume; - } - -+void hairtunes_set_metadata(const char *buffer, unsigned int size) -+{ -+ g_ao.ao_set_metadata(buffer, size); -+} -+ -+void hairtunes_set_metadata_coverart(const char *buffer, unsigned int size) -+{ -+ g_ao.ao_set_metadata_coverart(buffer, size); -+} -+ - void hairtunes_flush(void) - { - pthread_mutex_lock(&ab_mutex); -diff -ruP src/hairtunes.h src/hairtunes.h ---- src/hairtunes.h 2011-08-21 00:06:21.000000000 +0200 -+++ src/hairtunes.h 2012-05-08 18:46:00.000000000 +0200 -@@ -4,6 +4,8 @@ - int hairtunes_init(char *pAeskey, char *pAesiv, char *pFmtpstr, int pCtrlPort, int pTimingPort, - int pDataPort, char *pRtpHost, char*pPipeName, char *pLibaoDriver, char *pLibaoDeviceName, char *pLibaoDeviceId); - void hairtunes_setvolume(float vol); -+void hairtunes_set_metadata(const char *buffer, unsigned int size); -+void hairtunes_set_metadata_coverart(const char *buffer, unsigned int size); - void hairtunes_flush(void); - void hairtunes_cleanup(void); - -diff -ruP src/shairport.c src/shairport.c ---- src/shairport.c 2012-05-07 22:26:53.000000000 +0200 -+++ src/shairport.c 2012-05-08 18:45:30.000000000 +0200 -@@ -513,7 +513,8 @@ - while(1 == tMoreDataNeeded) - { - tError = readDataFromClient(pSock, &(tConn.recv)); -- if(!tError && strlen(tConn.recv.data) > 0) -+ //if(!tError && strlen(tConn.recv.data) > 0) -+ if(!tError && tConn.recv.current > 0) - { - xprintf("Finished Reading some data from client\n"); - // parse client request -@@ -632,7 +633,7 @@ - } - - tSize = (int) (tShortest - tFound); -- xprintf("Found %.*s length: %d\n", tSize, tFound, tSize); -+ xprintf("Found %s length: %d\n",tFound, tSize); - if(pReturnSize != NULL) - { - *pReturnSize = tSize; -@@ -744,7 +745,7 @@ - if(tContent != NULL) - { - int tContentSize = atoi(tContent); -- if(pConn->recv.marker == 0 || strlen(pConn->recv.data+pConn->recv.marker) != tContentSize) -+ if(pConn->recv.marker == 0 || pConn->recv.current-pConn->recv.marker != tContentSize) - { - if(isLogEnabledFor(HEADER_LOG_LEVEL)) - { -@@ -752,7 +753,7 @@ - if(pConn->recv.marker != 0) - { - xprintf("ContentPtr has %d, but needs %d\n", -- strlen(pConn->recv.data+pConn->recv.marker), tContentSize); -+ (pConn->recv.current-pConn->recv.marker), tContentSize); - } - } - // check if value in tContent > 2nd read from client. -@@ -989,15 +990,67 @@ - { - propogateCSeq(pConn); - int tSize = 0; -+ char *buffer = NULL; -+ char *contentType = getFromHeader(pConn->recv.data, "Content-Type", &tSize); -+ char *tContent = getFromHeader(pConn->recv.data, "Content-Length", NULL); -+ int iContentSize = 0; -+ int isJpg = 0; -+ -+ if(tContent != NULL) -+ { -+ iContentSize = atoi(tContent); -+ } -+ -+ if( tSize > 1 && -+ (strncmp(contentType, "application/x-dmap-tagged", tSize) == 0) || -+ (strncmp(contentType, "image/jpeg", tSize) == 0) ) -+ { -+ if( (pConn->recv.current - pConn->recv.marker) == iContentSize && pConn->recv.marker != 0) -+ { -+ if(strncmp(contentType, "image/jpeg", tSize) == 0) -+ { -+ isJpg = 1; -+ } -+ buffer = (char *)malloc(iContentSize * sizeof(char)); -+ memcpy(buffer, pConn->recv.data + pConn->recv.marker, iContentSize); -+ } -+ else -+ { -+ iContentSize = 0; -+ } -+ } -+ else -+ { -+ iContentSize = 0; -+ } - char *tVol = getFromHeader(pConn->recv.data, "volume", &tSize); -- xprintf("About to write [vol: %.*s] data to hairtunes\n", tSize, tVol); -+ if( tVol) -+ { -+ xprintf("About to write [vol: %.*s] data to hairtunes\n", tSize, tVol); -+ } - // TBD VOLUME - #ifndef XBMC - write(pConn->hairtunes->in[1], "vol: ", 5); - write(pConn->hairtunes->in[1], tVol, tSize); - write(pConn->hairtunes->in[1], "\n", 1); - #else -- hairtunes_setvolume(atof(tVol)); -+ if(tVol) -+ { -+ hairtunes_setvolume(atof(tVol)); -+ } -+ -+ if(iContentSize) -+ { -+ if(isJpg) -+ { -+ hairtunes_set_metadata_coverart(buffer, iContentSize); -+ } -+ else -+ { -+ hairtunes_set_metadata(buffer, iContentSize); -+ } -+ free(buffer); -+ } - #endif - xprintf("Finished writing data write data to hairtunes\n"); - } diff --git a/tools/rbp/depends/libshairport/011_fix_ipv4_fallback.patch b/tools/rbp/depends/libshairport/011_fix_ipv4_fallback.patch deleted file mode 100644 index 2c813f224e..0000000000 --- a/tools/rbp/depends/libshairport/011_fix_ipv4_fallback.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- src/socketlib.c 2012-07-14 22:49:30.000000000 +0200 -+++ src/socketlib.c 2012-10-08 21:55:51.000000000 +0200 -@@ -118,6 +118,7 @@ - - int tEnable = 1; - setsockopt(tSock, SOL_SOCKET, SO_REUSEADDR, &tEnable, sizeof (tEnable)); -+ server_addr->ai_addr->sa_family = server_addr->ai_family; // ensure that server_addr has same famliy than the socket - if (bind(tSock, server_addr->ai_addr, server_addr->ai_addrlen) < 0) - { - close(tSock); diff --git a/tools/rbp/depends/libshairport/Makefile b/tools/rbp/depends/libshairport/Makefile deleted file mode 100644 index 59c93d59b0..0000000000 --- a/tools/rbp/depends/libshairport/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -include ../../Makefile.include -include ../depends.mk - -# lib name, version -LIBNAME=libshairport -VERSION=1.2.0.20310_lib -SOURCE=$(LIBNAME)-$(VERSION) -ARCHIVE=$(SOURCE).tar.gz - -# configuration settings -CONFIGURE=./configure --prefix=$(PREFIX) --host=$(HOST) - - -LIBDYLIB=$(SOURCE)/.libs/$(LIBNAME).so - -all: $(LIBDYLIB) .installed - -$(TARBALLS_LOCATION)/$(ARCHIVE): - $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) - -$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) - rm -rf $(SOURCE) - $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) - echo $(SOURCE) > .gitignore - cd $(SOURCE); patch -p0 < ../001_add_ao.patch - cd $(SOURCE); patch -p0 < ../002_fix_install_header.patch - cd $(SOURCE); patch -p0 < ../003_fix_deadlock.patch - cd $(SOURCE); patch -p0 < ../004_fix_bad_access.patch - cd $(SOURCE); patch -p0 < ../005_fix_shutdown.patch - cd $(SOURCE); patch -p0 < ../006_no_printf.patch - cd $(SOURCE); patch -p0 < ../007_fix_syslog_defines.patch - cd $(SOURCE); patch -p0 < ../008-add-missing-libs.patch - cd $(SOURCE); patch -p0 < ../009_fix_ipv6.patch - cd $(SOURCE); patch -p0 < ../010_handle_metadata.patch - cd $(SOURCE); patch -p0 < ../011_fix_ipv4_fallback.patch - cd $(SOURCE); autoreconf -vif - cd $(SOURCE); $(CONFIGURE) - -$(LIBDYLIB): $(SOURCE) - make -j 1 -C $(SOURCE) - -.installed: - make -C $(SOURCE) install - touch $@ - -clean: - rm -rf $(SOURCE) .installed - -distclean:: - rm -rf $(SOURCE) .installed - |