Changeset 1993:735317524c03 in roaraudio


Ignore:
Timestamp:
06/15/09 16:25:50 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added support to *REGISTER* to SLP, need to write code to deregister ;)

Location:
roard
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • roard/Makefile

    r1974 r1993  
    1616CODECLIBS = $(lib_vorbisfile) $(lib_vorbisenc) $(lib_vorbis) $(lib_celt) $(lib_fishsound) $(lib_speex) $(lib_speexdsp) 
    1717CONTLIBS  = $(lib_oggz) $(lib_sndfile) $(lib_ogg) 
    18 LIBS      = -lroarlight -lroarmidi -lroardsp -lroar $(DRVLIBS) $(CODECLIBS) $(CONTLIBS) $(lib_m) $(NETLIBS) 
     18PROTOLIBS = -lslp 
     19LIBS      = -lroarlight -lroarmidi -lroardsp -lroar $(DRVLIBS) $(CODECLIBS) $(CONTLIBS) $(PROTOLIBS) $(lib_m) $(NETLIBS) 
    1920 
    2021all: ${TARGETS} 
  • roard/include/roard.h

    r1964 r1993  
    5050#include <sys/time.h> 
    5151#include <time.h> 
     52#endif 
     53 
     54#ifdef ROAR_HAVE_LIBSLP 
     55#include <slp.h> 
    5256#endif 
    5357 
  • roard/roard.c

    r1991 r1993  
    105105        " -b  --bind            - IP/Hostname to bind to\n" 
    106106        "     --sock            - Filename for UNIX Domain Socket\n" 
     107#ifdef ROAR_HAVE_LIBSLP 
     108        "     --slp             - Enable OpenSLP support\n" 
     109#endif 
    107110        " -G  GROUP             - Sets the group for the UNIX Domain Socket, (default: %s)\n" 
    108111        "                         You need the permittions to change the GID\n" 
     
    360363} 
    361364 
     365 
     366// SLP: 
     367void register_slp_callback(SLPHandle hslp, SLPError errcode, void * cookie) { 
     368 /* return the error code in the cookie */ 
     369 *(SLPError*)cookie = errcode; 
     370} 
     371 
     372int register_slp (int unreg, char * sockname) { 
     373#ifdef ROAR_HAVE_LIBSLP 
     374 static int regged = 0; 
     375 static char * sn = NULL; 
     376 SLPError err; 
     377 SLPError callbackerr; 
     378 SLPHandle hslp; 
     379 char addr[1024]; 
     380 char attr[1024] = ""; 
     381 
     382 if ( sockname != NULL ) 
     383  sn = sockname; 
     384 
     385 snprintf(addr, sizeof(addr), "service:mixer.fellig:roar://%s", sockname); 
     386 
     387 err = SLPOpen("en", SLP_FALSE, &hslp); 
     388 
     389 if (err != SLP_OK) { 
     390  ROAR_ERR("Error opening slp handle: Error #%i", err); 
     391  return -1; 
     392 } 
     393 
     394 if (!unreg) { 
     395  /* Register a service with SLP */ 
     396  err = SLPReg(hslp, 
     397               addr, 
     398               SLP_LIFETIME_MAXIMUM, 
     399               0, 
     400               attr, 
     401               SLP_TRUE, 
     402               register_slp_callback, 
     403               &callbackerr); 
     404 
     405  /* err may contain an error code that occurred as the slp library    */ 
     406  /* _prepared_ to make the call.                                     */ 
     407  if ( (err != SLP_OK) || (callbackerr != SLP_OK) ) { 
     408   ROAR_ERR("Error registering service with slp: Error #%i", err); 
     409   return -1; 
     410  } 
     411 
     412  /* callbackerr may contain an error code (that was assigned through */ 
     413  /* the callback cookie) that occurred as slp packets were sent on    */ 
     414  /* the wire */ 
     415  if (callbackerr != SLP_OK) { 
     416   ROAR_ERR("Error registering service with slp: Error #%i", callbackerr); 
     417   return -1; 
     418  } 
     419 } else if ( unreg && regged ) { 
     420 } 
     421 
     422 SLPClose(hslp); 
     423 return 0; 
     424#else 
     425 return -1; 
     426#endif 
     427} 
     428 
     429 
     430// MAIN: 
     431 
    362432#ifdef ROAR_HAVE_MAIN_ARGS 
    363433int main (int argc, char * argv[]) { 
     
    405475 int    sock_type = ROAR_SOCKET_TYPE_UNKNOWN; 
    406476#endif 
     477#ifdef ROAR_HAVE_LIBSLP 
     478 int    reg_slp   = 0; 
     479#endif 
    407480#ifdef ROAR_HAVE_CHROOT 
    408481 char * chrootdir = NULL; 
     
    686759    return 1; 
    687760#endif 
     761#endif 
     762 
     763  } else if ( strcmp(k, "--slp") == 0 ) { 
     764#ifdef ROAR_HAVE_LIBSLP 
     765   reg_slp = 1; 
     766#else 
     767    ROAR_ERR("No OpenSLP support compiled in!"); 
     768    return 1; 
    688769#endif 
    689770 
     
    9291010#endif 
    9301011 
     1012 // Register with OpenSLP: 
     1013 if ( reg_slp ) { 
     1014  register_slp(0, server); 
     1015 } 
     1016 
    9311017 // start main loop... 
    9321018 main_loop(drvid, drvinst, &sa, sysclocksync); 
     
    9411027 
    9421028void cleanup_listen_socket (int terminate) { 
     1029 // Deregister from SLP: 
     1030 register_slp(1, NULL); 
    9431031 
    9441032#ifdef ROAR_SUPPORT_LISTEN 
Note: See TracChangeset for help on using the changeset viewer.