Changeset 3820:105b2c84ffdc in roaraudio for roard/emul_rsound.c
- Timestamp:
- 05/11/10 14:20:16 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note: See TracChangeset
for help on using the changeset viewer.