Changeset 1325:13b46f83762f in roaraudio


Ignore:
Timestamp:
03/22/09 23:20:06 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

wrote a lot dstr code, started def setting code

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio_dstr.h

    r1323 r1325  
    9898#define ROAR_VIO_DSTR_OBJT_PGP            (0x10|ROAR_VIO_DSTR_OBJGT_CRYPT) 
    9999#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) 
     100#define ROAR_VIO_DSTR_OBJT_PGP_STORE      (0x12|ROAR_VIO_DSTR_OBJGT_CRYPT) 
    101101#define ROAR_VIO_DSTR_OBJT_SSL1           (0x21|ROAR_VIO_DSTR_OBJGT_CRYPT) 
    102102#define ROAR_VIO_DSTR_OBJT_SSL2           (0x22|ROAR_VIO_DSTR_OBJGT_CRYPT) 
     
    127127}; 
    128128 
     129#define ROAR_VIO_DSTR_MAX_OBJ_PER_CHAIN 16 
     130 
    129131struct roar_vio_dstr_chain { 
    130132 int    type; 
     
    134136 struct roar_vio_defaults * def; 
    135137 struct roar_vio_calls    * vio; 
     138 struct roar_vio_defaults   store_def; 
    136139}; 
    137140 
     
    145148 
    146149int     roar_vio_dstr_parse_opts(struct roar_vio_dstr_chain * chain); 
    147 int     roar_vio_dstr_set_defaults(struct roar_vio_dstr_chain * chain); 
     150int     roar_vio_dstr_set_defaults(struct roar_vio_dstr_chain * chain, int len, struct roar_vio_defaults * def, int dnum); 
    148151int     roar_vio_dstr_build_chain(struct roar_vio_dstr_chain * chain, struct roar_vio_calls * calls, struct roar_vio_calls * vio); 
    149152 
  • libroar/vio_dstr.c

    r1323 r1325  
    145145 } 
    146146 
     147 if ( type == ROAR_VIO_DSTR_OBJT_EOL ) 
     148  return "<<EOL>>"; 
     149 
    147150 return NULL; 
    148151} 
     
    170173                               char * dstr, struct roar_vio_defaults * def, int dnum, 
    171174                               struct roar_vio_calls * vio) { 
     175 struct roar_vio_dstr_chain chain[ROAR_VIO_DSTR_MAX_OBJ_PER_CHAIN]; 
    172176 char * next; 
    173177 char * this; 
     
    178182 int    inopts; 
    179183 int    type; 
     184 int    cc = 0; // current chain element 
    180185 
    181186 if ( calls == NULL || dstr == NULL ) 
     
    185190  return -1; 
    186191 
    187  if ( dnum > 1 ) 
    188   return -1; 
    189  
    190192 if ( (dstr = strdup(dstr)) == NULL ) 
    191193  return -1; 
    192194 
     195 memset(chain, 0, sizeof(chain)); 
     196 
    193197 next = dstr; 
    194198 
    195199 while (next != NULL) { 
     200  if ( (cc+1) == ROAR_VIO_DSTR_MAX_OBJ_PER_CHAIN ) { 
     201   _ret(-1); 
     202  } 
     203 
    196204  this = next; 
    197205  next = strstr(next, "##"); 
     
    239247  ROAR_WARN("roar_vio_open_dstr_vio(*): type=0x%.4x(%s)", type, roar_vio_dstr_get_name(type)); 
    240248 
    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 
     278int     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 
     289int     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 
     365int     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; 
    244370} 
    245371 
Note: See TracChangeset for help on using the changeset viewer.