Changeset 4925:ea0657842b8f in roaraudio


Ignore:
Timestamp:
05/08/11 11:16:34 (11 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

updated API from sysio to VIO usage

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roarclients/roarmonhttp.c

    r4885 r4925  
    6666} 
    6767 
    68 int stream (int dest, int src) { 
     68int stream (struct roar_vio_calls * dest, struct roar_vio_calls * src) { 
     69 struct roar_vio_select vios[2]; 
    6970 struct roar_buffer *ring = NULL, *cur; 
    7071 ssize_t len; 
    7172 size_t  todo; 
    72  fd_set fsi[1], fso[1]; 
    73  struct timeval tv; 
    7473 int alive = 1; 
    75  int maxfh = (dest > src ? dest : src) + 1; 
    7674 void * data; 
    77  
    78  roar_socket_nonblock(src,  ROAR_SOCKET_NONBLOCK); 
    79  roar_socket_nonblock(dest, ROAR_SOCKET_NONBLOCK); 
     75 int ret; 
     76 
     77 roar_vio_nonblock(src,  ROAR_SOCKET_NONBLOCK); 
     78 roar_vio_nonblock(dest, ROAR_SOCKET_NONBLOCK); 
     79 
     80 ROAR_VIO_SELECT_SETVIO(&(vios[0]), src,  ROAR_VIO_SELECT_READ); 
     81 ROAR_VIO_SELECT_SETVIO(&(vios[1]), dest, ROAR_VIO_SELECT_WRITE); 
    8082 
    8183 while (alive) { 
    82   FD_ZERO(fsi); 
    83   FD_ZERO(fso); 
    84   FD_SET(src, fsi); 
    85   if ( ring != NULL ) { 
    86    FD_SET(dest, fso); 
    87   } 
    88  
    89   tv.tv_sec  = 0; 
    90   tv.tv_usec = 100000; // 100ms 
    91  
    92   if (select(maxfh, fsi, fso, NULL, &tv) > 0) { 
    93    if ( FD_ISSET(src, fsi) ) { // we can read! 
     84  ret = roar_vio_select(vios, ring != NULL ? 2 : 1, NULL, NULL); 
     85  if ( ret == -1 ) { 
     86   alive = 0; 
     87  } else if ( ret == 0 ) { 
     88   // nothing happend. 
     89  } else { 
     90   if ( vios[0].eventsa & ROAR_VIO_SELECT_READ ) { // we can read! 
    9491    if ( roar_buffer_new(&cur, BUFSIZE) == -1 ) 
    9592     return -1; 
     
    9895     return -1; 
    9996 
    100     len = read(src, data, BUFSIZE); 
     97    len = roar_vio_read(src, data, BUFSIZE); 
    10198 
    10299    switch (len) { 
     
    104101     case -1: 
    105102       roar_buffer_free(cur); 
     103       cur = NULL; 
    106104 
    107105       if ( ring != NULL ) 
    108106        roar_buffer_free(ring); 
     107 
     108       ring = NULL; 
    109109 
    110110       return -1; 
     
    112112    } 
    113113 
    114     if ( roar_buffer_set_len(cur, len) == -1 ) 
    115      return -1; 
    116  
    117     if ( ring == NULL ) { 
    118      ring = cur; 
    119     } else { 
    120      roar_buffer_add(ring, cur); 
     114    if ( cur != NULL ) { 
     115     if ( roar_buffer_set_len(cur, len) == -1 ) 
     116      return -1; 
     117 
     118     if ( ring == NULL ) { 
     119      ring = cur; 
     120     } else { 
     121      roar_buffer_add(ring, cur); 
     122     } 
    121123    } 
    122    } else if ( FD_ISSET(dest, fso) && ring != NULL ) { // we can write! 
     124   } else if ( (vios[1].eventsa & ROAR_VIO_SELECT_WRITE) && ring != NULL ) { // we can write! 
    123125    if ( roar_buffer_get_data(ring, &data) == -1 ) 
    124126     return -1; 
     
    127129     return -1; 
    128130 
    129     len = write(dest, data, todo); 
     131    len = roar_vio_write(dest, data, todo); 
    130132 
    131133    if ( len < 1 ) { 
    132      if ( errno != EAGAIN ) { 
     134     if ( roar_error != ROAR_ERROR_AGAIN ) { 
    133135      roar_buffer_free(ring); 
    134136      return -1; 
     
    222224// int    codec    = ROAR_CODEC_DEFAULT; 
    223225 char * server   = NULL; 
    224  int    fh; 
    225226 int    i; 
    226227 char * c, * k, * v; 
     
    232233 struct roar_connection    con; 
    233234 struct roar_stream        s; 
     235 struct roar_vio_calls   * vio; 
    234236 
    235237#ifdef ROAR_HAVE_ALARM 
     
    358360 } 
    359361 
    360  if ( (fh = roar_get_connection_fh(&con)) == -1 ) 
     362 if ( (vio = roar_get_connection_vio2(&con)) == NULL ) 
    361363  return 1; 
    362364 
     
    372374 switch (dir) { 
    373375  case ROAR_DIR_PLAY: 
    374     stream(fh, ROAR_STDIN); 
     376    stream(vio, roar_stdin); 
    375377   break; 
    376378  case ROAR_DIR_MONITOR: 
    377379  case ROAR_DIR_THRU: 
    378     stream(ROAR_STDOUT, fh); 
     380    stream(roar_stdout, vio); 
    379381   break; 
    380382 } 
    381383 
    382  roar_simple_close(fh); 
     384 roar_vio_close(vio); 
    383385 
    384386 return 0; 
Note: See TracChangeset for help on using the changeset viewer.