Changeset 4467:74702c84db56 in roaraudio
- Timestamp:
- 10/10/10 17:18:48 (14 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roard
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/clients.c
r4395 r4467 86 86 ns->blockc = 0; 87 87 ns->waits = NULL; 88 ns->acclev = ACCLEV_ALL; 88 89 89 90 g_clients[i] = ns; -
roard/commands.c
r4431 r4467 33 33 34 34 struct 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}, 39 39 40 40 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}, 42 42 43 43 #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}, 47 47 #endif 48 48 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}, 51 51 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}, 54 54 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}, 60 62 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}, 71 73 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}, 73 75 74 {ROAR_CMD_BEEP, _NAME("BEEP"), req_on_beep },76 {ROAR_CMD_BEEP, _NAME("BEEP"), req_on_beep, ACCLEV_USER}, 75 77 76 {ROAR_CMD_WAIT, _NAME("WAIT"), req_on_wait },78 {ROAR_CMD_WAIT, _NAME("WAIT"), req_on_wait, ACCLEV_USER}, 77 79 78 {ROAR_CMD_EOL, _NAME("END OF LIST"), NULL }80 {ROAR_CMD_EOL, _NAME("END OF LIST"), NULL, ACCLEV_NONE} 79 81 }; 80 82 … … 103 105 if ( cmd == -1 ) 104 106 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 } 105 114 106 115 if ( (func = g_commands[cmd].handler) == NULL ) { -
roard/include/client.h
r4343 r4467 47 47 */ 48 48 49 // access level: 50 enum 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 49 60 struct roar_client_nsubscribe { 50 61 struct roar_subscriber * sub; … … 55 66 size_t blockc; 56 67 struct roar_subscriber ** waits; 68 enum roard_client_acclev acclev; 57 69 } * g_clients[ROAR_CLIENTS_MAX]; 58 70 -
roard/include/commands.h
r4343 r4467 45 45 #endif 46 46 int (*handler)(int client, struct roar_message * mes, char ** data, uint32_t flags[2]); 47 enum roard_client_acclev minacclev; 47 48 }; 48 49
Note: See TracChangeset
for help on using the changeset viewer.