make another function of command.c static
[paraslash.git] / command.c
index 474e1bb..7bde617 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)
 {}
 
@@ -330,14 +72,14 @@ static char *vss_status_tohuman(unsigned int flags)
 /*
  * return human readable permission string. Never returns NULL.
  */
-char *cmd_perms_itohuman(unsigned int perms)
+static char *cmd_perms_itohuman(unsigned int perms)
 {
-       char *msg = para_malloc(7 * sizeof(char));
+       char *msg = para_malloc(5 * sizeof(char));
 
-       msg[0] = perms & DB_READ? 'd' : '-';
-       msg[1] = perms & DB_WRITE? 'D' : '-';
-       msg[2] = perms & VSS_READ? 'a' : '-';
-       msg[3] = perms & VSS_WRITE? 'A' : '-';
+       msg[0] = perms & DB_READ? 'a' : '-';
+       msg[1] = perms & DB_WRITE? 'A' : '-';
+       msg[2] = perms & VSS_READ? 'v' : '-';
+       msg[3] = perms & VSS_WRITE? 'V' : '-';
        msg[4] = '\0';
        return msg;
 }
@@ -360,7 +102,7 @@ static char *vss_get_status_flags(unsigned int flags)
 /*
  * compute status bar string. Never returns NULL
  */
-char *get_sb_string(struct misc_meta_data *nmmd)
+static char *get_sb_string(struct misc_meta_data *nmmd)
 {
        char *base, *ret;
        long long unsigned secs = 0, rsecs = 0, percent = 0;
@@ -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
@@ -720,9 +462,9 @@ static int send_list_of_commands(int fd, struct server_command *cmd,
 /* always returns string that must be freed by the caller in handler */
 static struct server_command *get_cmd_ptr(char *name, char **handler)
 {
-       struct server_command *cmd = cmd_struct;
+       struct server_command *cmd;
 
-       for (cmd = cmd_struct; cmd->name; cmd++)
+       for (cmd = server_cmds; cmd->name; cmd++)
                if (!strcmp(cmd->name, name)) {
                        if (handler)
                                *handler = para_strdup("para_server"); /* server commands */
@@ -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;
@@ -750,7 +492,7 @@ static int com_help(int fd, int argc, char **argv)
 
        if (argc < 2) {
                /* no argument given, print list of commands */
-               if ((ret = send_list_of_commands(fd, cmd_struct, "server")) < 0)
+               if ((ret = send_list_of_commands(fd, server_cmds, "server")) < 0)
                        return ret;
                mmd_lock();
                handler = para_strdup(selectors[mmd->selector_num].name);
@@ -768,20 +510,17 @@ static int com_help(int fd, int argc, char **argv)
        }
        perms = cmd_perms_itohuman(cmd->perms);
        ret = send_va_buffer(fd,
-               "NAME\n\t%s - %s\n"
-               "SYNOPSIS\n\t para_client %s\n"
-               "DESCRIPTION\n%s\n"
-               "HANDLER\n"
-               "This command is handled by %s.\n\n"
-               "PERMISSIONS\n"
-               "Needed privileges for %s: %s\n",
+               "%s - %s\n\n"
+               "handler: %s\n"
+               "permissions: %s\n"
+               "usage: %s\n\n"
+               "%s\n",
                argv[1],
                cmd->description,
-               cmd->synopsis,
-               cmd->help,
                handler,
-               argv[1],
-               perms
+               perms,
+               cmd->usage,
+               cmd->help
        );
        free(perms);
        free(handler);
@@ -789,7 +528,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 +537,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 +545,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 +558,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 +571,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 +584,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 +610,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 +622,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 +634,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 +673,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;
@@ -988,7 +727,7 @@ static struct server_command *parse_cmd(const char *cmdstr)
        return get_cmd_ptr(buf, NULL);
 }
 
-long int para_rand(long unsigned max)
+static long int para_rand(long unsigned max)
 {
        return (long int) ((max + 0.0) * (random() / (RAND_MAX + 1.0)));
 }