Changeset 1335:548e9191245b in roaraudio


Ignore:
Timestamp:
03/23/09 13:57:58 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

got socket: and tcp: working, most others only need backend to be completed

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio_socket.h

    r1333 r1335  
    4444int     roar_vio_socket_init_socket_def   (struct roar_vio_defaults * def, int domain, int type); 
    4545 
     46int     roar_vio_socket_init_dstr_def     (struct roar_vio_defaults * def, char * dstr, int hint, int type, struct roar_vio_defaults * odef); 
     47 
     48int     roar_vio_socket_conv_def          (struct roar_vio_defaults * def, int domain); 
     49 
     50int     roar_vio_socket_get_port          (char * service, int domain, int type); 
     51 
    4652int     roar_vio_socket_init_unix_def     (struct roar_vio_defaults * def, char * path); 
    4753int     roar_vio_socket_init_decnet_def   (struct roar_vio_defaults * def, char * node, int object, char * objname); 
    4854 
    49 int     roar_vio_socket_init_inet4host_def(struct roar_vio_defaults * def, char * host); 
     55int     roar_vio_socket_init_inet4host_def(struct roar_vio_defaults * def); 
     56int     roar_vio_socket_init_inet4_def    (struct roar_vio_defaults * def, char * host, int port, int type); 
    5057int     roar_vio_socket_init_tcp4_def     (struct roar_vio_defaults * def, char * host, int port); 
    5158int     roar_vio_socket_init_udp4_def     (struct roar_vio_defaults * def, char * host, int port); 
    52 int     roar_vio_socket_init_inet6host_def(struct roar_vio_defaults * def, char * host); 
     59int     roar_vio_socket_init_inet6host_def(struct roar_vio_defaults * def); 
     60int     roar_vio_socket_init_inet6_def    (struct roar_vio_defaults * def, char * host, int port, int type); 
    5361int     roar_vio_socket_init_tcp6_def     (struct roar_vio_defaults * def, char * host, int port); 
    5462int     roar_vio_socket_init_udp6_def     (struct roar_vio_defaults * def, char * host, int port); 
  • libroar/vio_dstr.c

    r1333 r1335  
    430430     next->def->d.fh = tmp[1]; 
    431431    break; 
    432 /* 
    433 #define ROAR_VIO_DSTR_OBJT_SOCKET         (0x01|ROAR_VIO_DSTR_OBJGT_SOCKET) 
    434 #define ROAR_VIO_DSTR_OBJT_UNIX           (0x02|ROAR_VIO_DSTR_OBJGT_SOCKET) 
    435 #define ROAR_VIO_DSTR_OBJT_DECNET         (0x10|ROAR_VIO_DSTR_OBJGT_SOCKET) 
    436 #define ROAR_VIO_DSTR_OBJT_TCP            (0x21|ROAR_VIO_DSTR_OBJGT_SOCKET) 
    437 #define ROAR_VIO_DSTR_OBJT_UDP            (0x22|ROAR_VIO_DSTR_OBJGT_SOCKET) 
    438 #define ROAR_VIO_DSTR_OBJT_TCP6           (0x31|ROAR_VIO_DSTR_OBJGT_SOCKET) 
    439 #define ROAR_VIO_DSTR_OBJT_UDP6           (0x32|ROAR_VIO_DSTR_OBJGT_SOCKET) 
    440 */ 
    441432   case ROAR_VIO_DSTR_OBJT_UNIX: 
    442433     c->need_vio = 0; 
     
    452443      return -1; 
    453444    break; 
     445   case ROAR_VIO_DSTR_OBJT_SOCKET: 
     446     c->need_vio = 0; 
     447     next->def = &(next->store_def); 
     448 
     449     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, -1, SOCK_STREAM, c->def) == -1 ) 
     450      return -1; 
     451    break; 
     452#ifdef ROAR_HAVE_LIBDNET 
     453   case ROAR_VIO_DSTR_OBJT_DECNET: 
     454     c->need_vio = 0; 
     455     next->def = &(next->store_def); 
     456 
     457     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_DECnet, SOCK_STREAM, c->def) == -1 ) 
     458      return -1; 
     459    break; 
     460#endif 
     461   case ROAR_VIO_DSTR_OBJT_TCP: 
     462     c->need_vio = 0; 
     463     next->def = &(next->store_def); 
     464 
     465     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_INET, SOCK_STREAM, c->def) == -1 ) 
     466      return -1; 
     467    break; 
     468   case ROAR_VIO_DSTR_OBJT_UDP: 
     469     c->need_vio = 0; 
     470     next->def = &(next->store_def); 
     471 
     472     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_INET, SOCK_DGRAM, c->def) == -1 ) 
     473      return -1; 
     474    break; 
     475#ifdef ROAR_HAVE_IPV6 
     476   case ROAR_VIO_DSTR_OBJT_TCP6: 
     477     c->need_vio = 0; 
     478     next->def = &(next->store_def); 
     479 
     480     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_INET6, SOCK_STREAM, c->def) == -1 ) 
     481      return -1; 
     482    break; 
     483   case ROAR_VIO_DSTR_OBJT_UDP6: 
     484     c->need_vio = 0; 
     485     next->def = &(next->store_def); 
     486 
     487     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_INET6, SOCK_DGRAM, c->def) == -1 ) 
     488      return -1; 
     489    break; 
     490#endif 
    454491   default: 
    455492    return -1; 
  • libroar/vio_socket.c

    r1333 r1335  
    4949    len = sizeof(struct sockaddr_in); 
    5050 
     51    if ( roar_vio_socket_init_inet4host_def(def) == -1 ) 
     52     return -1; 
     53 
    5154    switch (def->d.socket.type) { 
    5255     case SOCK_STREAM: 
     
    144147} 
    145148 
     149int     roar_vio_socket_init_dstr_def     (struct roar_vio_defaults * def, char * dstr, int hint, int type, 
     150                                           struct roar_vio_defaults * odef) { 
     151 char * host; 
     152 int    port; 
     153 
     154 if ( def == NULL || dstr == NULL ) 
     155  return -1; 
     156 
     157 ROAR_WARN("roar_vio_socket_init_dstr_def(def=%p, dstr='%s', hint=%i, type=%i, odef=%p) = ?", def, dstr, hint, type, odef); 
     158 
     159 if ( hint == -1 ) { 
     160  if ( 0 ) { // this is needed to keep the syntx ok, compiler will throw it away 
     161#ifdef ROAR_HAVE_IPV6 
     162  } else if ( strstr(dstr, "[") != NULL ) { // [ip]:service 
     163   hint = AF_INET6; 
     164#endif 
     165#ifdef ROAR_HAVE_LIBDNET 
     166  } else if ( strstr(dstr, "::") != NULL ) { // node::object 
     167   hint = AF_DECnet; 
     168#endif 
     169#ifdef ROAR_HAVE_IPX 
     170  } else if ( strstr(dstr, "(") != NULL ) { // net:mac(service) 
     171   hint = AF_IPX; 
     172#endif 
     173#ifdef ROAR_HAVE_UNIX 
     174  } else if ( strstr(dstr, "/") != NULL ) { // /path/to/sock 
     175   hint = AF_UNIX; 
     176#endif 
     177  } else if ( strstr(dstr, ":") != NULL ) { // host:port 
     178   hint = AF_INET; 
     179  } 
     180 } 
     181 
     182 if ( hint == -1 && odef != NULL ) { // if we still don't know what this is we try 
     183                                     // to use the parent objects request 
     184  if ( odef->type == ROAR_VIO_DEF_TYPE_SOCKET ) { 
     185   hint = odef->d.socket.domain; 
     186  } 
     187 } 
     188 
     189 if ( hint == -1 ) /* we really have no glue what this is... */ 
     190  return -1; 
     191 
     192#ifdef ROAR_HAVE_UNIX 
     193 if ( hint == AF_UNIX ) { 
     194  if ( *dstr != 0 && strcmp(dstr, "//") != 0 ) { 
     195   return roar_vio_socket_init_unix_def(def, dstr); 
     196  } else { 
     197   if ( roar_vio_socket_conv_def(odef, AF_UNIX) == -1 ) 
     198    return -1; 
     199 
     200   return roar_vio_socket_init_unix_def(def, odef->d.socket.sa.un.sun_path); 
     201  } 
     202 } 
     203#endif 
     204 
     205 for (; *dstr == '/'; dstr++); 
     206 
     207 switch (hint) { 
     208  case AF_INET: 
     209    host = dstr; 
     210    for (; *dstr != 0 && *dstr != ':'; dstr++); 
     211 
     212    if ( *dstr == ':' ) { // we have a port :) 
     213     *dstr++ = 0; 
     214     if ( (port = roar_vio_socket_get_port(dstr, AF_INET, type)) == -1 ) 
     215      return -1; 
     216 
     217     return roar_vio_socket_init_inet4_def(def, host, port, type); 
     218    } else { 
     219     if ( roar_vio_socket_conv_def(odef, AF_INET) == -1 ) 
     220      return -1; 
     221 
     222     return roar_vio_socket_init_inet4_def(def, host, ROAR_NET2HOST16(odef->d.socket.sa.in.sin_port), type); 
     223    } 
     224   break; 
     225#ifdef ROAR_HAVE_LIBDNET 
     226  case AF_DECnet: 
     227    return -1; 
     228   break; 
     229#endif 
     230#ifdef ROAR_HAVE_IPV6 
     231  case AF_INET6: 
     232    return -1; 
     233   break; 
     234#endif 
     235#ifdef ROAR_HAVE_IPX 
     236  case AF_IPX: 
     237    return -1; 
     238   break; 
     239#endif 
     240  default: 
     241    return -1; 
     242 } 
     243 
     244 return 0; 
     245} 
     246 
     247int     roar_vio_socket_conv_def          (struct roar_vio_defaults * def, int domain) { 
     248 return -1; 
     249} 
     250 
     251int     roar_vio_socket_get_port          (char * service, int domain, int type) { 
     252 if ( service == NULL || domain == -1 || type == -1 ) 
     253  return -1; 
     254 
     255 // TODO: we should write something better 
     256 return atoi(service); 
     257} 
     258 
     259// AF_UNIX: 
    146260int     roar_vio_socket_init_unix_def     (struct roar_vio_defaults * def, char * path) { 
     261#ifdef ROAR_HAVE_UNIX 
    147262 if ( roar_vio_socket_init_socket_def(def, AF_UNIX, SOCK_STREAM) == -1 ) 
    148263  return -1; 
     
    151266 
    152267 return 0; 
    153 } 
    154  
     268#else 
     269 return -1; 
     270#endif 
     271} 
     272 
     273// AF_DECnet: 
    155274int     roar_vio_socket_init_decnet_def   (struct roar_vio_defaults * def, char * node, int object, char * objname); 
    156275 
    157 int     roar_vio_socket_init_inet4host_def(struct roar_vio_defaults * def, char * host) { 
     276 
     277// AF_INET: 
     278int     roar_vio_socket_init_inet4host_def(struct roar_vio_defaults * def) { 
    158279 struct hostent     * he; 
    159280 
    160  if ( def == NULL || host == NULL ) 
    161   return -1; 
    162  
    163  if ( (he = gethostbyname(host)) == NULL ) { 
     281 if ( def == NULL ) 
     282  return -1; 
     283 
     284 if ( def->d.socket.host == NULL ) 
     285  return -1; 
     286 
     287 if ( (he = gethostbyname(def->d.socket.host)) == NULL ) { 
    164288  ROAR_ERR("roar_vio_socket_init_inet4host_def(*): Can\'t resolve host name '%s'", 
    165                     host); 
     289                    def->d.socket.host); 
    166290  return -1; 
    167291 } 
     
    172296} 
    173297 
     298int     roar_vio_socket_init_inet4_def    (struct roar_vio_defaults * def, char * host, int port, int type) { 
     299 if ( roar_vio_socket_init_socket_def(def, AF_INET, type) == -1 ) 
     300  return -1; 
     301 
     302 def->d.socket.host             = host; 
     303 
     304 def->d.socket.sa.in.sin_port   = ROAR_HOST2NET16(port); 
     305 
     306 return 0; 
     307} 
     308 
    174309int     roar_vio_socket_init_tcp4_def     (struct roar_vio_defaults * def, char * host, int port) { 
    175  if ( roar_vio_socket_init_socket_def(def, AF_INET, SOCK_STREAM) == -1 ) 
    176   return -1; 
    177  
    178  if ( roar_vio_socket_init_inet4host_def(def, host) == -1 ) 
    179   return -1; 
    180  
    181  def->d.socket.sa.in.sin_port   = ROAR_HOST2NET16(port); 
    182  
    183  return 0; 
    184 } 
    185  
    186 int     roar_vio_socket_init_udp4_def     (struct roar_vio_defaults * def, char * host, int port); 
    187 int     roar_vio_socket_init_inet6host_def(struct roar_vio_defaults * def, char * host); 
    188 int     roar_vio_socket_init_tcp6_def     (struct roar_vio_defaults * def, char * host, int port); 
    189 int     roar_vio_socket_init_udp6_def     (struct roar_vio_defaults * def, char * host, int port); 
     310 return roar_vio_socket_init_inet4_def(def, host, port, SOCK_STREAM); 
     311} 
     312 
     313int     roar_vio_socket_init_udp4_def     (struct roar_vio_defaults * def, char * host, int port) { 
     314 return roar_vio_socket_init_inet4_def(def, host, port, SOCK_DGRAM); 
     315} 
     316 
     317 
     318// AF_INET6: 
     319int     roar_vio_socket_init_inet6host_def(struct roar_vio_defaults * def); 
     320int     roar_vio_socket_init_inet6_def    (struct roar_vio_defaults * def, char * host, int port, int type) { 
     321 return -1; 
     322} 
     323 
     324int     roar_vio_socket_init_tcp6_def     (struct roar_vio_defaults * def, char * host, int port) { 
     325 return roar_vio_socket_init_inet6_def(def, host, port, SOCK_STREAM); 
     326} 
     327 
     328int     roar_vio_socket_init_udp6_def     (struct roar_vio_defaults * def, char * host, int port) { 
     329 return roar_vio_socket_init_inet6_def(def, host, port, SOCK_DGRAM); 
     330} 
    190331 
    191332//ll 
Note: See TracChangeset for help on using the changeset viewer.