source: roaraudio/roard/codecfilter_cmd.c @ 206:c57fd131ee04

Last change on this file since 206:c57fd131ee04 was 200:fc109893f25a, checked in by phi, 16 years ago

there a a lot cases we can close the socket, only not when it is an execed one

File size: 1021 bytes
Line 
1//codecfilter_cmd.c:
2
3#include "roard.h"
4
5int cf_cmd_open(CODECFILTER_USERDATA_T * inst, int codec,
6                                             struct roar_stream_server * info,
7                                             struct roar_codecfilter   * filter) {
8 int socks[2];
9 int execed = -1;
10
11 if ( socketpair(AF_UNIX, SOCK_STREAM, 0, socks) == -1 ) {
12  return -1;
13 }
14
15 if ( lib_run_bg(filter->options, ((struct roar_stream*)info)->fh, socks[1], ROAR_STDERR, socks, 2) == -1 )
16  return -1;
17
18 if ( info->client != -1 ) {
19  execed = g_clients[info->client]->execed;
20
21  if ( execed != -1 ) {
22   if ( g_streams[execed] == info ) {
23    g_clients[info->client]->fh = socks[0];
24   } else {
25    close(((struct roar_stream*)info)->fh);
26   }
27  } else {
28   close(((struct roar_stream*)info)->fh);
29  }
30 } else {
31  close(((struct roar_stream*)info)->fh);
32 }
33
34 ((struct roar_stream*)info)->fh = socks[0];
35 ((struct roar_stream*)info)->info.codec = ROAR_CODEC_DEFAULT;
36 close(socks[1]);
37
38 info->codecfilter = -1;
39
40 return 0;
41}
42
43//ll
Note: See TracBrowser for help on using the repository browser.