Changeset 6026:d51b782b77c5 in roaraudio for libroar/stream.c
- Timestamp:
- 07/14/14 10:06:28 (10 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/stream.c
r5961 r6026 299 299 300 300 return 0; 301 } 302 303 int roar_stream_connect_to_advanced (struct roar_connection * con, struct roar_stream * s, 304 int version, int ask_only, uint_least32_t flags, 305 int socket_type, ssize_t socket_len, const void * socketaddr, 306 int transport_protocol, ssize_t tranport_len, const void * transportsetup, 307 uint16_t clientsetup_flags, struct roar_client * clientsetup) { 308 struct roar_message m; 309 char buf[80]; 310 int port; 311 uint16_t tmp; 312 313 if ( con == NULL ) { 314 roar_err_set(ROAR_ERROR_FAULT); 315 return -1; 316 } 317 318 if ( transport_protocol == ROAR_PROTO_NONE && (tranport_len != -1 || transportsetup ) ) { 319 roar_err_set(ROAR_ERROR_INVAL); 320 return -1; 321 } 322 323 if ( !((s == NULL) ^ (clientsetup == NULL)) ) { 324 roar_err_set(ROAR_ERROR_INVAL); 325 return -1; 326 } 327 328 switch (version) { 329 case 0: 330 if ( transport_protocol != ROAR_PROTO_NONE || s == NULL) { 331 roar_err_set(ROAR_ERROR_INVAL); 332 return -1; 333 } 334 switch (socket_type) { 335 case ROAR_SOCKET_TYPE_TCP: 336 case ROAR_SOCKET_TYPE_UDP: 337 if ( socket_len != 6 ) { 338 roar_err_set(ROAR_ERROR_FAULT); 339 return -1; 340 } 341 snprintf(buf, sizeof(buf), "%i.%i.%i.%i", 342 ((const unsigned char*)socketaddr)[0], ((const unsigned char*)socketaddr)[1], 343 ((const unsigned char*)socketaddr)[2], ((const unsigned char*)socketaddr)[3]); 344 port = ROAR_NET2HOST16(((const uint16_t*)socketaddr)[3]); 345 if ( roar_stream_connect_to_ask(con, s, socket_type, buf, port) == -1 ) 346 return -1; 347 break; 348 case ROAR_SOCKET_TYPE_DECNET: 349 if ( socket_len < 3 ) { 350 roar_err_set(ROAR_ERROR_FAULT); 351 return -1; 352 } 353 tmp = ((const uint16_t*)socketaddr)[0]; 354 port = ((const unsigned char*)socketaddr)[2]; 355 snprintf(buf, sizeof(buf), "%i.%i::%*s", tmp >> 10, tmp & 0x03FF, (int)socket_len - 3, (const char*)socketaddr + 3); 356 if ( roar_stream_connect_to_ask(con, s, socket_type, buf, port) == -1 ) 357 return -1; 358 break; 359 default: 360 if ( ((const char *)socketaddr)[socket_len-1] == 0 ) { 361 if ( socket_len > sizeof(buf) ) { 362 roar_err_set(ROAR_ERROR_MSGSIZE); 363 return -1; 364 } 365 memcpy(buf, socketaddr, socket_len); 366 if ( roar_stream_connect_to_ask(con, s, socket_type, buf, 0) == -1 ) 367 return -1; 368 } else { 369 roar_err_set(ROAR_ERROR_FAULT); 370 return -1; 371 } 372 break; 373 } 374 break; 375 default: 376 roar_err_set(ROAR_ERROR_NSVERSION); 377 return -1; 378 break; 379 } 380 381 382 if ( ask_only ) 383 return 0; 384 385 if ( roar_recv_message(con, &m, NULL) == -1 ) 386 return -1; 387 388 if ( m.cmd == ROAR_CMD_OK ) 389 return 0; 390 return -1; 301 391 } 302 392
Note: See TracChangeset
for help on using the changeset viewer.