Changeset 1323:ad8d25a78446 in roaraudio
- Timestamp:
- 03/22/09 20:11:03 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/vio_dstr.h
r1321 r1323 38 38 #include "libroar.h" 39 39 40 #define ROAR_VIO_DEF_TYPE_EOL -1 41 #define ROAR_VIO_DEF_TYPE_NONE 0 42 #define ROAR_VIO_DEF_TYPE_FILE 1 43 #define ROAR_VIO_DEF_TYPE_SOCKET 2 44 #define ROAR_VIO_DEF_TYPE_FH 3 45 #define ROAR_VIO_DEF_TYPE_SOCKETFH 4 46 47 #define ROAR_VIO_DSTR_OBJGT_INTERNAL 0x0000 48 #define ROAR_VIO_DSTR_OBJGT_GEN 0x0100 49 #define ROAR_VIO_DSTR_OBJGT_SOCKET 0x0200 50 #define ROAR_VIO_DSTR_OBJGT_PROXY 0x0300 51 #define ROAR_VIO_DSTR_OBJGT_COMP 0x0400 /* compression */ 52 #define ROAR_VIO_DSTR_OBJGT_CRYPT 0x0500 53 #define ROAR_VIO_DSTR_OBJGT_PROTO 0x0600 /* protocolls like HTTP and Gopher */ 54 #define ROAR_VIO_DSTR_OBJGT_SPECAL 0xff00 55 56 #define ROAR_VIO_DSTR_OBJT_EOL -1 57 #define ROAR_VIO_DSTR_OBJT_NONE 0 58 #define ROAR_VIO_DSTR_OBJT_INTERNAL 1 59 60 #define ROAR_VIO_DSTR_OBJT_FILE (0x01|ROAR_VIO_DSTR_OBJGT_GEN) 61 #define ROAR_VIO_DSTR_OBJT_FH (0x02|ROAR_VIO_DSTR_OBJGT_GEN) 62 #define ROAR_VIO_DSTR_OBJT_SOCKETFH (0x03|ROAR_VIO_DSTR_OBJGT_GEN) 63 /* some space to add memory FHs and the like */ 64 #define ROAR_VIO_DSTR_OBJT_PASS (0x10|ROAR_VIO_DSTR_OBJGT_GEN) 65 #define ROAR_VIO_DSTR_OBJT_RE (0x11|ROAR_VIO_DSTR_OBJGT_GEN) 66 #define ROAR_VIO_DSTR_OBJT_EXEC (0x20|ROAR_VIO_DSTR_OBJGT_GEN) 67 68 #define ROAR_VIO_DSTR_OBJT_SOCKET (0x01|ROAR_VIO_DSTR_OBJGT_SOCKET) 69 #define ROAR_VIO_DSTR_OBJT_UNIX (0x02|ROAR_VIO_DSTR_OBJGT_SOCKET) 70 #define ROAR_VIO_DSTR_OBJT_DECNET (0x10|ROAR_VIO_DSTR_OBJGT_SOCKET) 71 #define ROAR_VIO_DSTR_OBJT_TCP (0x21|ROAR_VIO_DSTR_OBJGT_SOCKET) 72 #define ROAR_VIO_DSTR_OBJT_UDP (0x22|ROAR_VIO_DSTR_OBJGT_SOCKET) 73 #define ROAR_VIO_DSTR_OBJT_TCP6 (0x31|ROAR_VIO_DSTR_OBJGT_SOCKET) 74 #define ROAR_VIO_DSTR_OBJT_UDP6 (0x32|ROAR_VIO_DSTR_OBJGT_SOCKET) 75 76 #define ROAR_VIO_DSTR_OBJT_SOCKS (0x10|ROAR_VIO_DSTR_OBJGT_PROXY) 77 #define ROAR_VIO_DSTR_OBJT_SOCKS4 (0x14|ROAR_VIO_DSTR_OBJGT_PROXY) 78 #define ROAR_VIO_DSTR_OBJT_SOCKS4A (0x1a|ROAR_VIO_DSTR_OBJGT_PROXY) 79 #define ROAR_VIO_DSTR_OBJT_SOCKS4D (0x1d|ROAR_VIO_DSTR_OBJGT_PROXY) 80 #define ROAR_VIO_DSTR_OBJT_SOCKS5 (0x15|ROAR_VIO_DSTR_OBJGT_PROXY) 81 #define ROAR_VIO_DSTR_OBJT_SSH (0x21|ROAR_VIO_DSTR_OBJGT_PROXY) 82 //#define ROAR_VIO_DSTR_OBJT_HTTP (0x31|ROAR_VIO_DSTR_OBJGT_PROXY) 83 84 //#define ROAR_VIO_DSTR_OBJT_HTTP (0x10|ROAR_VIO_DSTR_OBJGT_PROTO) 85 #define ROAR_VIO_DSTR_OBJT_HTTP09 (0x11|ROAR_VIO_DSTR_OBJGT_PROTO) 86 #define ROAR_VIO_DSTR_OBJT_HTTP10 (0x12|ROAR_VIO_DSTR_OBJGT_PROTO) 87 #define ROAR_VIO_DSTR_OBJT_HTTP11 (0x13|ROAR_VIO_DSTR_OBJGT_PROTO) 88 #define ROAR_VIO_DSTR_OBJT_HTTP ROAR_VIO_DSTR_OBJT_HTTP11 89 #define ROAR_VIO_DSTR_OBJT_GOPHER (0x21|ROAR_VIO_DSTR_OBJGT_PROTO) 90 91 /* 92 #define ROAR_VIO_DSTR_OBJGT_CRYPT 0x0500 93 */ 94 95 #define ROAR_VIO_DSTR_OBJT_GZIP (0x10|ROAR_VIO_DSTR_OBJGT_COMP) 96 #define ROAR_VIO_DSTR_OBJT_BZIP2 (0x22|ROAR_VIO_DSTR_OBJGT_COMP) 97 98 #define ROAR_VIO_DSTR_OBJT_PGP (0x10|ROAR_VIO_DSTR_OBJGT_CRYPT) 99 #define ROAR_VIO_DSTR_OBJT_PGP_ENC (0x11|ROAR_VIO_DSTR_OBJGT_CRYPT) 100 #define ROAR_VIO_DSTR_OBJT_PGP_STORE (0x11|ROAR_VIO_DSTR_OBJGT_CRYPT) 101 #define ROAR_VIO_DSTR_OBJT_SSL1 (0x21|ROAR_VIO_DSTR_OBJGT_CRYPT) 102 #define ROAR_VIO_DSTR_OBJT_SSL2 (0x22|ROAR_VIO_DSTR_OBJGT_CRYPT) 103 #define ROAR_VIO_DSTR_OBJT_SSL3 (0x23|ROAR_VIO_DSTR_OBJGT_CRYPT) 104 #define ROAR_VIO_DSTR_OBJT_TLS (0x2a|ROAR_VIO_DSTR_OBJGT_CRYPT) 105 #define ROAR_VIO_DSTR_OBJT_SSLTLS ROAR_VIO_DSTR_OBJT_TLS 106 107 #define ROAR_VIO_DSTR_OBJT_MAGIC (0x01|ROAR_VIO_DSTR_OBJGT_SPECAL) 108 109 110 struct roar_vio_defaults { 111 int type; 112 113 mode_t o_mode; 114 int o_flags; 115 116 union { 117 char * file; 118 int fh; 119 struct { 120 int domain; 121 int type; 122 char * host; 123 struct sockaddr * sa; 124 socklen_t len; 125 } socket; 126 } d; 127 }; 128 129 struct roar_vio_dstr_chain { 130 int type; 131 char * opts; 132 char * dst; 133 int need_vio; 134 struct roar_vio_defaults * def; 135 struct roar_vio_calls * vio; 136 }; 137 138 int roar_vio_dstr_get_type(char * str); 139 char * roar_vio_dstr_get_name(int type); 140 141 int roar_vio_dstr_init_defaults (struct roar_vio_defaults * def, int type, int o_flags, mode_t o_mode); 142 143 int roar_vio_open_dstr (struct roar_vio_calls * calls, char * dstr, struct roar_vio_defaults * def, int dnum); 144 int roar_vio_open_dstr_vio(struct roar_vio_calls * calls, char * dstr, struct roar_vio_defaults * def, int dnum, struct roar_vio_calls * vio); 145 146 int roar_vio_dstr_parse_opts(struct roar_vio_dstr_chain * chain); 147 int roar_vio_dstr_set_defaults(struct roar_vio_dstr_chain * chain); 148 int roar_vio_dstr_build_chain(struct roar_vio_dstr_chain * chain, struct roar_vio_calls * calls, struct roar_vio_calls * vio); 149 40 150 #endif 41 151 -
libroar/vio_dstr.c
r1321 r1323 35 35 #include "libroar.h" 36 36 37 struct { 38 int id; 39 char * name; 40 int pdeftype[16]; 41 } _roar_vio_dstr_objs[] = { 42 /* 43 grep '^#define ROAR_VIO_DSTR_OBJT_' vio_dstr.h | cut -d' ' -f2 | while read objt; do name=`cut -d_ -f5,6,7,8,9,10 <<<$objt | tr A-Z a-z`; echo -e " {$objt,\t \"$name\","; echo " {ROAR_VIO_DEF_TYPE_EOL}},"; done; 44 */ 45 {ROAR_VIO_DSTR_OBJT_FILE, "file", 46 {ROAR_VIO_DEF_TYPE_EOL}}, 47 {ROAR_VIO_DSTR_OBJT_FH, "fh", 48 {ROAR_VIO_DEF_TYPE_EOL}}, 49 {ROAR_VIO_DSTR_OBJT_SOCKETFH, "socketfh", 50 {ROAR_VIO_DEF_TYPE_EOL}}, 51 {ROAR_VIO_DSTR_OBJT_PASS, "pass", 52 {ROAR_VIO_DEF_TYPE_EOL}}, 53 {ROAR_VIO_DSTR_OBJT_RE, "re", 54 {ROAR_VIO_DEF_TYPE_EOL}}, 55 {ROAR_VIO_DSTR_OBJT_EXEC, "exec", 56 {ROAR_VIO_DEF_TYPE_EOL}}, 57 58 {ROAR_VIO_DSTR_OBJT_SOCKET, "socket", 59 {ROAR_VIO_DEF_TYPE_EOL}}, 60 {ROAR_VIO_DSTR_OBJT_UNIX, "unix", 61 {ROAR_VIO_DEF_TYPE_EOL}}, 62 {ROAR_VIO_DSTR_OBJT_DECNET, "decnet", 63 {ROAR_VIO_DEF_TYPE_EOL}}, 64 {ROAR_VIO_DSTR_OBJT_TCP, "tcp", 65 {ROAR_VIO_DEF_TYPE_EOL}}, 66 {ROAR_VIO_DSTR_OBJT_UDP, "udp", 67 {ROAR_VIO_DEF_TYPE_EOL}}, 68 {ROAR_VIO_DSTR_OBJT_TCP6, "tcp6", 69 {ROAR_VIO_DEF_TYPE_EOL}}, 70 {ROAR_VIO_DSTR_OBJT_UDP6, "udp6", 71 {ROAR_VIO_DEF_TYPE_EOL}}, 72 73 {ROAR_VIO_DSTR_OBJT_SOCKS, "socks", 74 {ROAR_VIO_DEF_TYPE_EOL}}, 75 {ROAR_VIO_DSTR_OBJT_SOCKS4, "socks4", 76 {ROAR_VIO_DEF_TYPE_EOL}}, 77 {ROAR_VIO_DSTR_OBJT_SOCKS4A, "socks4a", 78 {ROAR_VIO_DEF_TYPE_EOL}}, 79 {ROAR_VIO_DSTR_OBJT_SOCKS4D, "socks4d", 80 {ROAR_VIO_DEF_TYPE_EOL}}, 81 {ROAR_VIO_DSTR_OBJT_SOCKS5, "socks5", 82 {ROAR_VIO_DEF_TYPE_EOL}}, 83 {ROAR_VIO_DSTR_OBJT_SSH, "ssh", 84 {ROAR_VIO_DEF_TYPE_EOL}}, 85 86 {ROAR_VIO_DSTR_OBJT_HTTP09, "http09", 87 {ROAR_VIO_DEF_TYPE_EOL}}, 88 {ROAR_VIO_DSTR_OBJT_HTTP10, "http10", 89 {ROAR_VIO_DEF_TYPE_EOL}}, 90 {ROAR_VIO_DSTR_OBJT_HTTP11, "http11", 91 {ROAR_VIO_DEF_TYPE_EOL}}, 92 {ROAR_VIO_DSTR_OBJT_HTTP, "http", 93 {ROAR_VIO_DEF_TYPE_EOL}}, 94 {ROAR_VIO_DSTR_OBJT_GOPHER, "gopher", 95 {ROAR_VIO_DEF_TYPE_EOL}}, 96 97 {ROAR_VIO_DSTR_OBJT_GZIP, "gzip", 98 {ROAR_VIO_DEF_TYPE_EOL}}, 99 {ROAR_VIO_DSTR_OBJT_BZIP2, "bzip2", 100 {ROAR_VIO_DEF_TYPE_EOL}}, 101 102 {ROAR_VIO_DSTR_OBJT_PGP, "pgp", 103 {ROAR_VIO_DEF_TYPE_EOL}}, 104 {ROAR_VIO_DSTR_OBJT_PGP_ENC, "pgp_enc", 105 {ROAR_VIO_DEF_TYPE_EOL}}, 106 {ROAR_VIO_DSTR_OBJT_PGP_STORE, "pgp_store", 107 {ROAR_VIO_DEF_TYPE_EOL}}, 108 {ROAR_VIO_DSTR_OBJT_SSL1, "ssl1", 109 {ROAR_VIO_DEF_TYPE_EOL}}, 110 {ROAR_VIO_DSTR_OBJT_SSL2, "ssl2", 111 {ROAR_VIO_DEF_TYPE_EOL}}, 112 {ROAR_VIO_DSTR_OBJT_SSL3, "ssl3", 113 {ROAR_VIO_DEF_TYPE_EOL}}, 114 {ROAR_VIO_DSTR_OBJT_TLS, "tls", 115 {ROAR_VIO_DEF_TYPE_EOL}}, 116 {ROAR_VIO_DSTR_OBJT_SSLTLS, "ssltls", 117 {ROAR_VIO_DEF_TYPE_EOL}}, 118 119 {ROAR_VIO_DSTR_OBJT_MAGIC, "magic", 120 {ROAR_VIO_DEF_TYPE_EOL}}, 121 122 {ROAR_VIO_DSTR_OBJT_INTERNAL, "INTERNAL", 123 {ROAR_VIO_DEF_TYPE_FILE, ROAR_VIO_DEF_TYPE_SOCKET, ROAR_VIO_DEF_TYPE_FH, ROAR_VIO_DEF_TYPE_SOCKETFH, 124 ROAR_VIO_DEF_TYPE_EOL}}, 125 {ROAR_VIO_DSTR_OBJT_EOL, NULL, {ROAR_VIO_DEF_TYPE_EOL}} 126 }; 127 128 int roar_vio_dstr_get_type(char * str) { 129 int i; 130 131 for (i = 0; _roar_vio_dstr_objs[i].id != ROAR_VIO_DSTR_OBJT_EOL; i++) { 132 if ( strcasecmp(_roar_vio_dstr_objs[i].name, str) == 0 ) 133 return _roar_vio_dstr_objs[i].id; 134 } 135 136 return -1; 137 } 138 139 char * roar_vio_dstr_get_name(int type) { 140 int i; 141 142 for (i = 0; _roar_vio_dstr_objs[i].id != ROAR_VIO_DSTR_OBJT_EOL; i++) { 143 if ( _roar_vio_dstr_objs[i].id == type ) 144 return _roar_vio_dstr_objs[i].name; 145 } 146 147 return NULL; 148 } 149 150 int roar_vio_dstr_init_defaults (struct roar_vio_defaults * def, int type, int o_flags, mode_t o_mode) { 151 if ( def == NULL ) 152 return -1; 153 154 memset(def, 0, sizeof(struct roar_vio_defaults)); 155 156 def->type = type; 157 def->o_flags = o_flags; 158 def->o_mode = o_mode; 159 160 return 0; 161 } 162 163 int roar_vio_open_dstr (struct roar_vio_calls * calls, char * dstr, struct roar_vio_defaults * def, int dnum) { 164 return roar_vio_open_dstr_vio(calls, dstr, def, dnum, NULL); 165 } 166 167 #define _ret(x) free(dstr); return (x) 168 169 int roar_vio_open_dstr_vio(struct roar_vio_calls * calls, 170 char * dstr, struct roar_vio_defaults * def, int dnum, 171 struct roar_vio_calls * vio) { 172 char * next; 173 char * this; 174 char * name; 175 char * opts; 176 char * dst; 177 char * c; 178 int inopts; 179 int type; 180 181 if ( calls == NULL || dstr == NULL ) 182 return -1; 183 184 if ( dnum != 0 && def == NULL ) 185 return -1; 186 187 if ( dnum > 1 ) 188 return -1; 189 190 if ( (dstr = strdup(dstr)) == NULL ) 191 return -1; 192 193 next = dstr; 194 195 while (next != NULL) { 196 this = next; 197 next = strstr(next, "##"); 198 199 if (next != NULL) { 200 *next = 0; 201 next += 2; 202 } 203 204 // we have the current token in 'this'. 205 206 opts = NULL; 207 dst = NULL; 208 209 if ( strstr(this, ":") != NULL ) { 210 name = this; 211 inopts = 0; 212 for (c = this; *c != 0; c++) { 213 if ( *c == '[' ) { 214 *c = 0; 215 opts = c + 1; 216 inopts = 1; 217 } else if ( *c == ']' && inopts ) { 218 *c = 0; 219 inopts = 0; 220 } else if ( *c == ':' && !inopts ) { 221 *c = 0; 222 dst = *(c+1) == 0 ? NULL : c + 1; 223 break; 224 } 225 } 226 } else { 227 // we need to guess that this is here... 228 // currently we guess this is a file in all cases 229 name = "file"; 230 dst = this; 231 } 232 233 ROAR_WARN("roar_vio_open_dstr_vio(*): name='%s', opts='%s', dst='%s'", name, opts, dst); 234 235 if ( (type = roar_vio_dstr_get_type(name)) == -1 ) { 236 _ret(-1); 237 } 238 239 ROAR_WARN("roar_vio_open_dstr_vio(*): type=0x%.4x(%s)", type, roar_vio_dstr_get_name(type)); 240 241 } 242 243 _ret(-1); 244 } 245 37 246 //ll
Note: See TracChangeset
for help on using the changeset viewer.