Changeset 5146:716400712348 in roaraudio for libroar
- Timestamp:
- 10/15/11 12:48:07 (13 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- libroar
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/asyncctl.c
r4708 r5146 76 76 m.datalen = len_have; 77 77 78 if ( roar_req (con, &m, NULL) != 0 )78 if ( roar_req3(con, &m, NULL) != 0 ) 79 79 return -1; 80 80 -
libroar/auth.c
r5144 r5146 135 135 char * data = NULL; 136 136 137 ROAR_DBG("roar_auth_ask_server(con=%p, authmes=%p{.type=%i}) = ?", con, authmes, authmes->type); 138 139 roar_err_init(&error_frame); 137 140 memset(&mes, 0, sizeof(struct roar_message)); // make valgrind happy! 138 141 … … 162 165 } 163 166 164 if ( (ret = roar_req(con, &mes, &data)) == -1 ) { 167 ROAR_DBG("roar_auth_ask_server(con=%p, authmes=%p{.type=%i}) = ?", con, authmes, authmes->type); 168 169 if ( (ret = roar_req2(con, &mes, &data, &error_frame)) == -1 ) { 165 170 authmes->type = -1; 166 return -1; 167 } 171 ROAR_DBG("roar_auth_ask_server(con=%p, authmes=%p) = -1 // next: -1", con, authmes, authmes->type); 172 return -1; 173 } 174 175 ROAR_DBG("roar_auth_ask_server(con=%p, authmes=%p{.type=%i}): mes->cmd=%i", con, authmes, authmes->type, mes.cmd); 168 176 169 177 if ( data != NULL ) { … … 173 181 } 174 182 175 if ( mes.cmd != ROAR_CMD_OK ) { 176 if ( data != NULL ) { 177 // we currently do not support long error frames. 178 free(data); 179 return -1; 180 } 181 183 if ( mes.cmd == ROAR_CMD_ERROR ) 182 184 ret = -1; 183 if ( roar_err_parsemsg(&mes, &error_frame) == -1 ) { 184 authmes->type = -1;185 return -1;186 } 187 185 186 ROAR_DBG("roar_auth_ask_server(con=%p, authmes=%p{.type=%i}): error_frame.data=%p", 187 con, authmes, authmes->type, error_frame.data); 188 189 if ( mes.cmd == ROAR_CMD_ERROR && error_frame.data != NULL ) { 188 190 header = error_frame.data; 189 191 mes.datalen = error_frame.datalen; 190 192 } 193 194 ROAR_DBG("roar_auth_ask_server(con=%p, authmes=%p{.type=%i}) = ?", con, authmes, authmes->type); 191 195 192 196 if ( mes.datalen < 4 ) { … … 197 201 } 198 202 203 ROAR_DBG("roar_auth_ask_server(con=%p, authmes=%p) = ?", con, authmes); 204 199 205 authmes->stage = header[1]; 200 206 authmes->reserved.c[0] = header[2]; … … 204 210 free(data); 205 211 212 ROAR_DBG("roar_auth_ask_server(con=%p, authmes=%p) = %i // next: %i", con, authmes, ret, authmes->type); 206 213 return ret; 207 214 } … … 307 314 for (i = 0; ltt[i] != _EOL; i++) { 308 315 next = ltt[i]; 316 ROAR_DBG("roar_auth(con=%p): next from ltt: %s(%i)", con, roar_autht2str(next), next); 317 309 318 while (next != -1) { 310 319 done = 1; … … 312 321 cur = next; 313 322 next = -1; 323 324 ROAR_DBG("roar_auth(con=%p): cur=%s(%i)", con, roar_autht2str(cur), cur); 314 325 315 326 switch (cur) { … … 322 333 case ROAR_AUTH_T_RHOST: 323 334 case ROAR_AUTH_T_NONE: 324 roar_auth_mes_init(&authmes, ltt[i]);335 roar_auth_mes_init(&authmes, cur); 325 336 if ( (ret = roar_auth_ask_server(con, &authmes)) == -1 ) 326 337 done = 0; … … 341 352 done = 0; 342 353 343 if ( done ) 354 ROAR_DBG("roar_auth(con=%p): done=%i, next=%i", con, done, next); 355 356 if ( done ) { 357 ROAR_DBG("roar_auth(con=%p) = 0", con); 344 358 return 0; 359 } 345 360 } 346 361 } 347 362 363 ROAR_DBG("roar_auth(con=%p) = -1", con); 348 364 return -1; 349 365 } … … 354 370 char header[4] = {0, 0, 0, 0}; 355 371 356 if ( ames == NULL || mes == NULL ) 357 return -1; 372 if ( ames == NULL || mes == NULL ) { 373 roar_err_set(ROAR_ERROR_FAULT); 374 return -1; 375 } 358 376 359 377 if ( data != NULL ) { … … 386 404 char * obuf; 387 405 388 if ( mes == NULL || ames == NULL ) 389 return -1; 406 if ( mes == NULL || ames == NULL ) { 407 roar_err_set(ROAR_ERROR_FAULT); 408 return -1; 409 } 390 410 391 411 if ( data != NULL ) -
libroar/basic.c
r5144 r5146 389 389 mes.stream = -1; 390 390 391 return roar_req (con, &mes, NULL);391 return roar_req3(con, &mes, NULL); 392 392 } 393 393 … … 432 432 strncpy(mes.data+5, name, max_len); 433 433 434 return roar_req (con, &mes, NULL);434 return roar_req3(con, &mes, NULL); 435 435 } 436 436 -
libroar/beep.c
r5145 r5146 63 63 } 64 64 65 if ( roar_req (con, &m, NULL) != 0 )65 if ( roar_req3(con, &m, NULL) != 0 ) 66 66 return -1; 67 67 -
libroar/error.c
r5097 r5146 45 45 int roar_errno = ROAR_ERROR_NONE; 46 46 47 struct roar_error_frame * roar_err_errorframe(void) { 48 static struct roar_error_frame frame = { 49 .version = 0, 50 .cmd = -1, 51 .ra_errno = ROAR_ERROR_UNKNOWN, 52 .ra_suberrno = -1, 53 .p_errno = -1, 54 .flags = 0, 55 .datalen = 0, 56 .data = NULL 57 }; 58 59 return &frame; 60 } 61 47 62 int roar_err_int(struct roar_error_frame * frame) { 48 if ( frame == NULL ) 63 roar_debug_warn_obsolete("roar_err_int", "roar_err_init", NULL); 64 return roar_err_init(frame); 65 } 66 int roar_err_init(struct roar_error_frame * frame) { 67 if ( frame == NULL ) { 68 roar_err_set(ROAR_ERROR_FAULT); 49 69 return -1; 70 } 50 71 51 72 memset(frame, 0, sizeof(struct roar_error_frame)); 52 73 53 74 frame->cmd = -1; 54 frame->ra_errno = -1;75 frame->ra_errno = ROAR_ERROR_UNKNOWN; 55 76 frame->ra_suberrno = -1; 56 77 frame->p_errno = -1; 78 frame->datalen = 0; 79 frame->data = NULL; 57 80 58 81 return 0; 59 82 } 60 83 84 61 85 void * roar_err_buildmsg(struct roar_message * mes, struct roar_error_frame * frame) { 86 roar_debug_warn_obsolete("roar_err_buildmsg", "roar_err_buildmsg2", NULL); 87 return roar_err_buildmsg2(mes, NULL, frame); 88 } 89 void * roar_err_buildmsg2(struct roar_message * mes, void ** data, struct roar_error_frame * frame) { 90 char * databuf = NULL; 62 91 int16_t * d; 63 64 if ( mes == NULL || frame == NULL ) 92 size_t datalen; 93 94 if ( mes == NULL || frame == NULL ) { 95 roar_err_set(ROAR_ERROR_FAULT); 65 96 return NULL; 97 } 98 99 if ( data != NULL ) 100 *data = NULL; 101 102 datalen = 8 + frame->datalen; 103 if ( datalen > LIBROAR_BUFFER_MSGDATA ) { 104 if ( data == NULL ) { 105 roar_err_set(ROAR_ERROR_FAULT); 106 return NULL; 107 } 108 109 roar_err_clear_errno(); 110 *data = malloc(datalen); 111 roar_err_from_errno(); 112 if ( *data == NULL ) 113 return NULL; 114 115 databuf = *data; 116 } else { 117 databuf = mes->data; 118 } 66 119 67 120 memset(mes, 0, sizeof(struct roar_message)); 68 69 d = (int16_t*)mes->data; 70 71 mes->datalen = 8 + frame->datalen; 72 frame->data = &(mes->data[8]); 73 74 mes->data[0] = 0; // version. 75 mes->data[1] = frame->cmd; 76 mes->data[2] = frame->ra_errno; 77 mes->data[3] = frame->ra_suberrno; 121 memset(databuf, 0, mes->datalen); 122 123 mes->datalen = datalen; 124 125 d = (int16_t*)databuf; 126 127 frame->data = &(databuf[8]); 128 129 databuf[0] = 0; // version. 130 databuf[1] = frame->cmd; 131 databuf[2] = frame->ra_errno; 132 databuf[3] = frame->ra_suberrno; 78 133 d[2] = ROAR_HOST2NET16(frame->p_errno); 79 134 d[3] = ROAR_HOST2NET16(frame->flags); … … 83 138 84 139 int roar_err_parsemsg(struct roar_message * mes, struct roar_error_frame * frame) { 140 roar_debug_warn_obsolete("roar_err_parsemsg", "roar_err_parsemsg", NULL); 141 return roar_err_parsemsg2(mes, NULL, frame); 142 } 143 int roar_err_parsemsg2(struct roar_message * mes, void * data, struct roar_error_frame * frame) { 144 char * databuf = (char *)data; 85 145 int16_t * d; 86 146 87 if ( mes == NULL || frame == NULL ) 147 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 148 mes, (int)mes->datalen, mes->data, data, frame); 149 150 if ( mes == NULL || frame == NULL ) { 151 roar_err_set(ROAR_ERROR_FAULT); 152 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = -1 // error=FAULT", 153 mes, (int)mes->datalen, mes->data, data, frame); 88 154 return -1; 89 90 d = (int16_t*)mes->data; 91 92 if ( mes->datalen < 8 ) 155 } 156 157 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 158 mes, (int)mes->datalen, mes->data, data, frame); 159 160 if ( databuf == NULL ) 161 databuf = mes->data; 162 163 d = (int16_t*)databuf; 164 165 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 166 mes, (int)mes->datalen, mes->data, data, frame); 167 168 if ( mes->datalen < 8 ) { 169 roar_err_set(ROAR_ERROR_MSGSIZE); 170 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = -1 // error=MSGSIZE", 171 mes, (int)mes->datalen, mes->data, data, frame); 93 172 return -1; 94 95 if ( mes->data[0] != 0 ) 173 } 174 175 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 176 mes, (int)mes->datalen, mes->data, data, frame); 177 178 if ( databuf[0] != 0 ) { 179 roar_err_set(ROAR_ERROR_NSVERSION); 180 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = -1 // error=NSVERSION", 181 mes, (int)mes->datalen, mes->data, data, frame); 96 182 return -1; 97 98 frame->cmd = mes->data[1]; 99 frame->ra_errno = mes->data[2]; 100 frame->ra_suberrno = mes->data[3]; 183 } 184 185 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 186 mes, (int)mes->datalen, mes->data, data, frame); 187 188 frame->cmd = databuf[1]; 189 frame->ra_errno = databuf[2]; 190 frame->ra_suberrno = databuf[3]; 101 191 frame->p_errno = ROAR_NET2HOST16(d[2]); 102 192 frame->flags = ROAR_NET2HOST16(d[3]); 103 193 104 194 frame->datalen = mes->datalen - 8; 105 frame->data = &(mes->data[8]); 106 195 frame->data = &(databuf[8]); 196 197 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = 0", 198 mes, (int)mes->datalen, mes->data, data, frame); 107 199 return 0; 108 200 } … … 128 220 int * err = roar_errno2(); 129 221 130 // NOTE: _NEVER_ call ROAR_{DBG,INFO,WARN,ERRO }() in here! (will result in endless loop)222 // NOTE: _NEVER_ call ROAR_{DBG,INFO,WARN,ERROR}() in here! (will result in endless loop) 131 223 //printf("*err=%i, errno=%i\n", *err, (int)errno); 132 224 -
libroar/proto.c
r5030 r5146 134 134 135 135 int roar_recv_message (struct roar_connection * con, struct roar_message * mes, char ** data) { 136 return roar_recv_message2(con, mes, data, NULL); 137 } 138 int roar_recv_message2 (struct roar_connection * con, struct roar_message * mes, char ** data, 139 struct roar_error_frame * errorframe) { 136 140 struct roar_vio_calls * vio; 137 141 … … 139 143 return -1; 140 144 141 return roar_vrecv_message (vio, mes, data);145 return roar_vrecv_message2(vio, mes, data, errorframe); 142 146 } 143 147 144 148 int roar_vrecv_message(struct roar_vio_calls * vio, struct roar_message * mes, char ** data) { 149 return roar_vrecv_message2(vio, mes, data, NULL); 150 } 151 152 int roar_vrecv_message2(struct roar_vio_calls * vio, struct roar_message * mes, char ** data, 153 struct roar_error_frame * errorframe) { 145 154 // TODO: add CRC support. 146 155 char buf[_ROAR_MESS_BUF_LEN_MAX]; … … 153 162 roar_err_set(ROAR_ERROR_UNKNOWN); 154 163 155 ROAR_DBG("roar_recv_message(*): try to get a response form the server..."); 156 157 if ( mes == NULL ) 158 return -1; 164 ROAR_DBG("roar_vrecv_message2(vio=%p, mes=%p, data=%p, errorframe=%p) = ?", vio, mes, data, errorframe); 165 166 ROAR_DBG("roar_vrecv_message2(*): try to get a response form the server..."); 167 168 if ( vio == NULL || mes == NULL ) { 169 roar_err_set(ROAR_ERROR_FAULT); 170 return -1; 171 } 159 172 160 173 if ( data != NULL ) … … 168 181 } 169 182 170 ROAR_DBG("roar_ recv_message(*): Got a header");183 ROAR_DBG("roar_vrecv_message2(*): Got a header"); 171 184 172 185 mes->version = buf[0]; … … 224 237 mes->stream = -1; 225 238 226 ROAR_DBG("roar_ recv_message(*): command=%i(%s)", mes->cmd,239 ROAR_DBG("roar_vrecv_message2(*): command=%i(%s)", mes->cmd, 227 240 mes->cmd == ROAR_CMD_OK ? "OK" : (mes->cmd == ROAR_CMD_ERROR ? "ERROR" : "UNKNOWN")); 228 241 … … 230 243 231 244 if ( mes->datalen == 0 ) { 232 ROAR_DBG("roar_recv_message(*): no data in this pkg"); 233 ROAR_DBG("roar_recv_message(*) = 0"); 245 ROAR_DBG("roar_vrecv_message2(*): no data in this pkg"); 246 if ( mes->cmd == ROAR_CMD_ERROR && errorframe != NULL ) { 247 roar_err_init(errorframe); 248 } 234 249 roar_err_clear(); 250 ROAR_DBG("roar_vrecv_message2(*) = 0"); 235 251 return 0; 236 252 } … … 238 254 if ( mes->datalen <= LIBROAR_BUFFER_MSGDATA ) { 239 255 if ( roar_vio_read(vio, mes->data, mes->datalen) == mes->datalen ) { 240 ROAR_DBG("roar_recv_message(*): Got data!"); 241 ROAR_DBG("roar_recv_message(*) = 0"); 256 ROAR_DBG("roar_vrecv_message2(*): Got data!"); 242 257 roar_err_clear(); 258 if ( mes->cmd == ROAR_CMD_ERROR && errorframe != NULL ) { 259 if ( roar_err_parsemsg2(mes, *data, errorframe) != 0 ) { 260 roar_err_init(errorframe); 261 } 262 } 263 ROAR_DBG("roar_vrecv_message2(*) = 0"); 243 264 return 0; 244 265 } … … 258 279 if ( mes->datalen == 0 ) { 259 280 roar_err_clear(); 281 if ( mes->cmd == ROAR_CMD_ERROR && errorframe != NULL ) { 282 roar_err_init(errorframe); 283 } 260 284 return 0; 261 285 } 262 286 263 287 if ( roar_vio_read(vio, *data, mes->datalen) == mes->datalen ) { 264 ROAR_DBG("roar_ recv_message(*): Got data!");265 ROAR_DBG("roar_recv_message(*) = 0"); 288 ROAR_DBG("roar_vrecv_message2(*): Got data!"); 289 266 290 roar_err_clear(); 291 if ( mes->cmd == ROAR_CMD_ERROR && errorframe != NULL ) { 292 if ( roar_err_parsemsg2(mes, *data, errorframe) != 0 ) { 293 roar_err_init(errorframe); 294 } 295 } 296 ROAR_DBG("roar_vrecv_message2(*) = 0"); 267 297 return 0; 268 298 } … … 277 307 278 308 int roar_req (struct roar_connection * con, struct roar_message * mes, char ** data) { 309 return roar_req2(con, mes, data, NULL); 310 } 311 312 int roar_req2 (struct roar_connection * con, struct roar_message * mes, char ** data, 313 struct roar_error_frame * errorframe) { 279 314 struct roar_vio_calls * vio; 280 315 … … 282 317 return -1; 283 318 284 return roar_vreq (vio, mes, data);319 return roar_vreq2(vio, mes, data, errorframe); 285 320 } 286 321 287 322 int roar_vreq (struct roar_vio_calls * vio, struct roar_message * mes, char ** data) { 323 return roar_vreq2(vio, mes, data, NULL); 324 } 325 326 int roar_vreq2 (struct roar_vio_calls * vio, struct roar_message * mes, char ** data, 327 struct roar_error_frame * errorframe) { 288 328 if ( roar_vsend_message(vio, mes, data != NULL ? *data : NULL) != 0 ) 289 329 return -1; … … 294 334 roar_vio_sync(vio); // we need to do this becasue of ssl/compressed links 295 335 296 return roar_vrecv_message (vio, mes, data);336 return roar_vrecv_message2(vio, mes, data, errorframe); 297 337 } 298 338
Note: See TracChangeset
for help on using the changeset viewer.