Changeset 4925:ea0657842b8f in roaraudio
- Timestamp:
- 05/08/11 11:16:34 (12 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roarclients/roarmonhttp.c
r4885 r4925 66 66 } 67 67 68 int stream (int dest, int src) { 68 int stream (struct roar_vio_calls * dest, struct roar_vio_calls * src) { 69 struct roar_vio_select vios[2]; 69 70 struct roar_buffer *ring = NULL, *cur; 70 71 ssize_t len; 71 72 size_t todo; 72 fd_set fsi[1], fso[1];73 struct timeval tv;74 73 int alive = 1; 75 int maxfh = (dest > src ? dest : src) + 1;76 74 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); 80 82 81 83 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! 94 91 if ( roar_buffer_new(&cur, BUFSIZE) == -1 ) 95 92 return -1; … … 98 95 return -1; 99 96 100 len = r ead(src, data, BUFSIZE);97 len = roar_vio_read(src, data, BUFSIZE); 101 98 102 99 switch (len) { … … 104 101 case -1: 105 102 roar_buffer_free(cur); 103 cur = NULL; 106 104 107 105 if ( ring != NULL ) 108 106 roar_buffer_free(ring); 107 108 ring = NULL; 109 109 110 110 return -1; … … 112 112 } 113 113 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 } 121 123 } 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! 123 125 if ( roar_buffer_get_data(ring, &data) == -1 ) 124 126 return -1; … … 127 129 return -1; 128 130 129 len = write(dest, data, todo);131 len = roar_vio_write(dest, data, todo); 130 132 131 133 if ( len < 1 ) { 132 if ( errno != EAGAIN ) {134 if ( roar_error != ROAR_ERROR_AGAIN ) { 133 135 roar_buffer_free(ring); 134 136 return -1; … … 222 224 // int codec = ROAR_CODEC_DEFAULT; 223 225 char * server = NULL; 224 int fh;225 226 int i; 226 227 char * c, * k, * v; … … 232 233 struct roar_connection con; 233 234 struct roar_stream s; 235 struct roar_vio_calls * vio; 234 236 235 237 #ifdef ROAR_HAVE_ALARM … … 358 360 } 359 361 360 if ( ( fh = roar_get_connection_fh(&con)) == -1)362 if ( (vio = roar_get_connection_vio2(&con)) == NULL ) 361 363 return 1; 362 364 … … 372 374 switch (dir) { 373 375 case ROAR_DIR_PLAY: 374 stream( fh, ROAR_STDIN);376 stream(vio, roar_stdin); 375 377 break; 376 378 case ROAR_DIR_MONITOR: 377 379 case ROAR_DIR_THRU: 378 stream( ROAR_STDOUT, fh);380 stream(roar_stdout, vio); 379 381 break; 380 382 } 381 383 382 roar_ simple_close(fh);384 roar_vio_close(vio); 383 385 384 386 return 0;
Note: See TracChangeset
for help on using the changeset viewer.