Changeset 3539:1fd530767d7b in roaraudio for libroar/stream.c


Ignore:
Timestamp:
02/20/10 00:48:43 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

support to read channel map from server

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/stream.c

    r3517 r3539  
    482482} 
    483483 
     484int roar_stream_get_chanmap (struct roar_connection * con, struct roar_stream * s, char * map, size_t * len) { 
     485 struct roar_message m; 
     486 uint16_t * data = (uint16_t *) m.data; 
     487 
     488 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p, map=%p, len=%p) = ?", con, s, map, len); 
     489 
     490 if ( con == NULL || s == NULL || map == NULL || len == NULL ) 
     491  return -1; 
     492 
     493 if ( *len == 0 ) 
     494  return -1; 
     495 
     496 memset(&m, 0, sizeof(m)); 
     497 
     498 m.cmd     = ROAR_CMD_GET_STREAM_PARA; 
     499 m.stream  = s->id; 
     500 m.datalen = 2*2; 
     501 
     502 data[0] = 0; // Version and reserved 
     503 data[1] = ROAR_STREAM_PARA_CHANMAP; 
     504 
     505 data[0] = ROAR_HOST2NET16(data[0]); 
     506 data[1] = ROAR_HOST2NET16(data[1]); 
     507 
     508 if ( roar_req(con, &m, NULL) == -1 ) 
     509  return -1; 
     510 
     511 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     512 
     513 if ( m.cmd != ROAR_CMD_OK ) 
     514  return -1; 
     515 
     516 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     517 
     518 if ( m.datalen < 4 ) 
     519  return -1; 
     520 
     521 data[0] = ROAR_NET2HOST16(data[0]); 
     522 data[1] = ROAR_NET2HOST16(data[1]); 
     523 
     524 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     525 
     526 if ( data[0] != 0 || data[1] != ROAR_STREAM_PARA_CHANMAP ) 
     527  return -1; 
     528 
     529 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     530 
     531 m.datalen -= 4; 
     532 
     533 if ( m.datalen > *len ) 
     534  return -1; 
     535 
     536 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = ?", con, s, s->id, map, len); 
     537 
     538 memcpy(map, &(m.data[4]), m.datalen); 
     539 
     540 *len = m.datalen; 
     541 
     542 ROAR_DBG("roar_stream_get_chanmap(con=%p, s=%p{.id=%i}, map=%p, len=%p) = 0", con, s, s->id, map, len); 
     543 return 0; 
     544} 
     545 
     546int roar_stream_set_chanmap (struct roar_connection * con, struct roar_stream * s, char * map, size_t   len); 
     547 
     548 
    484549int roar_stream_set_flags (struct roar_connection * con, struct roar_stream * s, int flags, int reset) { 
    485550 struct roar_message m; 
Note: See TracChangeset for help on using the changeset viewer.