Changeset 1328:9c33a74ef1dc in roaraudio


Ignore:
Timestamp:
03/23/09 02:29:01 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

got vio dstr basicly working

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio_dstr.h

    r1325 r1328  
    6060#define ROAR_VIO_DSTR_OBJT_FILE           (0x01|ROAR_VIO_DSTR_OBJGT_GEN) 
    6161#define ROAR_VIO_DSTR_OBJT_FH             (0x02|ROAR_VIO_DSTR_OBJGT_GEN) 
     62#define ROAR_VIO_DSTR_OBJT_FD             ROAR_VIO_DSTR_OBJT_FH 
    6263#define ROAR_VIO_DSTR_OBJT_SOCKETFH       (0x03|ROAR_VIO_DSTR_OBJGT_GEN) 
    6364/* some space to add memory FHs and the like */ 
  • libroar/vio_dstr.c

    r1325 r1328  
    4747 {ROAR_VIO_DSTR_OBJT_FH,         "fh", 
    4848      {ROAR_VIO_DEF_TYPE_EOL}}, 
     49 {ROAR_VIO_DSTR_OBJT_FD,         "fd", 
     50      {ROAR_VIO_DEF_TYPE_EOL}}, 
    4951 {ROAR_VIO_DSTR_OBJT_SOCKETFH,   "socketfh", 
    5052      {ROAR_VIO_DEF_TYPE_EOL}}, 
     
    182184 int    inopts; 
    183185 int    type; 
    184  int    cc = 0; // current chain element 
     186 int    cc = 1; // current chain element 
    185187 
    186188 if ( calls == NULL || dstr == NULL ) 
     
    194196 
    195197 memset(chain, 0, sizeof(chain)); 
     198 
     199 chain[0].type = ROAR_VIO_DSTR_OBJT_INTERNAL; 
    196200 
    197201 next = dstr; 
     
    259263 chain[cc].type = ROAR_VIO_DSTR_OBJT_EOL; 
    260264 
     265 ROAR_WARN("roar_vio_open_dstr_vio(*): chain=%p", chain); 
     266 
    261267 if ( roar_vio_dstr_parse_opts(chain) == -1 ) { 
    262268  _ret(-1); 
     
    284290 return 0; 
    285291} 
    286  
    287 #define _toggle(x) ((x) = ((x) ? 0 : 1)) 
    288292 
    289293int     roar_vio_dstr_set_defaults(struct roar_vio_dstr_chain * chain, int len, struct roar_vio_defaults * def, int dnum) { 
    290294 struct roar_vio_dstr_chain * c, * next; 
    291295 int i; 
     296 int tmp[8]; 
    292297 
    293298 if ( chain == NULL ) 
     
    309314  next = &chain[i-1]; 
    310315 
     316  memset(tmp, 0, sizeof(tmp)); 
     317 
    311318  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)); 
    312319  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, 
     
    316323 
    317324  switch (c->type) { 
     325   case ROAR_VIO_DSTR_OBJT_INTERNAL: 
     326     c->need_vio = 0; 
     327    break; 
     328   case ROAR_VIO_DSTR_OBJT_EOL: 
     329     tmp[0] = 1; 
    318330   case ROAR_VIO_DSTR_OBJT_PASS: 
    319331   case ROAR_VIO_DSTR_OBJT_RE: 
     
    328340   case ROAR_VIO_DSTR_OBJT_TLS: 
    329341   case ROAR_VIO_DSTR_OBJT_MAGIC: 
    330     _toggle(c->need_vio); 
    331    case ROAR_VIO_DSTR_OBJT_EOL: 
    332     _toggle(c->need_vio); 
     342     if ( tmp[0] ) 
     343      c->need_vio = 0; 
     344 
    333345     next->def = c->def; 
    334346    break; 
     
    351363     } 
    352364    break; 
     365   case ROAR_VIO_DSTR_OBJT_FH: 
     366     tmp[0] = 1; 
     367   case ROAR_VIO_DSTR_OBJT_SOCKETFH: 
     368     c->need_vio = 0; 
     369     next->def = &(next->store_def); 
     370 
     371     if ( c->def != NULL ) { 
     372      tmp[2] = c->def->o_flags; 
     373      tmp[3] = c->def->o_mode; 
     374     } else { 
     375      tmp[2] = O_RDONLY; 
     376      tmp[3] = 0644; 
     377     } 
     378 
     379     if ( !strcasecmp(c->dst, "stdin") ) { 
     380      tmp[1] = ROAR_STDIN; 
     381      tmp[2] = O_RDONLY; 
     382     } else if ( !strcasecmp(c->dst, "stdout") ) { 
     383      tmp[1] = ROAR_STDOUT; 
     384      tmp[2] = O_WRONLY; 
     385     } else if ( !strcasecmp(c->dst, "stderr") ) { 
     386      tmp[1] = ROAR_STDERR; 
     387      tmp[2] = O_WRONLY; 
     388     } else { 
     389      if ( sscanf(c->dst, "%i", &tmp[1]) != 1 ) 
     390       return -1; 
     391     } 
     392 
     393     roar_vio_dstr_init_defaults(next->def, tmp[0] ? ROAR_VIO_DEF_TYPE_FH : ROAR_VIO_DEF_TYPE_SOCKETFH, tmp[2], tmp[3]); 
     394     next->def->d.fh = tmp[1]; 
     395    break; 
    353396   default: 
    354397    return -1; 
     
    360403 } 
    361404 
     405 ROAR_WARN("roar_vio_dstr_set_defaults(*) = 0"); 
     406 
    362407 return 0; 
    363408} 
    364409 
    365 int     roar_vio_dstr_build_chain(struct roar_vio_dstr_chain * chain, struct roar_vio_calls * calls, struct roar_vio_calls * vio) { 
     410#define _ret(x) roar_vio_close(calls); ROAR_WARN("roar_vio_dstr_build_chain(*) = %i", (x)); return (x) 
     411 
     412int     roar_vio_dstr_build_chain(struct roar_vio_dstr_chain * chain, struct roar_vio_calls * calls, 
     413                                  struct roar_vio_calls * vio) { 
     414 struct roar_vio_dstr_chain * c; 
     415 struct roar_vio_defaults   * def; 
     416 struct roar_vio_calls      * tc, * prev; 
     417 int i; 
     418 
     419 ROAR_WARN("roar_vio_dstr_build_chain(*) = ?"); 
     420 
    366421 if ( chain == NULL || calls == NULL ) 
    367422  return -1; 
    368423 
    369  return -1; 
    370 } 
     424 if ( roar_vio_open_stack(calls) == -1 ) 
     425  return -1; 
     426 
     427 ROAR_WARN("roar_vio_dstr_build_chain(*): chain=%p", chain); 
     428 
     429 if ( (def = chain->def) != NULL ) { 
     430  if ( (tc = malloc(sizeof(struct roar_vio_calls))) == NULL ) { 
     431   _ret(-1); 
     432  } 
     433 
     434  if ( roar_vio_stack_add(calls, tc) == -1 ) { 
     435   _ret(-1); 
     436  } 
     437 
     438  switch (def->type) { 
     439   case ROAR_VIO_DEF_TYPE_FILE: 
     440     if ( roar_vio_open_file(tc, def->d.file, def->o_flags, def->o_mode) == -1 ) { 
     441      _ret(-1); 
     442     } 
     443    break; 
     444   case ROAR_VIO_DEF_TYPE_SOCKET: 
     445     _ret(-1); 
     446    break; 
     447   case ROAR_VIO_DEF_TYPE_FH: 
     448     if ( roar_vio_open_fh(tc, def->d.fh) == -1 ) { 
     449      _ret(-1); 
     450     } 
     451    break; 
     452   case ROAR_VIO_DEF_TYPE_SOCKETFH: 
     453     if ( roar_vio_open_fh_socket(tc, def->d.fh) == -1 ) { 
     454      _ret(-1); 
     455     } 
     456    break; 
     457   default: 
     458     _ret(-1); 
     459  } 
     460  prev = tc; 
     461 } else { 
     462  prev = vio; 
     463 } 
     464 
     465 for (i = 0; (c = &chain[i])->type != ROAR_VIO_DSTR_OBJT_EOL; i++) { 
     466  if ( c->need_vio ) { 
     467   if ( (tc = malloc(sizeof(struct roar_vio_calls))) == NULL ) { 
     468    _ret(-1); 
     469   } 
     470 
     471   if ( roar_vio_stack_add(calls, tc) == -1 ) { 
     472    _ret(-1); 
     473   } 
     474 
     475   switch (c->type) { 
     476    case ROAR_VIO_DSTR_OBJT_PASS: 
     477      if ( roar_vio_open_pass(tc, prev) == -1 ) { 
     478       _ret(-1); 
     479      } 
     480     break; 
     481    case ROAR_VIO_DSTR_OBJT_RE: 
     482      if ( roar_vio_open_re(tc, prev) == -1 ) { 
     483       _ret(-1); 
     484      } 
     485     break; 
     486    case ROAR_VIO_DSTR_OBJT_GZIP: 
     487      if ( roar_vio_open_gzip(tc, prev, -1) == -1 ) { 
     488       _ret(-1); 
     489      } 
     490     break; 
     491    case ROAR_VIO_DSTR_OBJT_BZIP2: 
     492    case ROAR_VIO_DSTR_OBJT_PGP: 
     493      if ( roar_vio_open_pgp_decrypt(tc, prev, NULL) == -1 ) { 
     494       _ret(-1); 
     495      } 
     496     break; 
     497    case ROAR_VIO_DSTR_OBJT_PGP_ENC: 
     498    case ROAR_VIO_DSTR_OBJT_PGP_STORE: 
     499      if ( roar_vio_open_pgp_store(tc, prev, ROAR_VIO_PGP_OPTS_NONE) == -1 ) { 
     500       _ret(-1); 
     501      } 
     502     break; 
     503    case ROAR_VIO_DSTR_OBJT_SSL1: 
     504    case ROAR_VIO_DSTR_OBJT_SSL2: 
     505    case ROAR_VIO_DSTR_OBJT_SSL3: 
     506    case ROAR_VIO_DSTR_OBJT_TLS: 
     507    case ROAR_VIO_DSTR_OBJT_MAGIC: 
     508      _ret(-1); 
     509     break; 
     510    default: 
     511      _ret(-1); 
     512   } 
     513 
     514   prev = tc; 
     515  } // else we can skip to the next :) 
     516 } 
     517 
     518 ROAR_WARN("roar_vio_dstr_build_chain(*) = 0"); 
     519 return 0; 
     520} 
     521 
     522#undef _ret 
    371523 
    372524//ll 
Note: See TracChangeset for help on using the changeset viewer.