Changeset 501:985357040570 in roaraudio


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

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/libroar.h

    r474 r501  
    1212#include <netinet/in.h> 
    1313#include <netinet/ip.h> 
     14#ifdef ROAR_HAVE_LIBDNET 
     15#include <netdnet/dn.h> 
     16#include <netdnet/dnetdb.h> 
     17#endif 
    1418 
    1519#include "basic.h" 
  • include/libroar/socket.h

    r378 r501  
    1919#define ROAR_SOCKET_TYPE_UDP  5 
    2020#define ROAR_SOCKET_TYPE_GENSTR 6 /* generic stream: TCP or UNIX */ 
     21#define ROAR_SOCKET_TYPE_DECNET 7 /* DECnet */ 
    2122 
    2223#define ROAR_SOCKET_TYPE_MAX  4 
     
    4647int roar_socket_open_socks4a(int mode, int fh, char * host, int port); 
    4748 
     49#if 0 
     50#ifdef ROAR_HAVE_LIBDNET 
     51int roar_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 
     52#else 
     53#define roar_accept accept 
     54#endif 
     55#endif 
     56#define roar_accept accept 
     57 
    4858#endif 
    4959 
  • libroar/Makefile

    r485 r501  
     1include ../Makefile.conf 
     2 
    13TARGETS=libroar.so 
    24OBJS=libroar.o basic.o stream.o simple.o auth.o socket.o ctl.o buffer.o convert.o poly.o meta.o file.o midi.o acl.o 
     
    57INCLUDE = -I../include -I../include/libroar 
    68CFLAGS  = -g -Wall -O2 $(DEFINES) $(INCLUDE) -fPIC 
    7 LDFLAGS = -g -shared $(LDPATH) -lm 
     9LDFLAGS = -g -shared $(LDPATH) $(lib_dnet) -lm 
    810 
    911all: ${TARGETS} 
  • libroar/basic.c

    r448 r501  
    99 int port = 0; 
    1010 int fh = -1; 
     11 int is_decnet = 0; 
    1112 
    1213 if ( server == NULL && (roar_server = getenv("ROAR_SERVER")) != NULL ) 
     
    3536 } else { 
    3637  /* connect via (char*)server */ 
    37   for (i = 0; server[i] != 0; i++) { 
    38    if ( server[i] == ':' ) { 
    39     port = atoi(server+i+1); 
    40     server[i] = 0; 
    41     break; 
     38  // find a port: 
     39  if ( *server != '/' ) { // don't test AF_UNIX sockets for ports 
     40   for (i = 0; server[i] != 0; i++) { 
     41    if ( server[i] == ':' ) { 
     42     if ( server[i+1] == ':' ) { // DECnet, leave unchanged 
     43      is_decnet = 1; 
     44      break; 
     45     } 
     46 
     47     port = atoi(server+i+1); 
     48     server[i] = 0; 
     49     break; 
     50    } 
    4251   } 
    4352  } 
    4453 
    45   if ( port ) { 
     54  if ( port || is_decnet ) { 
    4655   fh = roar_socket_connect(server, port); 
    4756   // restore the original string 
     
    144153int roar_recv_message (struct roar_connection * con, struct roar_message * mes, char ** data) { 
    145154 char buf[_ROAR_MESS_BUF_LEN]; 
     155/* 
     156#ifdef ROAR_HAVE_LIBDNET 
     157 int len; 
     158#endif 
     159*/ 
    146160 
    147161 ROAR_DBG("roar_recv_message(*): try to get a response form the server..."); 
     
    150164  *data = NULL; 
    151165 
     166/* 
     167#ifdef ROAR_HAVE_LIBDNET 
     168 if ( (len = read(con->fh, buf, _ROAR_MESS_BUF_LEN)) != _ROAR_MESS_BUF_LEN ) { 
     169  if ( len != 0 ) 
     170   return -1; 
     171 
     172  usleep(2000); 
     173 
     174  if ( read(con->fh, buf, _ROAR_MESS_BUF_LEN) != _ROAR_MESS_BUF_LEN ) 
     175   return -1; 
     176  } 
     177#else 
     178*/ 
    152179 if ( read(con->fh, buf, _ROAR_MESS_BUF_LEN) != _ROAR_MESS_BUF_LEN ) 
    153180  return -1; 
     181/* 
     182#endif 
     183*/ 
    154184 
    155185 ROAR_DBG("roar_recv_message(*): Got a header"); 
  • 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 
  • roard/clients.c

    r498 r501  
    9595 
    9696int clients_set_fh    (int id, int    fh) { 
     97#ifdef ROAR_HAVE_LIBDNET 
     98 struct sockaddr_dn sockaddr_d; 
     99 socklen_t len = sizeof(struct sockaddr_dn); 
     100#endif 
     101 
    97102 if ( g_clients[id] == NULL ) 
    98103  return -1; 
    99104 
    100105 g_clients[id]->fh = fh; 
     106 
     107#ifdef ROAR_HAVE_LIBDNET 
     108 if ( getsockname(fh, (struct sockaddr *)&sockaddr_d, &len) != -1 ) { 
     109  if ( sockaddr_d.sdn_family == AF_DECnet ) 
     110   roar_socket_nonblock(fh, ROAR_SOCKET_BLOCK); 
     111 } 
     112#endif 
    101113 
    102114 return 0; 
  • roard/roard.c

    r450 r501  
    5555        " --no-listen           - Do not listen for new clients (only usefull for relaing)\n" 
    5656        " --client-fh           - Comunicate with a client over this handle\n" 
    57         "                         (only usefull for relaing)\n", 
     57        "                         (only usefull for relaing)\n" 
     58        " --close-fh            - Closes the given fh\n", 
    5859        ROAR_DEFAULT_SOCKGRP 
    5960       ); 
     
    228229    return 1; 
    229230   } 
     231  } else if ( strcmp(k, "--close-fh") == 0 ) { 
     232   close(atoi(argv[++i])); 
    230233 
    231234  } else { 
Note: See TracChangeset for help on using the changeset viewer.