source: roaraudio/roard/commands.c @ 465:82fd66e50dc3

Last change on this file since 465:82fd66e50dc3 was 465:82fd66e50dc3, checked in by phi, 16 years ago

added support to get the size of optimal read() and write()s

File size: 2.4 KB
Line 
1//commands.c:
2
3#include "roard.h"
4
5struct roar_command g_commands[COMMAND_MAX_COMMANDS] = {
6  {ROAR_CMD_NOOP,         "NOOP",         req_on_noop},
7  {ROAR_CMD_IDENTIFY,     "IDENTIFY",     req_on_identify},
8  {ROAR_CMD_AUTH,         "AUTH",         req_on_auth},
9  {ROAR_CMD_NEW_STREAM,   "NEW_STREAM",   req_on_new_stream},
10
11  {ROAR_CMD_SET_META,     "SET_META",     req_on_set_meta},
12  {ROAR_CMD_GET_META,     "GET_META",     req_on_get_meta},
13  {ROAR_CMD_LIST_META,    "LIST_META",    req_on_list_meta},
14
15  {ROAR_CMD_EXEC_STREAM,  "EXEC_STREAM",  req_on_exec_stream},
16  {ROAR_CMD_QUIT,         "QUIT",         (int(*)(int client, struct roar_message * mes, char * data))clients_delete},
17
18  {ROAR_CMD_CON_STREAM,   "CON_STREAM",   req_on_con_stream},
19
20  {ROAR_CMD_SERVER_OINFO, "SERVER_OINFO", req_on_server_oinfo},
21  {ROAR_CMD_GET_STANDBY,  "GET_STANDBY",  req_on_get_standby},
22  {ROAR_CMD_SET_STANDBY,  "SET_STANDBY",  req_on_set_standby},
23  {ROAR_CMD_EXIT,         "EXIT",         req_on_exit},
24
25  {ROAR_CMD_LIST_CLIENTS, "LIST_CLIENTS", req_on_list_clients},
26  {ROAR_CMD_LIST_STREAMS, "LIST_STREAMS", req_on_list_streams},
27  {ROAR_CMD_GET_CLIENT,   "GET_CLIENT",   req_on_get_client},
28  {ROAR_CMD_GET_STREAM,   "GET_STREAM",   req_on_get_stream},
29  {ROAR_CMD_KICK,         "KICK",         req_on_kick},
30  {ROAR_CMD_SET_VOL,      "SET_VOL",      req_on_set_vol},
31  {ROAR_CMD_GET_VOL,      "GET_VOL",      req_on_get_vol},
32  {ROAR_CMD_GET_STREAM_PARA, "GET_STREAM_PARA", req_on_get_stream_para},
33
34  {ROAR_CMD_ADD_DATA,     "ADD_DATA",     req_on_add_data},
35
36  {ROAR_CMD_EOL,          "END OF LIST",  NULL}
37 };
38
39int command_get_id_by_cmd (int command) {
40 int i;
41 int cmd;
42
43 for (i = 0; i < COMMAND_MAX_COMMANDS; i++) {
44  if ( (cmd = g_commands[i].cmd) == ROAR_CMD_EOL )
45   break;
46
47  if ( cmd == command )
48   return i;
49 }
50
51 return -1;
52}
53
54int command_exec (int client, struct roar_message * mes, char * data) {
55 int cmd = command_get_id_by_cmd(mes->cmd);
56 int (*func)(int client, struct roar_message * mes, char * data);
57
58 if ( cmd == -1 )
59  return -1;
60
61 if ( (func = g_commands[cmd].handler) == NULL )
62  return -1;
63
64 ROAR_DBG("command_exec(*): Execing command %i(%s) via %p", cmd, g_commands[cmd].name, func);
65
66 return func(client, mes, data);
67}
68
69int command_get_name (int command, char ** name) {
70 int cmd = command_get_id_by_cmd(command);
71
72 if ( cmd == -1 ) {
73  *name = NULL;
74  return -1;
75 }
76
77 *name = g_commands[cmd].name;
78
79 return 0;
80}
81
82
83//ll
Note: See TracBrowser for help on using the repository browser.