Changeset 501:985357040570 in roaraudio for libroar/socket.c


Ignore:
Timestamp:
08/14/08 17:51:30 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

ha! It's working: RoarAudio via DECnet! :), needs cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/socket.c

    r442 r501  
    139139 //unsigned int host_div = 0; 
    140140 int (*mode_func)(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) = connect; // default is to connect 
     141#ifdef ROAR_HAVE_LIBDNET 
     142 char obj[80]; 
     143 char * del; 
     144#endif 
    141145 
    142146 if ( mode == MODE_LISTEN ) 
     
    149153  } else if ( strcmp(host, "+fork") == 0 ) { 
    150154   type = ROAR_SOCKET_TYPE_FORK; 
     155  } else if ( strstr(host, "::") != NULL ) { 
     156   type = ROAR_SOCKET_TYPE_DECNET; 
    151157  } 
    152158 } 
     
    155161 ROAR_DBG("roar_socket_open(*): type=%s, host='%s', port=%i", 
    156162             type == ROAR_SOCKET_TYPE_UNIX ? "UNIX" : "INET", host, port); 
     163 
     164 if ( type == ROAR_SOCKET_TYPE_DECNET ) { 
     165  if ( mode == MODE_LISTEN ) { 
     166   return -1; // listen sockets on DECnet are not supportet at the moment 
     167  } else { 
     168#ifdef ROAR_HAVE_LIBDNET 
     169   // There is nothing wrong in this case to use dnet_conn() so we do. 
     170   del = strstr(host, "::"); 
     171   *del = 0; 
     172 
     173   if ( *(del+2) == '#' ) { // assume we have node::#num 
     174    port = atoi(del+2); 
     175   } 
     176 
     177   if ( port ) { 
     178    sprintf(obj, "%i", port); // no need for snprintf() as dec(port) is smaller than obj[] 
     179   } else { 
     180    *obj = 0; 
     181    strncat(obj, del+2, 79); 
     182   } 
     183 
     184   fh = dnet_conn(host, obj, SOCK_STREAM, 0 ,0 ,0 , 0); 
     185   *del = ':'; 
     186   return fh; 
     187#else 
     188   return -1; // no decnet support 
     189#endif 
     190  } 
     191 } 
    157192 
    158193 memset(&socket_addr   , 0, sizeof(socket_addr)); 
     
    348383} 
    349384 
     385#if 0 
     386#ifdef ROAR_HAVE_LIBDNET 
     387int roar_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) { 
     388 struct sockaddr_dn sockaddr_d, * sockaddr_p = &sockaddr_d; 
     389 socklen_t len = *addrlen; 
     390 int r; 
     391 
     392 if ( len < sizeof(struct sockaddr_dn) ) { 
     393  len = sizeof(struct sockaddr_dn); 
     394  r = accept(sockfd, (struct sockaddr *) sockaddr_p, &len); 
     395 
     396  memcpy((void*)addr, (void*) sockaddr_p, len > *addrlen ? *addrlen : len); 
     397 
     398  if ( len < *addrlen ) 
     399   *addrlen = len; 
     400 
     401 } else { 
     402  r = accept(sockfd, addr, addrlen); 
     403  sockaddr_p = (struct sockaddr_dn *) addr; 
     404  len = *addrlen; 
     405 } 
     406 
     407 if ( r != -1 ) { 
     408  // do dnet_accept(), but it does nothing at the moment. 
     409 } 
     410 
     411 return r; 
     412} 
     413#endif 
     414#endif 
     415 
    350416//ll 
Note: See TracChangeset for help on using the changeset viewer.