Changeset 3820:105b2c84ffdc in roaraudio
- Timestamp:
- 05/11/10 14:20:16 (14 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roard
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/clients.c
r3737 r3820 457 457 #ifndef ROAR_WITHOUT_DCOMP_EMUL_ESD 458 458 case ROAR_PROTO_RSOUND: 459 rv = clients_delete(id);459 rv = emul_rsound_check_client(id, NULL); 460 460 break; 461 461 #endif -
roard/emul_rsound.c
r3686 r3820 132 132 } 133 133 134 int emul_rsound_vrecv_msg(struct emul_rsound_msg * msg, struct roar_vio_calls * vio) { 135 ssize_t ret; 136 int num; 137 138 if ( msg == NULL || vio == NULL ) 139 return -1; 140 141 ret = roar_vio_read(vio, msg->header, EMUL_RSOUND_MSG_HEADER_LEN); 142 143 if ( ret != EMUL_RSOUND_MSG_HEADER_LEN ) 144 return -1; 145 146 msg->header[ret] = 0; 147 148 if ( msg->header[0] != 'R' || msg->header[1] != 'S' || msg->header[2] != 'D' ) 149 return -1; 150 151 if ( sscanf(&(msg->header[3]), "%5d", &num) != 1 ) 152 return -1; 153 154 if ( num > EMUL_RSOUND_MSG_DATA_LEN ) 155 return -1; 156 157 msg->datalen = num; 158 159 ret = roar_vio_read(vio, msg->data, num); 160 161 if ( ret != (ssize_t)num ) 162 return -1; 163 164 msg->data[num] = 0; 165 166 msg->datasp = msg->data; 167 msg->dataslen = msg->datalen; 168 169 for (num = 0; msg->data[num] == ' '; num++) { 170 msg->datasp++; 171 msg->dataslen--; 172 } 173 174 return 0; 175 } 176 177 int emul_rsound_vsend_msg(struct emul_rsound_msg * msg, struct roar_vio_calls * vio) { 178 ssize_t ret; 179 180 if ( msg == NULL || vio == NULL ) 181 return -1; 182 183 snprintf(msg->header, EMUL_RSOUND_MSG_HEADER_LEN+1, "RSD%5d", msg->datalen); 184 185 ret = roar_vio_write(vio, msg->header, EMUL_RSOUND_MSG_HEADER_LEN); 186 187 if ( ret != EMUL_RSOUND_MSG_HEADER_LEN ) 188 return -1; 189 190 ret = roar_vio_write(vio, msg->data, msg->datalen); 191 192 if ( ret != (ssize_t)msg->datalen ) 193 return -1; 194 195 return 0; 196 } 197 198 int emul_rsound_check_client(int client, struct roar_vio_calls * vio) { 199 struct roar_vio_calls rvio; 200 struct emul_rsound_msg msg; 201 202 if ( vio == NULL ) { 203 vio = &rvio; 204 roar_vio_open_fh_socket(vio, clients_get_fh(client)); 205 } 206 207 if ( emul_rsound_vrecv_msg(&msg, vio) == -1 ) 208 return clients_delete(client); 209 210 if ( !strncmp(msg.datasp, "INFO", 4) ) { 211 // TODO: add support for INFO 212 return clients_delete(client); 213 } else if ( !strncmp(msg.datasp, "NULL", 4) ) { 214 // NULL is simular to NOOP 215 return 0; 216 } else if ( !strncmp(msg.datasp, "STOP", 4) ) { 217 // This is quit. 218 return clients_delete(client); 219 } else { 220 return clients_delete(client); 221 } 222 } 134 223 #endif 135 224 -
roard/include/emul_rsound.h
r3684 r3820 31 31 #ifndef ROAR_WITHOUT_DCOMP_EMUL_RSOUND 32 32 33 #define EMUL_RSOUND_MSG_HEADER_LEN (3+5) 34 #define EMUL_RSOUND_MSG_DATA_LEN (64) 35 36 struct emul_rsound_msg { 37 char header[EMUL_RSOUND_MSG_HEADER_LEN+1]; 38 size_t datalen; 39 char data[EMUL_RSOUND_MSG_DATA_LEN+1]; 40 char * datasp; 41 size_t dataslen; 42 }; 43 44 int emul_rsound_vrecv_msg(struct emul_rsound_msg * msg, struct roar_vio_calls * vio); 45 int emul_rsound_vsend_msg(struct emul_rsound_msg * msg, struct roar_vio_calls * vio); 46 33 47 int emul_rsound_on_connect (int fh, struct roard_listen * lsock); 48 int emul_rsound_check_client(int client, struct roar_vio_calls * vio); 34 49 35 50 #endif
Note: See TracChangeset
for help on using the changeset viewer.