Changeset 4467:74702c84db56 in roaraudio


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.

Location:
roard
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • roard/clients.c

    r4395 r4467  
    8686    ns->blockc   = 0; 
    8787    ns->waits    = NULL; 
     88    ns->acclev   = ACCLEV_ALL; 
    8889 
    8990    g_clients[i] = ns; 
  • 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 ) { 
  • roard/include/client.h

    r4343 r4467  
    4747*/ 
    4848 
     49// access level: 
     50enum roard_client_acclev { 
     51 ACCLEV_NONE     = 0, // only very basic commands like NOOP and IDENTIFY 
     52 ACCLEV_IDENTED,      // same as NONE but INDENTIFY worked. 
     53 ACCLEV_CONCTL,       // only allowed to do basic connection things. 
     54 ACCLEV_GUEST,        // guest connection (read only) 
     55 ACCLEV_USER,         // normal user connect (read write) 
     56 ACCLEV_PWRUSER,      // power user, may access other user's clients 
     57 ACCLEV_ALL           // full (admin) access (read write ctl) 
     58}; 
     59 
    4960struct roar_client_nsubscribe { 
    5061 struct roar_subscriber * sub; 
     
    5566 size_t blockc; 
    5667 struct roar_subscriber ** waits; 
     68 enum roard_client_acclev acclev; 
    5769} * g_clients[ROAR_CLIENTS_MAX]; 
    5870 
  • roard/include/commands.h

    r4343 r4467  
    4545#endif 
    4646 int (*handler)(int client, struct roar_message * mes, char ** data, uint32_t flags[2]); 
     47 enum roard_client_acclev minacclev; 
    4748}; 
    4849 
Note: See TracChangeset for help on using the changeset viewer.