Changeset 1333:640960dc1a0d in roaraudio


Ignore:
Timestamp:
03/23/09 04:11:32 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

done most basic code to open socket out of defs

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio_dstr.h

    r1330 r1333  
    122122          int               type; 
    123123          char            * host; 
    124           struct sockaddr * sa; 
     124          union { 
     125                 struct sockaddr     sa; 
     126                 struct sockaddr_in  in; 
     127#ifdef ROAR_HAVE_UNIX 
     128                 struct sockaddr_un  un; 
     129#endif 
     130#ifdef ROAR_HAVE_LIBDNET 
     131                 struct sockaddr_dn  dn; 
     132#endif 
     133#ifdef ROAR_HAVE_IPV6 
     134                 struct sockaddr_in6 in6; 
     135#endif 
     136#ifdef ROAR_HAVE_IPX 
     137                 struct sockaddr_ipx ipx; 
     138#endif 
     139                } sa; 
    125140          socklen_t         len; 
    126141         } socket; 
  • include/libroar/vio_socket.h

    r1332 r1333  
    4242int     roar_vio_open_def_socket          (struct roar_vio_calls * calls, struct roar_vio_defaults * def); 
    4343 
     44int     roar_vio_socket_init_socket_def   (struct roar_vio_defaults * def, int domain, int type); 
     45 
    4446int     roar_vio_socket_init_unix_def     (struct roar_vio_defaults * def, char * path); 
    4547int     roar_vio_socket_init_decnet_def   (struct roar_vio_defaults * def, char * node, int object, char * objname); 
  • libroar/vio_dstr.c

    r1330 r1333  
    176176   break; 
    177177  case ROAR_VIO_DEF_TYPE_SOCKET: 
    178      return -1; 
     178     if ( roar_vio_open_def_socket(calls, def) == -1 ) 
     179      return -1; 
    179180   break; 
    180181  case ROAR_VIO_DEF_TYPE_FH: 
     
    429430     next->def->d.fh = tmp[1]; 
    430431    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*/ 
     441   case ROAR_VIO_DSTR_OBJT_UNIX: 
     442     c->need_vio = 0; 
     443     next->def = &(next->store_def); 
     444 
     445     if ( c->def != NULL ) { 
     446      roar_vio_dstr_init_defaults(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def->o_flags, c->def->o_mode); 
     447     } else { 
     448      roar_vio_dstr_init_defaults(next->def, ROAR_VIO_DEF_TYPE_SOCKET, O_WRONLY, 0644); 
     449     } 
     450 
     451     if ( roar_vio_socket_init_unix_def(next->def, c->dst) == -1 ) 
     452      return -1; 
     453    break; 
    431454   default: 
    432455    return -1; 
  • libroar/vio_socket.c

    r1332 r1333  
    3535#include "libroar.h" 
    3636 
    37 int     roar_vio_open_def_socket          (struct roar_vio_calls * calls, struct roar_vio_defaults * def); 
     37int     roar_vio_open_def_socket          (struct roar_vio_calls * calls, struct roar_vio_defaults * def) { 
     38 int       fh  = -1; 
     39 socklen_t len =  0; 
    3840 
    39 int     roar_vio_socket_init_unix_def     (struct roar_vio_defaults * def, char * path); 
     41 if ( calls == NULL || def == NULL ) 
     42  return -1; 
     43 
     44 if ( def->type != ROAR_VIO_DEF_TYPE_SOCKET ) 
     45  return -1; 
     46 
     47 switch (def->d.socket.domain) { 
     48  case AF_INET: 
     49    len = sizeof(struct sockaddr_in); 
     50 
     51    switch (def->d.socket.type) { 
     52     case SOCK_STREAM: 
     53       fh = roar_socket_new_tcp(); 
     54      break; 
     55     case SOCK_DGRAM: 
     56       fh = roar_socket_new_udp(); 
     57      break; 
     58     default: 
     59       return -1; 
     60    } 
     61   break; 
     62#ifdef ROAR_HAVE_UNIX 
     63  case AF_UNIX: 
     64    len = sizeof(struct sockaddr_un); 
     65 
     66    switch (def->d.socket.type) { 
     67     case SOCK_STREAM: 
     68       fh = roar_socket_new_unix(); 
     69      break; 
     70     case SOCK_DGRAM: 
     71       return -1; 
     72      break; 
     73     default: 
     74       return -1; 
     75    } 
     76   break; 
     77#endif 
     78#ifdef ROAR_HAVE_LIBDNET 
     79  case AF_DECnet: 
     80    len = sizeof(struct sockaddr_dn); 
     81 
     82    return -1; 
     83   break; 
     84#endif 
     85#ifdef ROAR_HAVE_IPV6 
     86  case AF_INET6: 
     87    len = sizeof(struct sockaddr_in6); 
     88 
     89    switch (def->d.socket.type) { 
     90     case SOCK_STREAM: 
     91       fh = roar_socket_new_tcp6(); 
     92      break; 
     93     case SOCK_DGRAM: 
     94       fh = roar_socket_new_udp6(); 
     95      break; 
     96     default: 
     97       return -1; 
     98    } 
     99   break; 
     100#endif 
     101#ifdef ROAR_HAVE_IPX 
     102  case AF_IPX: 
     103    len = sizeof(struct sockaddr_ipx); 
     104 
     105    return -1; 
     106   break; 
     107#endif 
     108  default: 
     109    return -1; 
     110 } 
     111 
     112 if ( fh == -1 ) 
     113  return -1; 
     114 
     115 if ( connect(fh, &(def->d.socket.sa.sa), len) == -1 ) { 
     116  close(fh); 
     117  return -1; 
     118 } 
     119 
     120 if ( roar_vio_open_fh_socket(calls, fh) == -1 ) { 
     121  close(fh); 
     122  return -1; 
     123 } 
     124 
     125 return 0; 
     126} 
     127 
     128int     roar_vio_socket_init_socket_def   (struct roar_vio_defaults * def, int domain, int type) { 
     129 if ( def == NULL || domain == -1 || type == -1 ) 
     130  return -1; 
     131 
     132 // we do not memset(def, 0, sizeof(...)) here 
     133 // because this is allready done in roar_vio_dstr_init_defaults() 
     134 // if we would be would override o_flags/o_mode and maybe others 
     135 
     136 memset(&(def->d.socket.sa), 0, sizeof(def->d.socket.sa)); 
     137 
     138 def->type                     = ROAR_VIO_DEF_TYPE_SOCKET; 
     139 def->d.socket.domain          = domain; 
     140 def->d.socket.type            = type; 
     141 def->d.socket.sa.sa.sa_family = domain; 
     142 
     143 return 0; 
     144} 
     145 
     146int     roar_vio_socket_init_unix_def     (struct roar_vio_defaults * def, char * path) { 
     147 if ( roar_vio_socket_init_socket_def(def, AF_UNIX, SOCK_STREAM) == -1 ) 
     148  return -1; 
     149 
     150 strncpy(def->d.socket.sa.un.sun_path, path, sizeof(def->d.socket.sa.un.sun_path) - 1); 
     151 
     152 return 0; 
     153} 
     154 
    40155int     roar_vio_socket_init_decnet_def   (struct roar_vio_defaults * def, char * node, int object, char * objname); 
    41156 
    42 int     roar_vio_socket_init_inet4host_def(struct roar_vio_defaults * def, char * host); 
    43 int     roar_vio_socket_init_tcp4_def     (struct roar_vio_defaults * def, char * host, int port); 
     157int     roar_vio_socket_init_inet4host_def(struct roar_vio_defaults * def, char * host) { 
     158 struct hostent     * he; 
     159 
     160 if ( def == NULL || host == NULL ) 
     161  return -1; 
     162 
     163 if ( (he = gethostbyname(host)) == NULL ) { 
     164  ROAR_ERR("roar_vio_socket_init_inet4host_def(*): Can\'t resolve host name '%s'", 
     165                    host); 
     166  return -1; 
     167 } 
     168 
     169 memcpy((struct in_addr *)&def->d.socket.sa.in.sin_addr, he->h_addr, sizeof(struct in_addr)); 
     170 
     171 return 0; 
     172} 
     173 
     174int     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 
    44186int     roar_vio_socket_init_udp4_def     (struct roar_vio_defaults * def, char * host, int port); 
    45187int     roar_vio_socket_init_inet6host_def(struct roar_vio_defaults * def, char * host); 
Note: See TracChangeset for help on using the changeset viewer.