From b43af255d4514b68c98b23fb220306cf5ba1df60 Mon Sep 17 00:00:00 2001 From: Andre Date: Sat, 20 Jan 2007 22:03:56 +0100 Subject: [PATCH] make audiod use command_util.sh --- Makefile.in | 13 ++++ audiod.h | 40 ++++++++++++ audiod_command.c | 165 ++++------------------------------------------- configure.ac | 3 +- 4 files changed, 66 insertions(+), 155 deletions(-) diff --git a/Makefile.in b/Makefile.in index e416d53e..2a803f3b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -192,6 +192,19 @@ playlist_selector_command_list.h: playlist_selector.cmd echo 'extern struct server_command playlist_selector_cmds[];' > $@ ./command_util.sh proto < $< >> $@ +audiod_command_list.c: audiod.cmd audiod_command_list.h + echo '#include "list.h"' > $@ + echo '#include "para.h"' >> $@ + echo '#include "sched.h"' >> $@ + echo '#include "audiod.h"' >> $@ + echo '#include "audiod_command_list.h"' >> $@ + echo 'struct audiod_command cmds[] = {' >>$@ + ./command_util.sh array < $< >>$@ + echo '{.name = NULL}};' >> $@ +audiod_command_list.h: audiod.cmd + echo 'extern struct audiod_command cmds[];' > $@ + ./command_util.sh proto < $< >> $@ + ortp_recv.o: ortp_recv.c $(CC) -c $(CPPFLAGS) $(DEBUG_CPPFLAGS) @ortp_cppflags@ $< diff --git a/audiod.h b/audiod.h index 234c67a0..ec8290b0 100644 --- a/audiod.h +++ b/audiod.h @@ -1,4 +1,24 @@ +/* + * Copyright (C) 2006-2007 Andre Noll + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + /** \file audiod.h symbols exported from audiod.c */ + + int num_filters(int audio_format_num); int get_audio_format_num(char *name); @@ -20,6 +40,26 @@ extern const char *audio_formats[]; */ enum {AUDIOD_OFF, AUDIOD_ON, AUDIOD_STANDBY}; +/** defines one command of para_audiod */ +struct audiod_command { + /** the name of the command */ + const char *name; + /** pointer to the function that handles the command */ + int (*handler)(int, int, char**); + /** + * if the command prefers to handle the full line (rather than the usual + * argv[] array), it stores a pointer to the corresponding line handling + * function here. In this case, the above \a handler pointer must be NULL. + */ + int (*line_handler)(int, char*); + /** one-line description of the command */ + const char *description; + /** summary of the command line options */ + const char *synopsis; + /** the long help text */ + const char *help; +}; + /** * describes one instance of a receiver-filter-writer chain * diff --git a/audiod_command.c b/audiod_command.c index 312cfee1..6bf5ac86 100644 --- a/audiod_command.c +++ b/audiod_command.c @@ -34,150 +34,7 @@ #include "daemon.h" #include "string.h" #include "fd.h" - -/** defines one command of para_audiod */ -struct audiod_command { - /** the name of the command */ - const char *name; - /** pointer to the function that handles the command */ - int (*handler)(int, int, char**); - /** - * if the command prefers to handle the full line (rather than the usual - * argv[] array), it stores a pointer to the corresponding line handling - * function here. In this case, the above \a handler pointer must be NULL. - */ - int (*line_handler)(int, char*); - /** one-line description of the command */ - const char *description; - /** summary of the command line options */ - const char *synopsis; - /** the long help text */ - const char *help; -}; -static int com_grab(int, char *); -static int com_cycle(int, int, char **); -static int com_help(int, int, char **); -static int com_kill(int, int, char **); -static int com_off(int, int, char **); -static int com_on(int, int, char **); -static int com_sb(int, int, char **); -static int com_stat(int, int, char **); -static int com_tasks(int, int, char **); -static int com_term(int, int, char **); -static struct audiod_command cmds[] = { -{ -.name = "cycle", -.handler = com_cycle, -.description = "switch to next mode", -.synopsis = "cycle", -.help = - -"on -> standby -> off -> on\n" - -}, -{ -.name = "grab", -.line_handler = com_grab, -.description = "grab the audio stream", -.synopsis = "-- grab [grab_options]", -.help = - -"grab ('splice') the audio stream at any position in the filter \n" -"chain and send that data back to the client. Try\n" -"\t para_audioc -- grab -h\n" -"for the list of available options.\n" -}, - -{ -.name = "help", -.handler = com_help, -.description = "display command list or help for given command", -.synopsis = "help [command]", -.help = - -"When I was younger, so much younger than today, I never needed\n" -"anybody's help in any way. But now these days are gone, I'm not so\n" -"self assured. Now I find I've changed my mind and opened up the doors.\n" -"\n" -" -- Beatles: Help\n" - -}, -{ -.name = "kill", -.handler = com_kill, -.description = "kill an active audiod task", -.synopsis = "kill task_id [task_id ...]", -.help = - -"call sched_unregister() and the event_handler of the given task(s)\n" - -}, -{ -.name = "off", -.handler = com_off, -.description = "deactivate para_audiod", -.synopsis = "off", -.help = - -"Close connection to para_server and stop all decoders.\n" - -}, -{ -.name = "on", -.handler = com_on, -.description = "activate para_audiod", -.synopsis = "on", -.help = - -"Establish connection to para_server, retrieve para_server's current\n" -"status. If playing, start corresponding decoder. Otherwise stop\n" -"all decoders.\n" - -}, -{ -.name = "sb", -.handler = com_sb, -.description = "enter standby mode", -.synopsis = "sb", -.help = - -"Stop all decoders but leave connection to para_server open.\n" - -}, -{ -.name = "stat", -.handler = com_stat, -.description = "print status information", -.synopsis = "stat [item1 ...]", -.help = - -"Dump given status items (all if none given) to stdout.\n" - -}, -{ -.name = "tasks", -.handler = com_tasks, -.description = "list current tasks", -.synopsis = "tasks", -.help = - -"print the list of task ids together with the status of each task\n" - -}, -{ -.name = "term", -.handler = com_term, -.description = "terminate audiod", -.synopsis = "term", -.help = - -"Stop all decoders, shut down connection to para_server and exit.\n" - -}, -{ -.name = NULL, -} -}; +#include "audiod_command_list.h" /** iterate over the array of all audiod commands */ #define FOR_EACH_COMMAND(c) for (c = 0; cmds[c].name; c++) @@ -300,7 +157,7 @@ static int dump_commands(int fd) * to each individual command to close the fd if necessary. */ -static int com_help(int fd, int argc, char **argv) +int com_help(int fd, int argc, char **argv) { int i, ret; char *buf; @@ -335,7 +192,7 @@ out: return ret; } -static int com_tasks(int fd, __a_unused int argc, __a_unused char **argv) +int com_tasks(int fd, __a_unused int argc, __a_unused char **argv) { char *tl = get_task_list(); int ret = 1; @@ -347,7 +204,7 @@ static int com_tasks(int fd, __a_unused int argc, __a_unused char **argv) return ret; } -static int com_kill(int fd, int argc, char **argv) +int com_kill(int fd, int argc, char **argv) { int i, ret = 1; if (argc < 2) @@ -362,7 +219,7 @@ static int com_kill(int fd, int argc, char **argv) return ret; } -static int com_stat(int fd, __a_unused int argc, __a_unused char **argv) +int com_stat(int fd, __a_unused int argc, __a_unused char **argv) { int i, ret; char *buf = NULL; @@ -456,7 +313,7 @@ static struct filter_node *find_filter_node(int slot_num, int format, int filter return NULL; } -static int com_grab(int fd, char *cmdline) +int com_grab(int fd, char *cmdline) { struct grab_client *gc; struct filter_node *fn; @@ -493,34 +350,34 @@ err_out: return 1; } -static int __noreturn com_term(int fd, __a_unused int argc, __a_unused char **argv) +int __noreturn com_term(int fd, __a_unused int argc, __a_unused char **argv) { close(fd); clean_exit(EXIT_SUCCESS, "terminating on user request"); } -static int com_on(int fd, __a_unused int argc, __a_unused char **argv) +int com_on(int fd, __a_unused int argc, __a_unused char **argv) { audiod_status = AUDIOD_ON; close(fd); return 1; } -static int com_off(int fd, __a_unused int argc, __a_unused char **argv) +int com_off(int fd, __a_unused int argc, __a_unused char **argv) { audiod_status = AUDIOD_OFF; close(fd); return 1; } -static int com_sb(int fd, __a_unused int argc, __a_unused char **argv) +int com_sb(int fd, __a_unused int argc, __a_unused char **argv) { audiod_status = AUDIOD_STANDBY; close(fd); return 1; } -static int com_cycle(int fd, int argc, char **argv) +int com_cycle(int fd, int argc, char **argv) { switch (audiod_status) { case AUDIOD_ON: diff --git a/configure.ac b/configure.ac index 1ab497a8..1fa5ac4f 100644 --- a/configure.ac +++ b/configure.ac @@ -72,7 +72,8 @@ audioc_cmdline_objs="audioc.cmdline" audioc_errlist_objs="audioc string net fd" audiod_cmdline_objs="audiod.cmdline grab_client.cmdline compress_filter.cmdline - http_recv.cmdline dccp_recv.cmdline file_write.cmdline client.cmdline" + http_recv.cmdline dccp_recv.cmdline file_write.cmdline client.cmdline + audiod_command_list" audiod_errlist_objs="audiod signal string daemon stat net time grab_client filter_chain wav compress http_recv dccp dccp_recv recv_common fd sched write_common file_write audiod_command crypt -- 2.39.5