#include #include #include #include #include #include #include #include "core.h" #include "mainloop.h" #include "module.h" #include "mainloop-signal.h" #include "cmdline.h" #include "cli-command.h" static struct pa_mainloop *mainloop; static void exit_signal_callback(void *id, int sig, void *userdata) { struct pa_mainloop_api* m = pa_mainloop_get_api(mainloop); m->quit(m, 1); fprintf(stderr, __FILE__": got signal.\n"); } static void aux_signal_callback(void *id, int sig, void *userdata) { struct pa_core *c = userdata; assert(c); pa_module_load(c, sig == SIGUSR1 ? "module-cli" : "module-cli-protocol-unix", NULL); } int main(int argc, char *argv[]) { struct pa_core *c; struct pa_cmdline *cmdline = NULL; struct pa_strbuf *buf = NULL; char *s; int r, retval = 0; if (!(cmdline = pa_cmdline_parse(argc, argv))) { fprintf(stderr, __FILE__": failed to parse command line.\n"); return 1; } if (cmdline->help) { pa_cmdline_help(argv[0]); pa_cmdline_free(cmdline); return 0; } r = lt_dlinit(); assert(r == 0); mainloop = pa_mainloop_new(); assert(mainloop); r = pa_signal_init(pa_mainloop_get_api(mainloop)); assert(r == 0); pa_signal_register(SIGINT, exit_signal_callback, NULL); signal(SIGPIPE, SIG_IGN); c = pa_core_new(pa_mainloop_get_api(mainloop)); assert(c); /* pa_module_load(c, "module-oss-mmap", "device=/dev/dsp playback=1 record=1"); pa_module_load(c, "module-oss-mmap", "/dev/dsp1"); pa_module_load(c, "module-pipe-sink", NULL); pa_module_load(c, "module-simple-protocol-tcp", NULL); pa_module_load(c, "module-simple-protocol-unix", NULL); pa_module_load(c, "module-cli-protocol-tcp", NULL); pa_module_load(c, "module-cli-protocol-unix", NULL); pa_module_load(c, "module-native-protocol-tcp", NULL); pa_module_load(c, "module-native-protocol-unix", NULL); pa_module_load(c, "module-esound-protocol-tcp", NULL); pa_module_load(c, "module-cli", NULL);*/ pa_signal_register(SIGUSR1, aux_signal_callback, c); pa_signal_register(SIGUSR2, aux_signal_callback, c); buf = pa_strbuf_new(); assert(buf); r = pa_cli_command_execute(c, cmdline->cli_commands, buf, &cmdline->fail, &cmdline->verbose); fprintf(stderr, s = pa_strbuf_tostring_free(buf)); free(s); if (r < 0 && cmdline->fail) { fprintf(stderr, __FILE__": failed to initialize daemon.\n"); retval = 1; } else if (!c->modules || pa_idxset_ncontents(c->modules) == 0) { fprintf(stderr, __FILE__": daemon startup without any loaded modules, refusing to work.\n"); retval = 1; } else { fprintf(stderr, __FILE__": mainloop entry.\n"); if (pa_mainloop_run(mainloop, &retval) < 0) retval = 1; fprintf(stderr, __FILE__": mainloop exit.\n"); } pa_core_free(c); pa_signal_done(); pa_mainloop_free(mainloop); pa_cmdline_free(cmdline); lt_dlexit(); return retval; }