Changeset 1333:640960dc1a0d in roaraudio
- Timestamp:
- 03/23/09 04:11:32 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/vio_dstr.h
r1330 r1333 122 122 int type; 123 123 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; 125 140 socklen_t len; 126 141 } socket; -
include/libroar/vio_socket.h
r1332 r1333 42 42 int roar_vio_open_def_socket (struct roar_vio_calls * calls, struct roar_vio_defaults * def); 43 43 44 int roar_vio_socket_init_socket_def (struct roar_vio_defaults * def, int domain, int type); 45 44 46 int roar_vio_socket_init_unix_def (struct roar_vio_defaults * def, char * path); 45 47 int roar_vio_socket_init_decnet_def (struct roar_vio_defaults * def, char * node, int object, char * objname); -
libroar/vio_dstr.c
r1330 r1333 176 176 break; 177 177 case ROAR_VIO_DEF_TYPE_SOCKET: 178 return -1; 178 if ( roar_vio_open_def_socket(calls, def) == -1 ) 179 return -1; 179 180 break; 180 181 case ROAR_VIO_DEF_TYPE_FH: … … 429 430 next->def->d.fh = tmp[1]; 430 431 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; 431 454 default: 432 455 return -1; -
libroar/vio_socket.c
r1332 r1333 35 35 #include "libroar.h" 36 36 37 int roar_vio_open_def_socket (struct roar_vio_calls * calls, struct roar_vio_defaults * def); 37 int roar_vio_open_def_socket (struct roar_vio_calls * calls, struct roar_vio_defaults * def) { 38 int fh = -1; 39 socklen_t len = 0; 38 40 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 128 int 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 146 int 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 40 155 int roar_vio_socket_init_decnet_def (struct roar_vio_defaults * def, char * node, int object, char * objname); 41 156 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); 157 int 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 174 int 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 44 186 int roar_vio_socket_init_udp4_def (struct roar_vio_defaults * def, char * host, int port); 45 187 int roar_vio_socket_init_inet6host_def(struct roar_vio_defaults * def, char * host);
Note: See TracChangeset
for help on using the changeset viewer.