Changeset 5373:8da157c10483 in roaraudio for libroar/enumdev.c


Ignore:
Timestamp:
12/21/11 19:02:52 (12 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:
  • Updated config structure
  • Added a flag to ask libroar to only connect to local servers
  • Added a way to override fork()
  • added support for +internal
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/enumdev.c

    r5324 r5373  
    105105 (void)flags, (void)dir, (void)socktype; 
    106106 
    107  if ( maxlen < 11 ) 
    108   return -1; 
    109  
    110  new = roar_libroar_get_server(); 
    111  _add(new); 
    112  
    113  new = getenv("ROAR_SERVER"); 
    114  _add(new); 
     107 if ( maxlen < 12 ) 
     108  return -1; 
     109 
     110 // We can not yet test if those servers are local or reachable via network so 
     111 // we skip them for now. 
     112 // TODO: test those servers. 
     113 if ( !(flags & ROAR_ENUM_FLAG_LOCALONLY) ) { 
     114  new = roar_libroar_get_server(); 
     115  _add(new); 
     116 
     117  new = getenv("ROAR_SERVER"); 
     118  _add(new); 
    115119 
    116120#ifdef ROAR_HAVE_LIBX11 
    117  if ( (x11con = roar_x11_connect(NULL)) != NULL ) { 
    118   new = roar_x11_get_prop(x11con, "ROAR_SERVER"); 
    119   _add(new); 
    120   roar_x11_disconnect(x11con); 
    121  } 
    122 #endif 
    123  
    124  new = getenv("SSH_CLIENT"); 
    125  if ( new == NULL ) 
    126   new = getenv("SSH_CONNECTION"); 
    127  
    128  if ( new != NULL ) { 
    129   ssh_buf = roar_mm_strdup(new); 
    130   if ( ssh_buf != NULL ) { 
    131    tmp = strstr(ssh_buf, " "); 
    132    if ( tmp == NULL ) { 
    133     // invalid format. 
    134     roar_mm_free(ssh_buf); 
    135    } else { 
    136     *tmp = 0; 
    137     servers[ret++] = ssh_buf; 
     121  if ( (x11con = roar_x11_connect(NULL)) != NULL ) { 
     122   new = roar_x11_get_prop(x11con, "ROAR_SERVER"); 
     123   _add(new); 
     124   roar_x11_disconnect(x11con); 
     125  } 
     126#endif 
     127 
     128  new = getenv("SSH_CLIENT"); 
     129  if ( new == NULL ) 
     130   new = getenv("SSH_CONNECTION"); 
     131 
     132  if ( new != NULL ) { 
     133   ssh_buf = roar_mm_strdup(new); 
     134   if ( ssh_buf != NULL ) { 
     135    tmp = strstr(ssh_buf, " "); 
     136    if ( tmp == NULL ) { 
     137     // invalid format. 
     138     roar_mm_free(ssh_buf); 
     139    } else { 
     140     *tmp = 0; 
     141     servers[ret++] = ssh_buf; 
     142    } 
    138143   } 
    139144  } 
    140  } 
    141145 
    142146#if !defined(ROAR_TARGET_WIN32) && !defined(ROAR_TARGET_MICROCONTROLLER) 
    143  if ( (i = readlink("/etc/roarserver", buf, sizeof(buf)-1)) != -1 ) { 
    144    buf[i] = 0; 
    145    _add(buf); 
    146  } 
    147 #endif 
     147  if ( (i = readlink("/etc/roarserver", buf, sizeof(buf)-1)) != -1 ) { 
     148    buf[i] = 0; 
     149    _add(buf); 
     150  } 
     151#endif 
     152 } 
    148153 
    149154 if ( (new = roar_env_get_home(0)) != NULL ) { 
     
    158163 servers[ret++] = roar_mm_strdup("+abstract"); 
    159164 servers[ret++] = roar_mm_strdup("/tmp/muroard"); 
     165 servers[ret++] = roar_mm_strdup("/dev/roar"); 
    160166 
    161167 return ret; 
     
    290296 
    291297static struct locmed _libroar_locmod[] = { 
    292  {ROAR_ENUM_FLAG_NONBLOCK|ROAR_ENUM_FLAG_HARDNONBLOCK, _esl_defaults}, 
    293  {ROAR_ENUM_FLAG_NONE,                                 _esl_slp}, 
     298 {ROAR_ENUM_FLAG_NONBLOCK|ROAR_ENUM_FLAG_HARDNONBLOCK|ROAR_ENUM_FLAG_LOCALONLY, _esl_defaults}, 
     299 {ROAR_ENUM_FLAG_NONE,                                                          _esl_slp}, 
    294300#ifdef ROAR_HAVE_FOPEN 
    295  {ROAR_ENUM_FLAG_NONBLOCK,                             _esl_neighbours} 
     301 {ROAR_ENUM_FLAG_NONBLOCK,                                                      _esl_neighbours} 
    296302#endif 
    297303}; 
    298304 
    299305struct roar_server * roar_enum_servers(int flags, int dir, int socktype) { 
     306 struct roar_libroar_config * config = roar_libroar_get_config(); 
    300307 struct roar_server * ret = NULL; 
    301308 struct roar_server * c; 
     
    304311 size_t i, cp, unic; 
    305312 ssize_t r; 
    306  int testflags = flags; 
     313 int testflags; 
    307314 int is_uniq; 
     315 
     316 flags     |= config->serverflags; 
     317 testflags  = flags; 
    308318 
    309319 if ( flags & ROAR_ENUM_FLAG_HARDNONBLOCK ) 
Note: See TracChangeset for help on using the changeset viewer.