Changeset 1842:8c8a003773ca in roaraudio


Ignore:
Timestamp:
05/23/09 04:17:05 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

support for names on server streams, added roar_stream_get_name()

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/stream.h

    r1813 r1842  
    109109 
    110110int roar_stream_get_info (struct roar_connection * con, struct roar_stream * s, struct roar_stream_info * info); 
     111int roar_stream_get_name (struct roar_connection * con, struct roar_stream * s, char * name, size_t len); 
    111112 
    112113int roar_stream_set_flags (struct roar_connection * con, struct roar_stream * s, int flags, int reset); 
  • include/roaraudio/proto.h

    r1162 r1842  
    112112#define ROAR_ATTACH_OUTPUT 3 /* attach a new output stream to the server */ 
    113113 
     114// modes for ROAR_CMD_?ET_STREAM_PARA... 
     115#define ROAR_STREAM_PARA_INFO       1 
     116#define ROAR_STREAM_PARA_FLAGS      2 
     117#define ROAR_STREAM_PARA_NAME       3 
    114118 
    115119struct roar_timeofday { 
  • libroar/stream.c

    r1820 r1842  
    338338 
    339339 data[0] = 0; // Version and reserved 
    340  data[1] = 1; // stream 
     340 data[1] = ROAR_STREAM_PARA_INFO; // stream 
    341341 
    342342 for (i = 0; i < m.datalen/2; i++) { 
     
    368368 info->flags          = data[6]; 
    369369 info->delay          = data[7]*1000; 
     370 
     371 return 0; 
     372} 
     373 
     374int roar_stream_get_name (struct roar_connection * con, struct roar_stream * s, char * name, size_t len) { 
     375 struct roar_message m; 
     376 uint16_t * data = (uint16_t *) m.data; 
     377 
     378 if ( con == NULL || s == NULL || name == NULL || len == 0 ) 
     379  return -1; 
     380 
     381 name[0] = 0; // just in case... 
     382 
     383 m.cmd     = ROAR_CMD_GET_STREAM_PARA; 
     384 m.stream  = s->id; 
     385 m.datalen = 4; 
     386 m.pos     = 0; 
     387 
     388 data[0] = 0; // Version and reserved 
     389 data[1] = ROAR_STREAM_PARA_NAME; // stream 
     390 
     391 data[0] = ROAR_HOST2NET16(data[0]); 
     392 data[1] = ROAR_HOST2NET16(data[1]); 
     393 
     394 ROAR_DBG("roar_stream_get_name(*) = ?"); 
     395 
     396 if ( roar_req(con, &m, NULL) == -1 ) 
     397  return -1; 
     398 
     399 ROAR_DBG("roar_stream_get_name(*) = ?"); 
     400 
     401 if ( m.cmd != ROAR_CMD_OK ) 
     402  return -1; 
     403 
     404 ROAR_DBG("roar_stream_get_name(*) = ?"); 
     405 
     406 if ( m.datalen < 4 ) 
     407  return -1; 
     408 
     409 data[0] = ROAR_NET2HOST16(data[0]); 
     410 data[1] = ROAR_NET2HOST16(data[1]); 
     411 
     412 ROAR_DBG("roar_stream_get_name(*) = ?"); 
     413 
     414 if ( data[0] != 0 || data[1] != ROAR_STREAM_PARA_NAME ) 
     415  return -1; 
     416 
     417 m.datalen -= 4; 
     418 
     419 len--; 
     420 
     421 if ( len > m.datalen ) 
     422  len = m.datalen; 
     423 
     424 strncpy(name, ((char*)m.data)+4, len); 
     425 name[len] = 0; 
     426 
     427 ROAR_DBG("roar_stream_get_name(*) = 0"); 
    370428 
    371429 return 0; 
  • roarclients/roarctl.c

    r1839 r1842  
    236236 struct roar_stream_info info; 
    237237 char flags[1024]; 
     238 char name[1024]; 
    238239 
    239240 
     
    250251  } 
    251252  printf("Stream direction      : %s\n", roar_dir2str(s.dir)); 
     253 
     254  if ( roar_stream_get_name(con, &s, name, 1024) == 0 ) 
     255   printf("Stream name           : %s\n", name); 
     256 
    252257  if ( s.pos_rel_id == -1 ) { 
    253258   printf("Relativ position id   : none (stream not synchronized)\n"); 
  • roard/include/streams.h

    r1609 r1842  
    7272 int flags; 
    7373 uint_least32_t delay; 
     74 char * name; 
    7475} * g_streams[ROAR_STREAMS_MAX]; 
    7576 
     
    99100int streams_get_flag     (int id, int flag); 
    100101 
     102int streams_set_name     (int id, char * name); 
     103char * streams_get_name  (int id); 
     104 
    101105int streams_calc_delay   (int id); 
    102106int streams_set_mixer    (int id); 
  • roard/req.c

    r1840 r1842  
    508508 uint16_t * d = (uint16_t *) mes->data; 
    509509 int i; 
     510 char * str; 
    510511 
    511512 if ( mes->datalen != 4 ) 
     
    516517 } 
    517518 
    518  if ( streams_get(mes->stream, &ss) == -1 ) { 
    519   ROAR_WARN("req_on_get_stream_para(*): request on non existing (or other error?) stream %i", mes->stream); 
    520   return -1; 
    521  } 
    522  
    523  if ( streams_calc_delay(mes->stream) == -1 ) { 
    524   ROAR_WARN("req_on_get_stream_para(*): can not calc delay for stream %i", mes->stream); 
    525  } 
    526  
    527  s = ROAR_STREAM(ss); 
    528  
    529  audio_info = &(s->info); 
    530  
    531  if ( d[0] != 0 || d[1] != 1 ) { 
     519 if ( d[0] != 0 ) { 
    532520  ROAR_WARN("req_on_get_stream_para(*): unsupported command version: %i, %i", d[0], d[1]); 
    533521  return -1; 
    534522 } 
    535523 
    536  mes->datalen = 2*8; 
    537  
    538  d[2] = ROAR_OUTPUT_CALC_OUTBUFSIZE(audio_info); 
    539  d[3] = ss->pre_underruns; 
    540  d[4] = ss->post_underruns; 
    541  d[5] = ss->codec_orgi; 
    542  d[6] = ss->flags | (ss->primary ? ROAR_FLAG_PRIMARY : 0) | (ss->driver_id != -1 ? ROAR_FLAG_OUTPUT : 0); 
    543  d[7] = ss->delay/1000; 
    544  
    545  ROAR_DBG("req_on_get_stream_para(*): ss->driver_id=%i", ss->driver_id); 
    546  
    547  ROAR_DBG("req_on_get_stream_para(*): delay=%i, send delay=%i", ss->delay, d[7]); 
    548  
    549  for (i = 0; i < mes->datalen/2; i++) { 
    550   d[i] = ROAR_HOST2NET16(d[i]); 
    551  } 
    552  
    553  mes->pos = s->pos; 
     524 switch (d[1]) { 
     525  case ROAR_STREAM_PARA_INFO: 
     526    if ( streams_get(mes->stream, &ss) == -1 ) { 
     527     ROAR_WARN("req_on_get_stream_para(*): request on non existing (or other error?) stream %i", mes->stream); 
     528     return -1; 
     529    } 
     530 
     531    if ( streams_calc_delay(mes->stream) == -1 ) { 
     532     ROAR_WARN("req_on_get_stream_para(*): can not calc delay for stream %i", mes->stream); 
     533    } 
     534 
     535    s = ROAR_STREAM(ss); 
     536 
     537    audio_info = &(s->info); 
     538 
     539    mes->datalen = 2*8; 
     540 
     541    d[2] = ROAR_OUTPUT_CALC_OUTBUFSIZE(audio_info); 
     542    d[3] = ss->pre_underruns; 
     543    d[4] = ss->post_underruns; 
     544    d[5] = ss->codec_orgi; 
     545    d[6] = ss->flags | (ss->primary ? ROAR_FLAG_PRIMARY : 0) | (ss->driver_id != -1 ? ROAR_FLAG_OUTPUT : 0); 
     546    d[7] = ss->delay/1000; 
     547 
     548    ROAR_DBG("req_on_get_stream_para(*): ss->driver_id=%i", ss->driver_id); 
     549 
     550    ROAR_DBG("req_on_get_stream_para(*): delay=%i, send delay=%i", ss->delay, d[7]); 
     551 
     552    for (i = 0; i < mes->datalen/2; i++) { 
     553     d[i] = ROAR_HOST2NET16(d[i]); 
     554    } 
     555 
     556    mes->pos = s->pos; 
     557   break; 
     558 
     559  case ROAR_STREAM_PARA_NAME: 
     560   str = streams_get_name(mes->stream); 
     561 
     562   if ( str == NULL ) 
     563    return -1; 
     564 
     565    mes->datalen = 4 + strlen(str); 
     566 
     567    if ( mes->datalen > LIBROAR_BUFFER_MSGDATA ) 
     568     return -1; 
     569 
     570    strncpy(((char*)&(mes->data))+4, str, mes->datalen); 
     571 
     572    d[0] = ROAR_HOST2NET16(d[0]); 
     573    d[1] = ROAR_HOST2NET16(d[1]); 
     574   break; 
     575 
     576  default: 
     577    ROAR_WARN("req_on_get_stream_para(*): unsupported command: %i", d[1]); 
     578    return -1; 
     579 } 
    554580 
    555581 mes->cmd = ROAR_CMD_OK; 
     
    568594 } 
    569595 
    570  if ( d[0] != 0 || d[1] != 2 ) { 
     596 if ( d[0] != 0 || d[1] != ROAR_STREAM_PARA_FLAGS ) { 
    571597  ROAR_WARN("req_on_set_stream_para(*): unsupported command version: %i, %i", d[0], d[1]); 
    572598  return -1; 
  • roard/streams.c

    r1837 r1842  
    8080   n->pos        = 0; 
    8181 
     82   s->name            = NULL; 
     83 
    8284   s->client          = -1; 
    8385   s->socktype        = ROAR_SOCKET_TYPE_UNKNOWN; 
     
    190192 prim = s->primary; 
    191193 
     194 if ( s->name != NULL ) 
     195  free(s->name); 
     196 
    192197 free(s); 
    193198 
     
    419424 return g_streams[id]->flags & flag ? 1 : 0; 
    420425} 
     426 
     427int streams_set_name     (int id, char * name) { 
     428 char * str; 
     429 
     430 if ( g_streams[id] == NULL ) 
     431  return -1; 
     432 
     433 if ( (str = strdup(name)) == NULL ) 
     434  return -1; 
     435 
     436 if ( g_streams[id]->name != NULL ) 
     437  free(g_streams[id]->name); 
     438 
     439 g_streams[id]->name = str; 
     440} 
     441 
     442char * streams_get_name  (int id) { 
     443 if ( g_streams[id] == NULL ) 
     444  return NULL; 
     445 
     446 return g_streams[id]->name; 
     447} 
     448 
    421449 
    422450int streams_calc_delay    (int id) { 
Note: See TracChangeset for help on using the changeset viewer.