From 6aa6fcd54de730b4dfc75ca60f8c21009d60da0d Mon Sep 17 00:00:00 2001 From: Andre Date: Fri, 19 Jan 2007 20:39:50 +0100 Subject: [PATCH 1/1] para_server: switch to generated command list --- Makefile.in | 14 ++- command.c | 294 +++--------------------------------------------- command_util.sh | 4 +- configure.ac | 2 +- server.cmd | 4 +- 5 files changed, 36 insertions(+), 282 deletions(-) diff --git a/Makefile.in b/Makefile.in index d7e28568..e05d75b9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -148,6 +148,18 @@ grab_client.cmdline.h grab_client.cmdline.c: grab_client.ggo --set-package="para_$(subst .cmdline,,$(*F))" \ --set-version="$V" < $< +server_command_list.c: server.cmd + echo '#include "server.h"' > $@ + echo '#include "user_list.h"' >> $@ + echo '#include "server_command_list.h"' >> $@ + echo 'struct server_command cmd_struct[] = {' >>$@ + ./command_util.sh array < $< >>$@ + echo '{.name = NULL}};' >> $@ + +server_command_list.h: server.cmd + echo 'extern struct server_command cmd_struct[];' > $@ + ./command_util.sh proto < $< >> $@ + ortp_recv.o: ortp_recv.c $(CC) -c $(CPPFLAGS) $(DEBUG_CPPFLAGS) @ortp_cppflags@ $< @@ -225,7 +237,7 @@ para_krell.so: $(krell_objs) $(CC) -Wall -fPIC @GTK_CFLAGS@ krell.o -o $@ @GTK_LIBS@ -shared clean: - rm -f *.o $(BINARIES) + rm -f *.o $(BINARIES) *_command_list.* distclean: clean rm -f Makefile autoscan.log config.status config.log && \ diff --git a/command.c b/command.c index 474e1bba..acd53969 100644 --- a/command.c +++ b/command.c @@ -32,6 +32,7 @@ #include "string.h" #include "fd.h" #include "user_list.h" +#include "server_command_list.h" static RC4_KEY rc4_recv_key; static RC4_KEY rc4_send_key; @@ -44,265 +45,6 @@ extern struct sender senders[]; extern char *user_list; struct sockaddr_in *in_addr; -static int com_si(int, int, char **); -static int com_version(int, int, char **); -static int com_sb(int, int, char **); -static int com_sc(int, int, char **); -static int com_stat(int, int, char **); -static int com_help(int, int, char **); -static int com_hup(int, int, char **); -static int com_term(int, int, char **); -static int com_play(int, int, char **); -static int com_stop(int, int, char **); -static int com_pause(int, int, char **); -static int com_next(int, int, char **); -static int com_nomore(int, int, char **); -static int com_chs(int, int, char **); -static int com_ff(int, int, char **); -static int com_jmp(int, int, char **); -static int com_sender(int, int, char **); - - -/* commands that are handled by the server itself */ -static struct server_command cmd_struct[] = { -{ -.name = "chs", -.handler = com_chs, -.perms = DB_READ | DB_WRITE, -.description = "change the current audio file selector", -.synopsis = "chs [new_selector]", -.help = -"Shutdown the current selector and activate new_selector. If no\n" -"argument was given, print the name of the current selector.\n" -}, - -{ -.name = "ff", -.handler = com_ff, -.perms = VSS_READ | VSS_WRITE, -.description = "jmp amount of time forwards or backwards " - "in current audio file", -.synopsis = "ff n[-]", -.help = - -"\tSet the 'R' (reposition request) bit of the vss status flags\n" -"\tand enqueue a request to jump n seconds forwards or backwards\n" -"\tin the current audio file.\n" -"\n" -"EXAMPLE\n" -"\n" -"\t\tff 30-\n" -"\n" -"\tjumps 30 seconds backwards.\n" - -}, - -{ -.name = "help", -.handler = com_help, -.perms = 0, -.description = "print help text", -.synopsis = "help [command]", -.help = - -"Without any arguments, help prints a list of availible commands. When\n" -"issued with a command name as first argument, print out a description\n" -"for that command.\n" - -}, - -{ -.name = "hup", -.handler = com_hup, -.perms = VSS_WRITE, -.description = "force reload of config file and log file", -.synopsis = "hup", -.help = - -"After rereading the config file, a signal is sent to all children\n" -"which forces them to close/reopen the log file.\n" - -}, - -{ -.name = "jmp", -.handler = com_jmp, -.perms = VSS_READ | VSS_WRITE, -.description = "jmp to given position in current audio file", -.synopsis = "jmp [n]", -.help = - -"\tSet the 'R' (reposition request) bit of the vss status flags\n" -"\tand enqueue a request to jump to n% of the current audio file,\n" -"\twhere 0 <= n <= 100.\n" - -}, - -{ -.name = "next", -.handler = com_next, -.perms = VSS_READ | VSS_WRITE, -.description = "skip rest of current audio file", -.synopsis = "next", -.help = - -"\tSet the 'N' (next audio file) bit of the vss status flags. When\n" -"\tplaying, change audio file immediately. Equivalent to stop\n" -"\tif paused, NOP if stopped.\n" - - -}, - -{ -.name = "nomore", -.handler = com_nomore, -.perms = VSS_READ | VSS_WRITE, -.description = "stop playing after current audio file", -.synopsis = "nomore", -.help = - -"Set the 'O' (no more) bit of the vss status flags. This instructs\n" -"para_server to clear the 'P' (playing) bit as soon as it encounters\n" -"the 'N' (next audio file) bit being set.\n" -"\n" -"Use this command instead of stop if you don't like\n" -"sudden endings.\n" - -}, - -{ -.name ="pause", -.handler = com_pause, -.perms = VSS_READ | VSS_WRITE, -.description = "pause current audio file", -.synopsis = "pause", -.help = - -"\tClear the 'P' (playing) bit of the vss status flags.\n" - -}, - -{ -.name = "play", -.handler = com_play, -.perms = VSS_READ | VSS_WRITE, -.description = "start playing or resume playing when paused", -.synopsis = "play", -.help = - -"\tSet the 'P' (playing) bit of the vss status flags. This\n" -"\tresults in starting/continuing to stream.\n" - -}, - -{ -.name = "sb", -.handler = com_sb, -.perms = VSS_READ, -.description = "print status bar for current audio file", -.synopsis = "sb [n]", -.help = - -"Without any arguments, sb continuously prints a status bar of the form\n" -"\n" -" 12:34 [56:12] (56%) filename\n" -"\n" -"indicating playing time, remaining time, percentage and the name of\n" -"the file beeing streamed. Use the optional number n to let stat exit\n" -"after having displayed the status bar n times.\n" - -}, -{ -.name = "sc", -.handler = com_sc, -.perms = VSS_READ, -.description = "print name of audio file whenever it changes", -.synopsis = "sc [n]", -.help = - -"\tsc prints exactly one line (the filename of the audio file\n" -"\tbeing played) whenever the audio file changes. Stops after\n" -"\tn iterations, or never if n is not specified.\n" - -}, -{ -.name = "sender", -.handler = com_sender, -.perms = VSS_READ | VSS_WRITE, -.description = "control paraslash internal senders", -.synopsis = "sender [s cmd [arguments]]", -.help = - -"send command cmd to sender s. cmd may be one of the following:\n" -"help, on, off, add, delete, allow, or deny. Note that not all senders\n" -"support each command. Try e.g. 'para_client sender http help' for\n" -"more information about the http sender. If no argument is given,\n" -"print out a list of all senders that are compiled in.\n" - -}, -{ -.name = "si", -.handler = com_si, -.perms = 0, -.description = "print server info", -.synopsis = "si", -.help = -"Print server uptime and other information.\n" -}, - -{ -.name = "stat", -.handler = com_stat, -.perms = VSS_READ, -.description = "print status info for current audio file", -.synopsis = "stat [n]", -.help = - -"\tWithout any arguments, stat continuously prints status messages\n" -"\tof the audio file being streamed. Use the optional number n\n" -"\tto let stat exit after having displayed status n times.\n" - -}, - -{ -.name = "stop", -.handler = com_stop, -.perms = VSS_READ | VSS_WRITE, -.description = "stop playing", -.synopsis = "stop", -.help = - -"\tClear the 'P' (play) bit and set the 'N' bit of the vss status\n" -"\tflags.\n" - -}, -{ -.name = "term", -.handler = com_term, -.perms = VSS_READ | VSS_WRITE, -.description = "terminate para_server", -.synopsis = "term", -.help = - -"Shuts down the server. Instead of this command, you can also send\n" -"SIGINT or SIGTERM. It should never be necessary to send SIGKILL.\n" - -}, -{ -.name = "version", -.handler = com_version, -.perms = 0, -.description = "print server's version", -.synopsis = "version", -.help = -"Show version and other info\n" -}, -/* this indicates the end of the list. Do not touch. */ -{ -.name = NULL, -} -}; - static void dummy(__a_unused int s) {} @@ -509,7 +251,7 @@ static int check_sender_args(int argc, char **argv, struct sender_command_data * return 1; } -static int com_sender(int fd, int argc, char **argv) +int com_sender(int fd, int argc, char **argv) { int i, ret; struct sender_command_data scd; @@ -551,7 +293,7 @@ static int com_sender(int fd, int argc, char **argv) } /* server info */ -static int com_si(int fd, int argc, __a_unused char **argv) +int com_si(int fd, int argc, __a_unused char **argv) { int i, ret; char *ut; @@ -600,7 +342,7 @@ static int com_si(int fd, int argc, __a_unused char **argv) } /* version */ -static int com_version(int socket_fd, int argc, __a_unused char **argv) +int com_version(int socket_fd, int argc, __a_unused char **argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -613,7 +355,7 @@ static int com_version(int socket_fd, int argc, __a_unused char **argv) } /* sc */ -static int com_sc(int socket_fd, int argc, char **argv) +int com_sc(int socket_fd, int argc, char **argv) { char *name = NULL; int ret, old = 0, count = -1; /* print af change forever */ @@ -641,7 +383,7 @@ repeat: } /* sb */ -static int com_sb(int socket_fd, int argc, char **argv) +int com_sb(int socket_fd, int argc, char **argv) { char *sb; int ret, nr = -1; /* status bar will be printed that many @@ -668,7 +410,7 @@ static int com_sb(int socket_fd, int argc, char **argv) } /* stat */ -static int com_stat(int socket_fd, int argc, char **argv) +int com_stat(int socket_fd, int argc, char **argv) { int ret, num = 0;/* status will be printed that many * times. num <= 0 means: print forever @@ -742,7 +484,7 @@ static struct server_command *get_cmd_ptr(char *name, char **handler) } /* help */ -static int com_help(int fd, int argc, char **argv) +int com_help(int fd, int argc, char **argv) { struct server_command *cmd; char *perms, *handler; @@ -789,7 +531,7 @@ static int com_help(int fd, int argc, char **argv) } /* hup */ -static int com_hup(__a_unused int socket_fd, int argc, __a_unused char **argv) +int com_hup(__a_unused int socket_fd, int argc, __a_unused char **argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -798,7 +540,7 @@ static int com_hup(__a_unused int socket_fd, int argc, __a_unused char **argv) } /* term */ -static int com_term(__a_unused int socket_fd, int argc, __a_unused char **argv) +int com_term(__a_unused int socket_fd, int argc, __a_unused char **argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -806,7 +548,7 @@ static int com_term(__a_unused int socket_fd, int argc, __a_unused char **argv) return 1; } -static int com_play(__a_unused int socket_fd, int argc, __a_unused char **argv) +int com_play(__a_unused int socket_fd, int argc, __a_unused char **argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -819,7 +561,7 @@ static int com_play(__a_unused int socket_fd, int argc, __a_unused char **argv) } /* stop */ -static int com_stop(__a_unused int socket_fd, int argc, __a_unused char **argv) +int com_stop(__a_unused int socket_fd, int argc, __a_unused char **argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -832,7 +574,7 @@ static int com_stop(__a_unused int socket_fd, int argc, __a_unused char **argv) } /* pause */ -static int com_pause(__a_unused int socket_fd, int argc, __a_unused char **argv) +int com_pause(__a_unused int socket_fd, int argc, __a_unused char **argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -845,7 +587,7 @@ static int com_pause(__a_unused int socket_fd, int argc, __a_unused char **argv) return 1; } -static int com_chs(int fd, int argc, char **argv) +int com_chs(int fd, int argc, char **argv) { int i, ret; @@ -871,7 +613,7 @@ static int com_chs(int fd, int argc, char **argv) } /* next */ -static int com_next(__a_unused int socket_fd, int argc, __a_unused char **argv) +int com_next(__a_unused int socket_fd, int argc, __a_unused char **argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -883,7 +625,7 @@ static int com_next(__a_unused int socket_fd, int argc, __a_unused char **argv) } /* nomore */ -static int com_nomore(__a_unused int socket_fd, int argc, __a_unused char **argv) +int com_nomore(__a_unused int socket_fd, int argc, __a_unused char **argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -895,7 +637,7 @@ static int com_nomore(__a_unused int socket_fd, int argc, __a_unused char **argv } /* ff */ -static int com_ff(__a_unused int socket_fd, int argc, char **argv) +int com_ff(__a_unused int socket_fd, int argc, char **argv) { long promille; int ret, backwards = 0; @@ -934,7 +676,7 @@ out: } /* jmp */ -static int com_jmp(__a_unused int socket_fd, int argc, char **argv) +int com_jmp(__a_unused int socket_fd, int argc, char **argv) { long unsigned int i; int ret; diff --git a/command_util.sh b/command_util.sh index 0e67af1a..ea952e5b 100755 --- a/command_util.sh +++ b/command_util.sh @@ -155,9 +155,9 @@ com_array() dump_proto() { if test $line_handler -eq 0; then - echo "static int com_$name_txt(int, int, char **);" + echo "int com_$name_txt(int, int, char **);" else - echo "static int com_$name_txt(int, char *);" + echo "int com_$name_txt(int, char *);" fi } diff --git a/configure.ac b/configure.ac index e980b080..ceadf367 100644 --- a/configure.ac +++ b/configure.ac @@ -80,7 +80,7 @@ audiod_errlist_objs="audiod signal string daemon stat net audiod_ldflags="" audiod_audio_formats="" -server_cmdline_objs="server.cmdline" +server_cmdline_objs="server.cmdline server_command_list" server_errlist_objs="server mp3_afh vss command net string signal random_selector time daemon stat crypt http_send db close_on_fork playlist_selector ipc dccp dccp_send fd user_list" diff --git a/server.cmd b/server.cmd index 36553542..a7a1fb59 100644 --- a/server.cmd +++ b/server.cmd @@ -5,7 +5,7 @@ S: chs [new_selector] H: Shutdown the current selector and activate new_selector. If no H: argument was given, print the name of the current selector. --- -N: ff: +N: ff P: VSS_READ | VSS_WRITE D: jmp amount of time forwards or backwards in current audio file S: ff n[-] @@ -67,7 +67,7 @@ S: pause H: Clear the 'P' (playing) bit of the vss status flags. --- N: play -P: VSS_READ | VSS_WRITE, +P: VSS_READ | VSS_WRITE D: start playing or resume playing when paused S: play H: Set the 'P' (playing) bit of the vss status flags. This -- 2.39.2