para_server: switch to generated command list
authorAndre <maan@meins.(none)>
Fri, 19 Jan 2007 19:39:50 +0000 (20:39 +0100)
committerAndre <maan@meins.(none)>
Fri, 19 Jan 2007 19:39:50 +0000 (20:39 +0100)
Makefile.in
command.c
command_util.sh
configure.ac
server.cmd

index d7e2856..e05d75b 100644 (file)
@@ -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 && \
index 474e1bb..acd5396 100644 (file)
--- 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;
index 0e67af1..ea952e5 100755 (executable)
@@ -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
 }
 
index e980b08..ceadf36 100644 (file)
@@ -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"
index 3655354..a7a1fb5 100644 (file)
@@ -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