Changeset 1353:d3fff5536a2e in roaraudio


Ignore:
Timestamp:
03/23/09 19:52:54 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

we need to set access modes and init next->def in case of sockets, got tcp:...##gopher:##file:... working :)

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio_dstr.h

    r1349 r1353  
    160160 
    161161int     roar_vio_dstr_init_defaults (struct roar_vio_defaults * def, int type, int o_flags, mode_t o_mode); 
     162int     roar_vio_dstr_init_defaults_c (struct roar_vio_defaults * def, int type, struct roar_vio_defaults * odef, int o_flags); 
    162163 
    163164int     roar_vio_open_default (struct roar_vio_calls * calls, struct roar_vio_defaults * def); 
  • libroar/vio_dstr.c

    r1350 r1353  
    168168} 
    169169 
     170int     roar_vio_dstr_init_defaults_c (struct roar_vio_defaults * def, int type, struct roar_vio_defaults * odef, int o_flags) { 
     171 if ( o_flags < 1 ) 
     172  o_flags = O_RDONLY; 
     173 
     174 if ( odef == NULL ) { 
     175  return roar_vio_dstr_init_defaults(def, type, o_flags, 0644); 
     176 } else { 
     177  return roar_vio_dstr_init_defaults(def, type, odef->o_flags, odef->o_mode); 
     178 } 
     179} 
     180 
    170181int     roar_vio_open_default (struct roar_vio_calls * calls, struct roar_vio_defaults * def) { 
    171182 if ( calls == NULL || def == NULL ) 
     
    389400     c->need_vio = 0; 
    390401     next->def = &(next->store_def); 
    391      if ( c->def != NULL ) { 
    392       roar_vio_dstr_init_defaults(next->def, ROAR_VIO_DEF_TYPE_FILE, c->def->o_flags, c->def->o_mode); 
    393      } else { 
    394       roar_vio_dstr_init_defaults(next->def, ROAR_VIO_DEF_TYPE_FILE, O_RDONLY, 0644); 
    395      } 
     402     roar_vio_dstr_init_defaults_c(next->def, ROAR_VIO_DEF_TYPE_FILE, c->def, -1); 
    396403 
    397404     if ( c->dst[0] == '/' && c->dst[1] == '/' ) { 
     
    438445 
    439446     if ( c->dst == NULL ) { // we don't have a destination? -> slow way 
     447      if ( roar_vio_dstr_init_defaults_c(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def, O_WRONLY) == -1 ) 
     448       return -1; 
     449 
    440450      if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_UNIX, SOCK_STREAM, c->def) == -1 ) 
    441451       return -1; 
    442452     } else {                // we have a destination? -> fast way 
    443       if ( c->def != NULL ) { 
    444        roar_vio_dstr_init_defaults(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def->o_flags, c->def->o_mode); 
    445       } else { 
    446        roar_vio_dstr_init_defaults(next->def, ROAR_VIO_DEF_TYPE_SOCKET, O_WRONLY, 0644); 
    447       } 
     453      if ( roar_vio_dstr_init_defaults_c(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def, O_WRONLY) == -1 ) 
     454       return -1; 
    448455 
    449456      if ( roar_vio_socket_init_unix_def(next->def, c->dst) == -1 ) 
     
    456463     next->def = &(next->store_def); 
    457464 
     465     if ( roar_vio_dstr_init_defaults_c(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def, O_WRONLY) == -1 ) 
     466      return -1; 
     467 
    458468     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, -1, SOCK_STREAM, c->def) == -1 ) 
    459469      return -1; 
     
    464474     next->def = &(next->store_def); 
    465475 
     476     if ( roar_vio_dstr_init_defaults_c(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def, O_WRONLY) == -1 ) 
     477      return -1; 
     478 
    466479     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_DECnet, SOCK_STREAM, c->def) == -1 ) 
    467480      return -1; 
     
    472485     next->def = &(next->store_def); 
    473486 
     487     if ( roar_vio_dstr_init_defaults_c(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def, O_WRONLY) == -1 ) 
     488      return -1; 
     489 
    474490     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_INET, SOCK_STREAM, c->def) == -1 ) 
    475491      return -1; 
     
    478494     c->need_vio = 0; 
    479495     next->def = &(next->store_def); 
     496 
     497     if ( roar_vio_dstr_init_defaults_c(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def, O_WRONLY) == -1 ) 
     498      return -1; 
    480499 
    481500     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_INET, SOCK_DGRAM, c->def) == -1 ) 
     
    487506     next->def = &(next->store_def); 
    488507 
     508     if ( roar_vio_dstr_init_defaults_c(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def, O_WRONLY) == -1 ) 
     509      return -1; 
     510 
    489511     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_INET6, SOCK_STREAM, c->def) == -1 ) 
    490512      return -1; 
     
    493515     c->need_vio = 0; 
    494516     next->def = &(next->store_def); 
     517 
     518     if ( roar_vio_dstr_init_defaults_c(next->def, ROAR_VIO_DEF_TYPE_SOCKET, c->def, O_WRONLY) == -1 ) 
     519      return -1; 
    495520 
    496521     if ( roar_vio_socket_init_dstr_def(next->def, c->dst, AF_INET6, SOCK_DGRAM, c->def) == -1 ) 
     
    524549                    next->def, next->def == NULL ? -1 : next->def->type); 
    525550   if ( next->def != NULL ) { 
    526     ROAR_DBG("roar_vio_dstr_set_defaults(*): i=%i, c->type=0x%.4x(%s): next->def->o_flags=%i", i, 
     551    ROAR_WARN("roar_vio_dstr_set_defaults(*): i=%i, c->type=0x%.4x(%s): next->def->o_flags=%i", i, 
    527552                     c->type & 0xFFFF, roar_vio_dstr_get_name(c->type), 
    528553                     next->def->o_flags); 
     
    582607 
    583608 for (i = 0; (c = &chain[i])->type != ROAR_VIO_DSTR_OBJT_EOL; i++) { 
    584   ROAR_DBG("roar_vio_dstr_build_chain(*): i=%i, c->type=0x%.4x(%s): need_vio=%i", i, 
    585                    c->type & 0xFFFF, roar_vio_dstr_get_name(c->type), c->need_vio); 
     609  ROAR_DBG("roar_vio_dstr_build_chain(*): i=%i, c->type=0x%.4x(%s): need_vio=%i, def->o_flags=%i", i, 
     610                   c->type & 0xFFFF, roar_vio_dstr_get_name(c->type), c->need_vio, c->def->o_flags); 
    586611 
    587612  if ( c->need_vio ) { 
     
    625650    case ROAR_VIO_DSTR_OBJT_HTTP10: 
    626651    case ROAR_VIO_DSTR_OBJT_HTTP11: 
    627       if ( roar_vio_open_proto(tc, prev, c->dst, ROAR_VIO_PROTO_P_HTTP, i == 0 ? NULL : chain[i-1].def) == -1 ) { 
     652      if ( roar_vio_open_proto(tc, prev, c->dst, ROAR_VIO_PROTO_P_HTTP, c->def) == -1 ) { 
    628653       _ret(-1); 
    629654      } 
     
    631656    case ROAR_VIO_DSTR_OBJT_GOPHER: 
    632657    case ROAR_VIO_DSTR_OBJT_GOPHER_PLUS: 
    633       if ( roar_vio_open_proto(tc, prev, c->dst, ROAR_VIO_PROTO_P_GOPHER, i == 0 ? NULL : chain[i-1].def) == -1 ) { 
     658      if ( roar_vio_open_proto(tc, prev, c->dst, ROAR_VIO_PROTO_P_GOPHER, c->def) == -1 ) { 
    634659       _ret(-1); 
    635660      } 
  • libroar/vio_proto.c

    r1352 r1353  
    5050 } 
    5151 
     52 if ( dstr == NULL ) 
     53  dstr = "//"; 
     54 
    5255 if ( roar_vio_dstr_init_defaults(def, ROAR_VIO_DEF_TYPE_SOCKET, O_RDWR, 0644) == -1 ) 
    5356  return -1; 
     
    6265  *ed = 0; 
    6366 
     67 ROAR_WARN("roar_vio_proto_init_def(*): def->o_flags=%i", def->o_flags); 
     68 
    6469 ret = roar_vio_socket_init_dstr_def(def, dstr, -1, SOCK_STREAM, def); 
     70 
     71 ROAR_WARN("roar_vio_proto_init_def(*): def->o_flags=%i", def->o_flags); 
    6572 
    6673 if ( ed != NULL ) 
     
    7784 ROAR_WARN("roar_vio_open_proto(calls=%p, dst=%p, dstr='%s', proto=%i, odef=%p) = ?", calls, dst, dstr, proto, odef); 
    7885 
    79  if ( calls == NULL || dst == NULL || dstr == NULL ) 
     86 if ( calls == NULL || dst == NULL || odef == NULL ) 
    8087  return -1; 
    8188 
     89 ROAR_WARN("roar_vio_open_proto(*): odef->o_flags=%i", odef->o_flags); 
    8290 ROAR_DBG("roar_vio_open_proto(*) = ?"); 
    8391 
     
    8593  return -1; 
    8694 
    87  dstr += 2; 
    88  host  = dstr; 
     95 ROAR_DBG("roar_vio_open_proto(*) = ?"); 
    8996 
    90  if ( (tmp = strstr(dstr, "/")) == NULL ) 
    91   return -1; 
     97 if ( dstr != NULL ) { 
     98  dstr += 2; 
     99  host  = dstr; 
    92100 
    93  *tmp++ = 0; 
    94  dstr   = tmp; 
     101  if ( (tmp = strstr(dstr, "/")) == NULL ) 
     102   return -1; 
    95103 
    96  if ( (tmp = strstr(dstr, "#")) != NULL ) 
    97   *tmp = 0; 
     104  *tmp++ = 0; 
     105  dstr   = tmp; 
     106 
     107  if ( (tmp = strstr(dstr, "#")) != NULL ) 
     108   *tmp = 0; 
     109 } else { 
     110  ROAR_DBG("roar_vio_open_proto(*): no dstr!, odef->type=%i", odef->type); 
     111  if ( odef->type == ROAR_VIO_DEF_TYPE_FILE ) { 
     112   dstr = odef->d.file; 
     113   host = "localhost"; 
     114 
     115   for (; *dstr == '/'; dstr++); 
     116 
     117  } else if ( odef->type == ROAR_VIO_DEF_TYPE_SOCKET ) { 
     118   dstr = ""; // index document 
     119   host = odef->d.socket.host; 
     120  } else { 
     121   return -1; 
     122  } 
     123 } 
    98124 
    99125 ROAR_DBG("roar_vio_open_proto(*) = ?"); 
     126 ROAR_WARN("roar_vio_open_proto(*): proto=%i, host='%s', file='%s'", proto, host, dstr); 
    100127 
    101128 switch (proto) { 
  • libroar/vio_socket.c

    r1350 r1353  
    230230   return -1; 
    231231 
    232   memcpy(def, odef, sizeof(struct roar_vio_defaults)); 
     232  if ( def != odef ) 
     233   memcpy(def, odef, sizeof(struct roar_vio_defaults)); 
     234 
    233235  return 0; 
    234236 } 
Note: See TracChangeset for help on using the changeset viewer.