Changeset 60:d1fa94aadc08 in roaraudio for roard/roard.c


Ignore:
Timestamp:
07/12/08 12:19:08 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added basic UNIX Domain Socket code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/roard.c

    r44 r60  
    22 
    33#include "roard.h" 
     4 
     5char * server = ROAR_DEFAULT_SOCK_GLOBAL; // global server address 
    46 
    57void usage (void) { 
     
    3234        " -b  --bind            - IP/Hostname to bind to\n" 
    3335        " -s  --sock            - Filename for UNIX Domain Socket\n" 
     36        " -G  GROUP             - Sets the group for the UNIX Domain Socket, (default: audio)\n" 
     37        "                         You need the permittions to change the GID\n" 
    3438       ); 
    3539// printf("\n Options:\n\n"); 
     
    4044 int i; 
    4145 char * k; 
     46 char user_sock[80] = {0}; 
    4247 struct roar_audio_info sa; 
    4348 char * driver = NULL; 
    4449 char * device = NULL; 
    4550 char * opts   = NULL; 
    46  char * server = ROAR_DEFAULT_HOST; 
     51// char * server = ROAR_DEFAULT_SOCK_GLOBAL; 
    4752 int      port = ROAR_DEFAULT_PORT; 
    4853 int               drvid; 
     
    5156 char * s_opt  = NULL; 
    5257 int    s_prim = 0; 
     58 char * sock_grp = "audio"; 
     59 struct group * grp; 
    5360 DRIVER_USERDATA_T drvinst; 
    5461 struct roar_client * self = NULL; 
     
    6370 
    6471 g_sa = &sa; 
     72 
     73 
     74 if ( getuid() != 0 && getenv("HOME") ) { 
     75  snprintf(user_sock, 79, "%s/%s", getenv("HOME"), ROAR_DEFAULT_SOCK_USER); 
     76  server = user_sock; 
     77 } 
    6578 
    6679 if ( sources_init() == -1 ) { 
     
    113126  } else if ( strcmp(k, "-b") == 0 || strcmp(k, "--bind") == 0 ) { 
    114127   server = argv[++i]; 
     128  } else if ( strcmp(k, "-G") == 0 ) { 
     129   sock_grp = argv[++i]; 
    115130 
    116131  } else { 
     
    128143 } 
    129144 
     145 if ( *server == '/' ) { 
     146  if ( (grp = getgrnam(sock_grp)) == NULL ) { 
     147   ROAR_ERR("Can not get GID for group %s: %s", sock_grp, strerror(errno)); 
     148  } else { 
     149   chown(server, -1, grp->gr_gid); 
     150   if ( getuid() == 0 ) 
     151    chmod(server, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); 
     152  } 
     153 } 
     154 
    130155 if ( output_buffer_init(&sa) == -1 ) { 
    131156  ROAR_ERR("Can not init output buffer!"); 
     
    185210void clean_quit_prep (void) { 
    186211 close(g_listen_socket); 
     212 
     213 if ( *server == '/' ) 
     214  unlink(server); 
     215 
     216 
    187217 sources_free(); 
    188218 streams_free(); 
Note: See TracChangeset for help on using the changeset viewer.