/* $Id$ */ /*** This file is part of PulseAudio. PulseAudio 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 of the License, or (at your option) any later version. PulseAudio 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 Lesser General Public License along with PulseAudio; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. ***/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include static void exit_signal_callback(pa_mainloop_api*m, pa_signal_event *e, int sig, void *userdata) { fprintf(stderr, "Got signal, exiting\n"); m->quit(m, 0); } static void dump_server(const pa_browse_info *i) { char t[16]; if (i->cookie) snprintf(t, sizeof(t), "0x%08x", *i->cookie); printf("server: %s\n" "server-version: %s\n" "user-name: %s\n" "fqdn: %s\n" "cookie: %s\n", i->server, i->server_version ? i->server_version : "n/a", i->user_name ? i->user_name : "n/a", i->fqdn ? i->fqdn : "n/a", i->cookie ? t : "n/a"); } static void dump_device(const pa_browse_info *i) { char ss[PA_SAMPLE_SPEC_SNPRINT_MAX]; if (i->sample_spec) pa_sample_spec_snprint(ss, sizeof(ss), i->sample_spec); printf("device: %s\n" "description: %s\n" "sample spec: %s\n", i->device, i->description ? i->description : "n/a", i->sample_spec ? ss : "n/a"); } static void browser_callback(pa_browser *b, pa_browse_opcode_t c, const pa_browse_info *i, void *userdata) { assert(b && i); switch (c) { case PA_BROWSE_NEW_SERVER: printf("\n=> new server <%s>\n", i->name); dump_server(i); break; case PA_BROWSE_NEW_SINK: printf("\n=> new sink <%s>\n", i->name); dump_server(i); dump_device(i); break; case PA_BROWSE_NEW_SOURCE: printf("\n=> new source <%s>\n", i->name); dump_server(i); dump_device(i); break; case PA_BROWSE_REMOVE_SERVER: printf("\n=> removed server <%s>\n", i->name); break; case PA_BROWSE_REMOVE_SINK: printf("\n=> removed sink <%s>\n", i->name); break; case PA_BROWSE_REMOVE_SOURCE: printf("\n=> removed source <%s>\n", i->name); break; default: ; } } int main(int argc, char *argv[]) { pa_mainloop *mainloop = NULL; pa_browser *browser = NULL; int ret = 1, r; if (!(mainloop = pa_mainloop_new())) goto finish; r = pa_signal_init(pa_mainloop_get_api(mainloop)); assert(r == 0); pa_signal_new(SIGINT, exit_signal_callback, NULL); pa_signal_new(SIGTERM, exit_signal_callback, NULL); signal(SIGPIPE, SIG_IGN); if (!(browser = pa_browser_new(pa_mainloop_get_api(mainloop)))) goto finish; pa_browser_set_callback(browser, browser_callback, NULL); ret = 0; pa_mainloop_run(mainloop, &ret); finish: if (mainloop) { pa_signal_done(); pa_mainloop_free(mainloop); } return ret; }