Changeset 1354:fb6e3f4bbcf6 in roaraudio


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

got decnet:// working

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio_socket.h

    r1335 r1354  
    5151 
    5252int     roar_vio_socket_init_unix_def     (struct roar_vio_defaults * def, char * path); 
     53 
     54int     roar_vio_socket_init_decnetnode_def(struct roar_vio_defaults * def); 
    5355int     roar_vio_socket_init_decnet_def   (struct roar_vio_defaults * def, char * node, int object, char * objname); 
    5456 
  • libroar/vio_socket.c

    r1353 r1354  
    8383    len = sizeof(struct sockaddr_dn); 
    8484 
    85     return -1; 
     85    if ( roar_vio_socket_init_decnetnode_def(def) == -1 ) 
     86     return -1; 
     87 
     88    switch (def->d.socket.type) { 
     89     case SOCK_STREAM: 
     90       fh = roar_socket_new_decnet_stream(); 
     91      break; 
     92     default: 
     93       return -1; 
     94    } 
    8695   break; 
    8796#endif 
     
    223232#endif 
    224233 
     234 ROAR_DBG("roar_vio_socket_init_dstr_def(*) = ?"); 
     235 
    225236 if ( *dstr == 0 ) { 
    226237  if ( roar_vio_socket_conv_def(odef, hint) == -1 ) 
     
    237248 
    238249 for (; *dstr == '/'; dstr++); 
     250 
     251 ROAR_DBG("roar_vio_socket_init_dstr_def(*) = ?"); 
    239252 
    240253 switch (hint) { 
     
    258271#ifdef ROAR_HAVE_LIBDNET 
    259272  case AF_DECnet: 
    260     return -1; 
     273    ROAR_DBG("roar_vio_socket_init_dstr_def(*) = ?"); 
     274    host = dstr; 
     275 
     276    if ( type != SOCK_STREAM ) 
     277     return -1; 
     278 
     279    if ( (dstr = strstr(dstr, "::")) == NULL ) { 
     280     if ( roar_vio_socket_conv_def(odef, AF_DECnet) == -1 ) 
     281      return -1; 
     282 
     283     return -1; 
     284//     return roar_vio_socket_init_decnet_def(def, host, -1, dstr); 
     285    } else { 
     286     *dstr  = 0; 
     287      dstr += 2; 
     288     return roar_vio_socket_init_decnet_def(def, host, -1, dstr); 
     289    } 
    261290   break; 
    262291#endif 
     
    391420 
    392421// AF_DECnet: 
     422int     roar_vio_socket_init_decnetnode_def(struct roar_vio_defaults * def) { 
     423 char               * node; 
     424 char               * ed; 
     425 struct nodeent     * ne; 
     426 
     427 if ( def == NULL ) 
     428  return -1; 
     429 
     430 if ( (node = def->d.socket.host) == NULL ) 
     431  return -1; 
     432 
     433 if ( (ed = strstr(node, "/")) != NULL ) 
     434  *ed = 0; 
     435 
     436 if ( (ne = getnodebyname(node)) == NULL ) { 
     437  ROAR_ERR("roar_vio_socket_init_decnetnode_def(*): Can\'t resolve node name '%s'", node); 
     438  if ( ed != NULL ) *ed = '/'; 
     439  return -1; 
     440 } 
     441 
     442 memcpy(&(def->d.socket.sa.dn.sdn_add.a_addr), ne->n_addr, 2); 
     443 
     444 if ( ed != NULL ) *ed = '/'; 
     445 
     446 
     447 return 0; 
     448} 
     449 
    393450int     roar_vio_socket_init_decnet_def   (struct roar_vio_defaults * def, char * node, int object, char * objname) { 
    394451#ifdef ROAR_HAVE_LIBDNET 
     452 struct sockaddr_dn * dn; 
     453 
    395454 if ( def == NULL ) 
    396455  return -1; 
     
    402461  object = roar_vio_socket_get_port(objname, AF_DECnet, SOCK_STREAM); 
    403462 
    404  if ( object == -1 ) 
    405   return -1; 
    406  
    407  return -1; 
     463 if ( object == -1 ) { 
     464  if ( objname == NULL ) { 
     465   return -1; 
     466  } else { 
     467   object = 0; 
     468  } 
     469 } 
     470 
     471 if ( roar_vio_socket_init_socket_def(def, AF_DECnet, SOCK_STREAM) == -1 ) 
     472  return -1; 
     473 
     474 def->d.socket.host = node; 
     475 dn                 = &(def->d.socket.sa.dn); 
     476 dn->sdn_flags      = 0; 
     477 dn->sdn_objnum     = object; 
     478 dn->sdn_nodeaddrl  = 2; 
     479 
     480 if ( objname == NULL ) { 
     481  dn->sdn_objnamel   = 0; 
     482 } else { 
     483  dn->sdn_objnamel   = strlen(objname); 
     484  if ( dn->sdn_objnamel > DN_MAXOBJL ) 
     485   dn->sdn_objnamel  = DN_MAXOBJL; 
     486 
     487  memcpy(&(dn->sdn_objname), objname, dn->sdn_objnamel); 
     488 } 
     489 
     490 return 0; 
    408491#else 
    409492 return -1; 
Note: See TracChangeset for help on using the changeset viewer.