Changeset 1325:13b46f83762f in roaraudio
- Timestamp:
- 03/22/09 23:20:06 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/vio_dstr.h
r1323 r1325 98 98 #define ROAR_VIO_DSTR_OBJT_PGP (0x10|ROAR_VIO_DSTR_OBJGT_CRYPT) 99 99 #define ROAR_VIO_DSTR_OBJT_PGP_ENC (0x11|ROAR_VIO_DSTR_OBJGT_CRYPT) 100 #define ROAR_VIO_DSTR_OBJT_PGP_STORE (0x1 1|ROAR_VIO_DSTR_OBJGT_CRYPT)100 #define ROAR_VIO_DSTR_OBJT_PGP_STORE (0x12|ROAR_VIO_DSTR_OBJGT_CRYPT) 101 101 #define ROAR_VIO_DSTR_OBJT_SSL1 (0x21|ROAR_VIO_DSTR_OBJGT_CRYPT) 102 102 #define ROAR_VIO_DSTR_OBJT_SSL2 (0x22|ROAR_VIO_DSTR_OBJGT_CRYPT) … … 127 127 }; 128 128 129 #define ROAR_VIO_DSTR_MAX_OBJ_PER_CHAIN 16 130 129 131 struct roar_vio_dstr_chain { 130 132 int type; … … 134 136 struct roar_vio_defaults * def; 135 137 struct roar_vio_calls * vio; 138 struct roar_vio_defaults store_def; 136 139 }; 137 140 … … 145 148 146 149 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 );150 int roar_vio_dstr_set_defaults(struct roar_vio_dstr_chain * chain, int len, struct roar_vio_defaults * def, int dnum); 148 151 int roar_vio_dstr_build_chain(struct roar_vio_dstr_chain * chain, struct roar_vio_calls * calls, struct roar_vio_calls * vio); 149 152 -
libroar/vio_dstr.c
r1323 r1325 145 145 } 146 146 147 if ( type == ROAR_VIO_DSTR_OBJT_EOL ) 148 return "<<EOL>>"; 149 147 150 return NULL; 148 151 } … … 170 173 char * dstr, struct roar_vio_defaults * def, int dnum, 171 174 struct roar_vio_calls * vio) { 175 struct roar_vio_dstr_chain chain[ROAR_VIO_DSTR_MAX_OBJ_PER_CHAIN]; 172 176 char * next; 173 177 char * this; … … 178 182 int inopts; 179 183 int type; 184 int cc = 0; // current chain element 180 185 181 186 if ( calls == NULL || dstr == NULL ) … … 185 190 return -1; 186 191 187 if ( dnum > 1 )188 return -1;189 190 192 if ( (dstr = strdup(dstr)) == NULL ) 191 193 return -1; 192 194 195 memset(chain, 0, sizeof(chain)); 196 193 197 next = dstr; 194 198 195 199 while (next != NULL) { 200 if ( (cc+1) == ROAR_VIO_DSTR_MAX_OBJ_PER_CHAIN ) { 201 _ret(-1); 202 } 203 196 204 this = next; 197 205 next = strstr(next, "##"); … … 239 247 ROAR_WARN("roar_vio_open_dstr_vio(*): type=0x%.4x(%s)", type, roar_vio_dstr_get_name(type)); 240 248 241 } 242 243 _ret(-1); 249 chain[cc].type = type; 250 chain[cc].opts = opts; 251 chain[cc].dst = dst; 252 chain[cc].def = NULL; 253 chain[cc].vio = NULL; 254 chain[cc].need_vio = -1; 255 cc++; 256 257 } 258 259 chain[cc].type = ROAR_VIO_DSTR_OBJT_EOL; 260 261 if ( roar_vio_dstr_parse_opts(chain) == -1 ) { 262 _ret(-1); 263 } 264 265 if ( roar_vio_dstr_set_defaults(chain, cc, def, dnum) == -1 ) { 266 _ret(-1); 267 } 268 269 if ( roar_vio_dstr_build_chain(chain, calls, vio) == -1 ) { 270 _ret(-1); 271 } 272 273 _ret(0); 274 } 275 276 #undef _ret 277 278 int roar_vio_dstr_parse_opts(struct roar_vio_dstr_chain * chain) { 279 if ( chain == NULL ) 280 return -1; 281 282 // TODO: we should add some code here later... 283 284 return 0; 285 } 286 287 #define _toggle(x) ((x) = ((x) ? 0 : 1)) 288 289 int roar_vio_dstr_set_defaults(struct roar_vio_dstr_chain * chain, int len, struct roar_vio_defaults * def, int dnum) { 290 struct roar_vio_dstr_chain * c, * next; 291 int i; 292 293 if ( chain == NULL ) 294 return -1; 295 296 if ( def == NULL && dnum != 0 ) 297 return -1; 298 299 if ( dnum > 1 ) /* currently not supported */ 300 return -1; 301 302 if ( dnum == 0 ) 303 def = NULL; 304 305 chain[len].def = def; 306 307 for (i = len; i >= 0; i--) { 308 c = &chain[i]; 309 next = &chain[i-1]; 310 311 ROAR_WARN("roar_vio_dstr_set_defaults(*): i=%i, c->type=0x%.4x(%s)", i, c->type & 0xFFFF, roar_vio_dstr_get_name(c->type)); 312 ROAR_WARN("roar_vio_dstr_set_defaults(*): i=%i, c->type=0x%.4x(%s): c->def=%p, c->def->type=%i", i, c->type & 0xFFFF, 313 roar_vio_dstr_get_name(c->type), c->def, c->def == NULL ? -1 : c->def->type); 314 315 c->need_vio = 1; 316 317 switch (c->type) { 318 case ROAR_VIO_DSTR_OBJT_PASS: 319 case ROAR_VIO_DSTR_OBJT_RE: 320 case ROAR_VIO_DSTR_OBJT_GZIP: 321 case ROAR_VIO_DSTR_OBJT_BZIP2: 322 case ROAR_VIO_DSTR_OBJT_PGP: 323 case ROAR_VIO_DSTR_OBJT_PGP_ENC: 324 case ROAR_VIO_DSTR_OBJT_PGP_STORE: 325 case ROAR_VIO_DSTR_OBJT_SSL1: 326 case ROAR_VIO_DSTR_OBJT_SSL2: 327 case ROAR_VIO_DSTR_OBJT_SSL3: 328 case ROAR_VIO_DSTR_OBJT_TLS: 329 case ROAR_VIO_DSTR_OBJT_MAGIC: 330 _toggle(c->need_vio); 331 case ROAR_VIO_DSTR_OBJT_EOL: 332 _toggle(c->need_vio); 333 next->def = c->def; 334 break; 335 case ROAR_VIO_DSTR_OBJT_FILE: 336 if ( c->dst == NULL ) /* should we allow multible cascaed file: objects? */ 337 return -1; 338 339 c->need_vio = 0; 340 next->def = &(next->store_def); 341 if ( c->def != NULL ) { 342 roar_vio_dstr_init_defaults(next->def, ROAR_VIO_DEF_TYPE_FILE, c->def->o_flags, c->def->o_mode); 343 } else { 344 roar_vio_dstr_init_defaults(next->def, ROAR_VIO_DEF_TYPE_FILE, O_RDONLY, 0644); 345 } 346 347 if ( c->dst[0] == '/' && c->dst[1] == '/' ) { 348 next->def->d.file = c->dst + 1; 349 } else { 350 next->def->d.file = c->dst; 351 } 352 break; 353 default: 354 return -1; 355 } 356 357 ROAR_WARN("roar_vio_dstr_set_defaults(*): i=%i, c->type=0x%.4x(%s): next->def=%p, next->def->type=%i", i, 358 c->type & 0xFFFF, roar_vio_dstr_get_name(c->type), 359 next->def, next->def == NULL ? -1 : next->def->type); 360 } 361 362 return 0; 363 } 364 365 int roar_vio_dstr_build_chain(struct roar_vio_dstr_chain * chain, struct roar_vio_calls * calls, struct roar_vio_calls * vio) { 366 if ( chain == NULL || calls == NULL ) 367 return -1; 368 369 return -1; 244 370 } 245 371
Note: See TracChangeset
for help on using the changeset viewer.