Changeset 2522:bfca230702b0 in roaraudio
- Timestamp:
- 09/01/09 17:25:40 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/roard/protocol-esound.c
r2521 r2522 34 34 #endif 35 35 36 #define _cmd_t int 37 #define _INTSIZE sizeof(_cmd_t) 38 36 39 struct emul_esd_command g_emul_esd_commands[] = { 37 {ESD_PROTO_CONNECT, ESD_KEY_LEN + sizeof(int), _NAME("CONNECT"), NULL}, 38 {ESD_PROTO_LOCK, ESD_KEY_LEN + sizeof(int), _NAME("LOCK"), NULL}, 39 {ESD_PROTO_UNLOCK, ESD_KEY_LEN + sizeof(int), _NAME("UNLOCK"), NULL}, 40 {ESD_PROTO_STREAM_PLAY, ESD_NAME_MAX + 2 * sizeof(int), _NAME("STREAM_PLAY"), NULL}, 41 {ESD_PROTO_STREAM_REC, ESD_NAME_MAX + 2 * sizeof(int), _NAME("STREAM_REC"), NULL}, 42 {ESD_PROTO_STREAM_MON, ESD_NAME_MAX + 2 * sizeof(int), _NAME("STREAM_MON"), NULL}, 43 {ESD_PROTO_SAMPLE_CACHE, ESD_NAME_MAX + 3 * sizeof(int), _NAME("SAMPLE_CACHE"), NULL}, 44 {ESD_PROTO_SAMPLE_FREE, sizeof(int), _NAME("SAMPLE_FREE"), NULL}, 45 {ESD_PROTO_SAMPLE_PLAY, sizeof(int), _NAME("SAMPLE_PLAY"), NULL}, 46 {ESD_PROTO_SAMPLE_LOOP, sizeof(int), _NAME("SAMPLE_LOOP"), NULL}, 47 {ESD_PROTO_SAMPLE_STOP, sizeof(int), _NAME("SAMPLE_STOP"), NULL}, 48 {ESD_PROTO_SAMPLE_KILL, 0 , _NAME("SAMPLE_KILL"), NULL}, 49 {ESD_PROTO_STANDBY, ESD_KEY_LEN + sizeof(int), _NAME("STANDBY"), NULL}, 50 {ESD_PROTO_RESUME, ESD_KEY_LEN + sizeof(int), _NAME("RESUME"), NULL}, 51 {ESD_PROTO_SAMPLE_GETID, ESD_NAME_MAX, _NAME("SAMPLE_GETID"), NULL}, 52 {ESD_PROTO_STREAM_FILT, ESD_NAME_MAX + 2 * sizeof(int), _NAME("STREAM_FILT"), NULL}, 53 {ESD_PROTO_SERVER_INFO, sizeof(int), _NAME("SERVER_INFO"), NULL}, 54 {ESD_PROTO_ALL_INFO, sizeof(int), _NAME("ALL_INFO"), NULL}, 55 {ESD_PROTO_SUBSCRIBE, 0 , _NAME("SUBSCRIBE"), NULL}, 56 {ESD_PROTO_UNSUBSCRIBE, 0 , _NAME("UNSUBSCRIBE"), NULL}, 57 {ESD_PROTO_STREAM_PAN, 3 * sizeof(int), _NAME("STREAM_PAN"), NULL}, 58 {ESD_PROTO_SAMPLE_PAN, 3 * sizeof(int), _NAME("SAMPLE_PAN"), NULL}, 59 {ESD_PROTO_STANDBY_MODE, sizeof(int), _NAME("STANDBY_MODE"), NULL}, 60 {ESD_PROTO_LATENCY, 0 , _NAME("LATENCY"), NULL}, 40 {ESD_PROTO_CONNECT, ESD_KEY_LEN + _INTSIZE, _NAME("CONNECT"), NULL}, 41 {ESD_PROTO_LOCK, ESD_KEY_LEN + _INTSIZE, _NAME("LOCK"), NULL}, 42 {ESD_PROTO_UNLOCK, ESD_KEY_LEN + _INTSIZE, _NAME("UNLOCK"), NULL}, 43 {ESD_PROTO_STREAM_PLAY, ESD_NAME_MAX + 2 * _INTSIZE, _NAME("STREAM_PLAY"), NULL}, 44 {ESD_PROTO_STREAM_REC, ESD_NAME_MAX + 2 * _INTSIZE, _NAME("STREAM_REC"), NULL}, 45 {ESD_PROTO_STREAM_MON, ESD_NAME_MAX + 2 * _INTSIZE, _NAME("STREAM_MON"), NULL}, 46 {ESD_PROTO_SAMPLE_CACHE, ESD_NAME_MAX + 3 * _INTSIZE, _NAME("SAMPLE_CACHE"), NULL}, 47 {ESD_PROTO_SAMPLE_FREE, _INTSIZE, _NAME("SAMPLE_FREE"), NULL}, 48 {ESD_PROTO_SAMPLE_PLAY, _INTSIZE, _NAME("SAMPLE_PLAY"), NULL}, 49 {ESD_PROTO_SAMPLE_LOOP, _INTSIZE, _NAME("SAMPLE_LOOP"), NULL}, 50 {ESD_PROTO_SAMPLE_STOP, _INTSIZE, _NAME("SAMPLE_STOP"), NULL}, 51 {ESD_PROTO_SAMPLE_KILL, 0 , _NAME("SAMPLE_KILL"), NULL}, 52 {ESD_PROTO_STANDBY, ESD_KEY_LEN + _INTSIZE, _NAME("STANDBY"), NULL}, 53 {ESD_PROTO_RESUME, ESD_KEY_LEN + _INTSIZE, _NAME("RESUME"), NULL}, 54 {ESD_PROTO_SAMPLE_GETID, ESD_NAME_MAX , _NAME("SAMPLE_GETID"), NULL}, 55 {ESD_PROTO_STREAM_FILT, ESD_NAME_MAX + 2 * _INTSIZE, _NAME("STREAM_FILT"), NULL}, 56 {ESD_PROTO_SERVER_INFO, _INTSIZE, _NAME("SERVER_INFO"), NULL}, 57 {ESD_PROTO_ALL_INFO, _INTSIZE, _NAME("ALL_INFO"), NULL}, 58 {ESD_PROTO_SUBSCRIBE, 0 , _NAME("SUBSCRIBE"), NULL}, 59 {ESD_PROTO_UNSUBSCRIBE, 0 , _NAME("UNSUBSCRIBE"), NULL}, 60 {ESD_PROTO_STREAM_PAN, 3 * _INTSIZE, _NAME("STREAM_PAN"), NULL}, 61 {ESD_PROTO_SAMPLE_PAN, 3 * _INTSIZE, _NAME("SAMPLE_PAN"), NULL}, 62 {ESD_PROTO_STANDBY_MODE, _INTSIZE, _NAME("STANDBY_MODE"), NULL}, 63 {ESD_PROTO_LATENCY, 0 , _NAME("LATENCY"), NULL}, 64 {ESD_PROTO_MAX, 0 , _NAME("MAX"), NULL}, 61 65 {-1, 0, _NAME("END OF LIST"), NULL} 62 66 }; 67 68 int emul_esd_exec_command(int client, int cmd, struct roar_vio_calls * vio) { 69 struct emul_esd_command * cur; 70 void * data = NULL; 71 int r; 72 int i; 73 74 if ( client == -1 || cmd < ESD_PROTO_CONNECT || cmd > ESD_PROTO_MAX || vio == NULL ) 75 return -1; 76 77 for (i = 0; (cur = &(g_emul_esd_commands[i]))->cmd != -1; i++) { 78 if ( cur->cmd == cmd ) { 79 if ( cur->datalen > 0 ) { 80 if ( (data = malloc(cur->datalen)) == NULL ) { 81 // we will do a protocol error in case we do not drop the client 82 clients_delete(client); 83 return -1; 84 } 85 86 if ( roar_vio_read(vio, data, cur->datalen) != cur->datalen ) { 87 free(data); 88 clients_delete(client); 89 return -1; 90 } 91 } 92 93 if ( cur->handler == NULL ) { 94 ROAR_WARN("emul_esd_exec_command(client=%i, cmd=%s(%i), vio=%p): client uses unimplemted command", 95 client, cur->name, cmd, vio 96 ); 97 r = -1; 98 } else { 99 r = cur->handler(client, cur, data, vio); 100 } 101 102 if ( data != NULL ) 103 free(data); 104 105 return r; 106 } 107 } 108 109 return -1; 110 } 111 112 int emul_esd_check_client(int client, struct roar_vio_calls * vio) { 113 struct roar_vio_calls calls; 114 _cmd_t cmd; 115 116 if ( client == -1 ) 117 return -1; 118 119 if ( vio == NULL ) { 120 vio = &calls; 121 if ( roar_vio_open_fh(vio, clients_get_fh(client)) == -1 ) 122 return -1; 123 } 124 125 if ( roar_vio_read(vio, &cmd, _INTSIZE) != _INTSIZE ) { 126 // really bad protocol error 127 clients_delete(client); 128 return -1; 129 } 130 131 return emul_esd_exec_command(client, cmd, vio); 132 } 63 133 64 134 #endif -
roard/include/emul_esd.h.OLD
r2521 r2522 39 39 char * name; 40 40 #endif 41 int (*handler)(int client, struct emul_esd_command * cmd, char * data);41 int (*handler)(int client, struct emul_esd_command * cmd, void * data, struct roar_vio_calls * vio); 42 42 }; 43 44 int emul_esd_exec_command(int client, int cmd, struct roar_vio_calls * vio); 45 int emul_esd_check_client(int client, struct roar_vio_calls * vio); 43 46 44 47 #endif
Note: See TracChangeset
for help on using the changeset viewer.