Changeset 4467:74702c84db56 in roaraudio for roard/commands.c


Ignore:
Timestamp:
10/10/10 17:18:48 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

implement acclevs like rpld does, check them on command proc however still need to set them correctly.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/commands.c

    r4431 r4467  
    3333 
    3434struct roar_command g_commands[COMMAND_MAX_COMMANDS] = { 
    35   {ROAR_CMD_NOOP,         _NAME("NOOP"),         req_on_noop}, 
    36   {ROAR_CMD_IDENTIFY,     _NAME("IDENTIFY"),     req_on_identify}, 
    37   {ROAR_CMD_AUTH,         _NAME("AUTH"),         req_on_auth}, 
    38   {ROAR_CMD_WHOAMI,       _NAME("WHOAMI"),       req_on_whoami}, 
     35  {ROAR_CMD_NOOP,         _NAME("NOOP"),         req_on_noop,         ACCLEV_NONE}, 
     36  {ROAR_CMD_IDENTIFY,     _NAME("IDENTIFY"),     req_on_identify,     ACCLEV_NONE}, 
     37  {ROAR_CMD_AUTH,         _NAME("AUTH"),         req_on_auth,         ACCLEV_IDENTED}, 
     38  {ROAR_CMD_WHOAMI,       _NAME("WHOAMI"),       req_on_whoami,       ACCLEV_NONE}, 
    3939 
    4040 
    41   {ROAR_CMD_NEW_STREAM,   _NAME("NEW_STREAM"),   req_on_new_stream}, 
     41  {ROAR_CMD_NEW_STREAM,   _NAME("NEW_STREAM"),   req_on_new_stream,   ACCLEV_USER}, 
    4242 
    4343#ifdef ROAR_SUPPORT_META 
    44   {ROAR_CMD_SET_META,     _NAME("SET_META"),     req_on_set_meta}, 
    45   {ROAR_CMD_GET_META,     _NAME("GET_META"),     req_on_get_meta}, 
    46   {ROAR_CMD_LIST_META,    _NAME("LIST_META"),    req_on_list_meta}, 
     44  {ROAR_CMD_SET_META,     _NAME("SET_META"),     req_on_set_meta,     ACCLEV_PWRUSER}, 
     45  {ROAR_CMD_GET_META,     _NAME("GET_META"),     req_on_get_meta,     ACCLEV_GUEST}, 
     46  {ROAR_CMD_LIST_META,    _NAME("LIST_META"),    req_on_list_meta,    ACCLEV_GUEST}, 
    4747#endif 
    4848 
    49   {ROAR_CMD_EXEC_STREAM,  _NAME("EXEC_STREAM"),  req_on_exec_stream}, 
    50   {ROAR_CMD_QUIT,         _NAME("QUIT"),         (int(*)(int client, struct roar_message * mes, char ** data, uint32_t flags[2]))clients_delete}, 
     49  {ROAR_CMD_EXEC_STREAM,  _NAME("EXEC_STREAM"),  req_on_exec_stream,  ACCLEV_PWRUSER}, 
     50  {ROAR_CMD_QUIT,         _NAME("QUIT"),         (int(*)(int client, struct roar_message * mes, char ** data, uint32_t flags[2]))clients_delete, ACCLEV_NONE}, 
    5151 
    52   {ROAR_CMD_CON_STREAM,   _NAME("CON_STREAM"),   req_on_con_stream}, 
    53   {ROAR_CMD_PASSFH,       _NAME("PASSFH"),       req_on_passfh}, 
     52  {ROAR_CMD_CON_STREAM,   _NAME("CON_STREAM"),   req_on_con_stream,   ACCLEV_PWRUSER}, 
     53  {ROAR_CMD_PASSFH,       _NAME("PASSFH"),       req_on_passfh,       ACCLEV_PWRUSER}, 
    5454 
    55   {ROAR_CMD_SERVER_INFO,  _NAME("SERVER_INFO"),  req_on_server_info}, 
    56   {ROAR_CMD_SERVER_OINFO, _NAME("SERVER_OINFO"), req_on_server_oinfo}, 
    57   {ROAR_CMD_GET_STANDBY,  _NAME("GET_STANDBY"),  req_on_get_standby}, 
    58   {ROAR_CMD_SET_STANDBY,  _NAME("SET_STANDBY"),  req_on_set_standby}, 
    59   {ROAR_CMD_EXIT,         _NAME("EXIT"),         req_on_exit}, 
     55  {ROAR_CMD_SERVER_INFO,  _NAME("SERVER_INFO"),  req_on_server_info,  ACCLEV_IDENTED}, // allow this early so the client 
     56                                                                                       // can device ealry if this server 
     57                                                                                       // provieds all needed features 
     58  {ROAR_CMD_SERVER_OINFO, _NAME("SERVER_OINFO"), req_on_server_oinfo, ACCLEV_IDENTED}, // same as above 
     59  {ROAR_CMD_GET_STANDBY,  _NAME("GET_STANDBY"),  req_on_get_standby,  ACCLEV_GUEST}, 
     60  {ROAR_CMD_SET_STANDBY,  _NAME("SET_STANDBY"),  req_on_set_standby,  ACCLEV_PWRUSER}, // should this be set to ACCLEV_ALL? 
     61  {ROAR_CMD_EXIT,         _NAME("EXIT"),         req_on_exit,         ACCLEV_ALL}, 
    6062 
    61   {ROAR_CMD_LIST_CLIENTS, _NAME("LIST_CLIENTS"), req_on_list_clients}, 
    62   {ROAR_CMD_LIST_STREAMS, _NAME("LIST_STREAMS"), req_on_list_streams}, 
    63   {ROAR_CMD_GET_CLIENT,   _NAME("GET_CLIENT"),   req_on_get_client}, 
    64   {ROAR_CMD_GET_STREAM,   _NAME("GET_STREAM"),   req_on_get_stream}, 
    65   {ROAR_CMD_KICK,         _NAME("KICK"),         req_on_kick}, 
    66   {ROAR_CMD_ATTACH,       _NAME("ATTACH"),       req_on_attach}, 
    67   {ROAR_CMD_SET_VOL,      _NAME("SET_VOL"),      req_on_set_vol}, 
    68   {ROAR_CMD_GET_VOL,      _NAME("GET_VOL"),      req_on_get_vol}, 
    69   {ROAR_CMD_GET_STREAM_PARA, _NAME("GET_STREAM_PARA"), req_on_get_stream_para}, 
    70   {ROAR_CMD_SET_STREAM_PARA, _NAME("SET_STREAM_PARA"), req_on_set_stream_para}, 
     63  {ROAR_CMD_LIST_CLIENTS, _NAME("LIST_CLIENTS"), req_on_list_clients, ACCLEV_GUEST}, 
     64  {ROAR_CMD_LIST_STREAMS, _NAME("LIST_STREAMS"), req_on_list_streams, ACCLEV_GUEST}, 
     65  {ROAR_CMD_GET_CLIENT,   _NAME("GET_CLIENT"),   req_on_get_client,   ACCLEV_GUEST}, 
     66  {ROAR_CMD_GET_STREAM,   _NAME("GET_STREAM"),   req_on_get_stream,   ACCLEV_GUEST}, 
     67  {ROAR_CMD_KICK,         _NAME("KICK"),         req_on_kick,         ACCLEV_PWRUSER}, 
     68  {ROAR_CMD_ATTACH,       _NAME("ATTACH"),       req_on_attach,       ACCLEV_PWRUSER}, 
     69  {ROAR_CMD_SET_VOL,      _NAME("SET_VOL"),      req_on_set_vol,      ACCLEV_PWRUSER}, 
     70  {ROAR_CMD_GET_VOL,      _NAME("GET_VOL"),      req_on_get_vol,      ACCLEV_GUEST}, 
     71  {ROAR_CMD_GET_STREAM_PARA, _NAME("GET_STREAM_PARA"), req_on_get_stream_para, ACCLEV_GUEST}, 
     72  {ROAR_CMD_SET_STREAM_PARA, _NAME("SET_STREAM_PARA"), req_on_set_stream_para, ACCLEV_PWRUSER}, 
    7173 
    72   {ROAR_CMD_ADD_DATA,     _NAME("ADD_DATA"),     req_on_add_data}, 
     74  {ROAR_CMD_ADD_DATA,     _NAME("ADD_DATA"),     req_on_add_data,     ACCLEV_PWRUSER}, 
    7375 
    74   {ROAR_CMD_BEEP,         _NAME("BEEP"),         req_on_beep}, 
     76  {ROAR_CMD_BEEP,         _NAME("BEEP"),         req_on_beep,         ACCLEV_USER}, 
    7577 
    76   {ROAR_CMD_WAIT,         _NAME("WAIT"),         req_on_wait}, 
     78  {ROAR_CMD_WAIT,         _NAME("WAIT"),         req_on_wait,         ACCLEV_USER}, 
    7779 
    78   {ROAR_CMD_EOL,          _NAME("END OF LIST"),  NULL} 
     80  {ROAR_CMD_EOL,          _NAME("END OF LIST"),  NULL,                ACCLEV_NONE} 
    7981 }; 
    8082 
     
    103105 if ( cmd == -1 ) 
    104106  return -1; 
     107 
     108 // NOTE: This is optimized for speed here, so we do notc al clients_get(). 
     109 // we maybe should do but current just don't. /client/ must be valid anyway. 
     110 if ( g_commands[cmd].minacclev > g_clients[client]->acclev ) { 
     111  ROAR_WARN("command_exec(client=%i, mes=%p{.cmd=%i,...}, data=%p, flags=%p) = -1 // client not allowed to use command %s", client, mes, (int)mes->cmd, data, flags, g_commands[cmd].name); 
     112  return -1; 
     113 } 
    105114 
    106115 if ( (func = g_commands[cmd].handler) == NULL ) { 
Note: See TracChangeset for help on using the changeset viewer.