void * CShairPlay::run(void* _this) { set_threadname("CShairPlay::run"); CShairPlay *T = (CShairPlay *) _this; dnssd_t *dnssd; raop_t *raop; raop_callbacks_t raop_cbs; memset(&raop_cbs, 0, sizeof(raop_cbs)); raop_cbs.cls = T; raop_cbs.audio_init = audio_init; raop_cbs.audio_flush = audio_flush; raop_cbs.audio_process = audio_process; raop_cbs.audio_destroy = audio_destroy; raop_cbs.audio_set_volume = audio_set_volume; raop_cbs.audio_set_metadata = audio_set_metadata; raop_cbs.audio_set_coverart = audio_set_coverart; raop = raop_init_from_keyfile(10, &raop_cbs, "/share/shairplay/airport.key", NULL); if (raop == NULL) { fprintf(stderr, "Could not initialize the RAOP service\n"); T->threadId = 0; pthread_exit(NULL); } raop_set_log_level(raop, RAOP_LOG_WARNING); short unsigned int port = g_settings.shairplay_port; raop_start(raop, &port, T->hwaddr, sizeof(T->hwaddr), g_settings.shairplay_password.empty() ? NULL : g_settings.shairplay_password.c_str()); dnssd = dnssd_init(NULL); if (dnssd) { dnssd_register_raop(dnssd, g_settings.shairplay_apname.c_str(), port, T->hwaddr, sizeof(T->hwaddr), 0); sem_wait(&T->sem); dnssd_unregister_raop(dnssd); dnssd_destroy(dnssd); } else { fprintf(stderr, "ERROR: Could not initialize dnssd library!\n"); } raop_stop(raop); raop_destroy(raop); T->threadId = 0; pthread_exit(NULL); }
int main(int argc, char *argv[]) { const char *name = "FakePort"; unsigned short raop_port = 5000; const char hwaddr[] = { 0x48, 0x5d, 0x60, 0x7c, 0xee, 0x22 }; dnssd_t *dnssd; raop_t *raop; raop_callbacks_t raop_cbs; int error; raop_cbs.cls = NULL; raop_cbs.audio_init = audio_init; raop_cbs.audio_set_volume = audio_set_volume; raop_cbs.audio_set_metadata = audio_set_metadata; raop_cbs.audio_set_coverart = audio_set_coverart; raop_cbs.audio_process = audio_process; raop_cbs.audio_flush = audio_flush; raop_cbs.audio_destroy = audio_destroy; raop = raop_init_from_keyfile(10, &raop_cbs, "airport.key", NULL); if (raop == NULL) { fprintf(stderr, "Could not initialize the RAOP service (airport.key missing?)\n"); return -1; } raop_set_log_level(raop, RAOP_LOG_DEBUG); raop_set_log_callback(raop, &raop_log_callback, NULL); raop_start(raop, &raop_port, hwaddr, sizeof(hwaddr), NULL); error = 0; dnssd = dnssd_init(&error); if (error) { fprintf(stderr, "ERROR: Could not initialize dnssd library!\n"); fprintf(stderr, "------------------------------------------\n"); fprintf(stderr, "You could try the following resolutions based on your OS:\n"); fprintf(stderr, "Windows: Try installing http://support.apple.com/kb/DL999\n"); fprintf(stderr, "Debian/Ubuntu: Try installing libavahi-compat-libdnssd-dev package\n"); raop_destroy(raop); return -1; } dnssd_register_raop(dnssd, name, raop_port, hwaddr, sizeof(hwaddr), 1); printf("Startup complete... Kill with Ctrl+C\n"); running = 1; while (running != 0) { #ifndef WIN32 sleep(1); #else Sleep(1000); #endif } dnssd_unregister_raop(dnssd); dnssd_destroy(dnssd); raop_stop(raop); raop_destroy(raop); return 0; }
int main(int argc, char *argv[]) { shairplay_options_t options; ao_device *device = NULL; dnssd_t *dnssd; raop_t *raop; raop_callbacks_t raop_cbs; char *password = NULL; int error; #ifndef WIN32 init_signals(); #endif memset(&options, 0, sizeof(options)); if (parse_options(&options, argc, argv)) { return 0; } ao_initialize(); device = audio_open_device(&options, 16, 2, 44100); if (device == NULL) { fprintf(stderr, "Error opening audio device %d\n", errno); fprintf(stderr, "Please check your libao settings and try again\n"); return -1; } else { ao_close(device); device = NULL; } memset(&raop_cbs, 0, sizeof(raop_cbs)); raop_cbs.cls = &options; raop_cbs.audio_init = audio_init; raop_cbs.audio_process = audio_process; raop_cbs.audio_destroy = audio_destroy; raop_cbs.audio_set_volume = audio_set_volume; raop = raop_init_from_keyfile(10, &raop_cbs, "airport.key", NULL); if (raop == NULL) { fprintf(stderr, "Could not initialize the RAOP service\n"); return -1; } if (strlen(options.password)) { password = options.password; } raop_set_log_level(raop, RAOP_LOG_DEBUG); raop_start(raop, &options.port, options.hwaddr, sizeof(options.hwaddr), password); error = 0; dnssd = dnssd_init(&error); if (error) { fprintf(stderr, "ERROR: Could not initialize dnssd library!\n"); fprintf(stderr, "------------------------------------------\n"); fprintf(stderr, "You could try the following resolutions based on your OS:\n"); fprintf(stderr, "Windows: Try installing http://support.apple.com/kb/DL999\n"); fprintf(stderr, "Debian/Ubuntu: Try installing libavahi-compat-libdnssd-dev package\n"); raop_destroy(raop); return -1; } dnssd_register_raop(dnssd, options.apname, options.port, options.hwaddr, sizeof(options.hwaddr), 0); running = 1; while (running) { #ifndef WIN32 sleep(1); #else Sleep(1000); #endif } dnssd_unregister_raop(dnssd); dnssd_destroy(dnssd); raop_stop(raop); raop_destroy(raop); ao_shutdown(); return 0; }