summaryrefslogtreecommitdiffstats
path: root/opensuse/core/tdebase/ksysguardd-openslp.diff
diff options
context:
space:
mode:
Diffstat (limited to 'opensuse/core/tdebase/ksysguardd-openslp.diff')
-rw-r--r--opensuse/core/tdebase/ksysguardd-openslp.diff288
1 files changed, 288 insertions, 0 deletions
diff --git a/opensuse/core/tdebase/ksysguardd-openslp.diff b/opensuse/core/tdebase/ksysguardd-openslp.diff
new file mode 100644
index 000000000..4cb0e3795
--- /dev/null
+++ b/opensuse/core/tdebase/ksysguardd-openslp.diff
@@ -0,0 +1,288 @@
+--- ksysguard/configure.in.in
++++ ksysguard/configure.in.in
+@@ -45,5 +45,34 @@
+ AC_SUBST(LIBHOSTS)
+ AC_SUBST(LIBSENSORS)
+
++# check for SLP
++dnl define the configure option that disables slp
++AC_ARG_ENABLE(slp, [ --disable-slp don't require libslp (ksysguard do not find daemons) ], with_slp=$enableval, with_slp=yes)
++if test "$with_slp" = "yes"; then
++AC_MSG_CHECKING(for SLP support)
++save_slptest_LIBS="$LIBS"
++save_slptest_LDFLAGS="$LDFLAGS"
++save_slptest_CPPFLAGS="$CPPFLAGS"
++LDFLAGS="$all_libraries $LDFLAGS"
++CPPFLAGS="$CPPFLAGS $all_includes"
++LIBS="-lslp"
++AC_TRY_LINK( [
++ #include <slp.h>
++ ],[
++ SLPOpen(0, SLP_FALSE, (SLPHandle*) 0);
++ ],[
++ AC_DEFINE(HAVE_SLP,1,[Define if SLP is available])
++ LIB_SLP="-lslp"
++ AC_MSG_RESULT(yes)
++ ],[
++ AC_MSG_RESULT(no)
++ LIB_SLP=""
++])
++CPPFLAGS=$save_slptest_CPPFLAGS
++LDFLAGS=$save_slptest_LDFLAGS
++LIBS=$save_slptest_LIBS
++fi
++AC_SUBST(LIB_SLP)
++
+ dnl Check for dell laptop support
+ AM_CONDITIONAL(supports_i8k, test -f /proc/i8k)
+--- ksysguard/example/ksysguarddrc
++++ ksysguard/example/ksysguarddrc
+@@ -1,5 +1,8 @@
+ # /etc/ksysguardd.conf
+
++# refresh SLP registration
++SLPrefresh=1800
++
+ # LogFiles: the list of all available logfiles
+ LogFiles=messages:/var/log/messages,kern:/var/log/kern.log,daemon:/var/log/daemon.log
+
+--- ksysguard/gui/Makefile.am
++++ ksysguard/gui/Makefile.am
+@@ -31,7 +31,7 @@
+ ksysguard_LDADD = \
+ ksgrd/libksgrd.la \
+ SensorDisplayLib/libsensordisplays.la \
+- $(LIB_KDEUI) $(LIB_KIO) $(LIB_KDNSSD)
++ $(LIB_KDEUI) $(LIB_KIO) $(LIB_KDNSSD) $(LIB_SLP)
+ ksysguard_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+
+ kpm_SOURCES = kpm.c
+--- ksysguard/gui/ksysguard.cc
++++ ksysguard/gui/ksysguard.cc
+@@ -34,6 +34,8 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+
++#include <qregexp.h>
++
+ #include <kaboutdata.h>
+ #include <kaction.h>
+ #include <kapplication.h>
+@@ -280,6 +282,46 @@
+ mSplitter->setSizes( sizes );
+ }
+
++#if HAVE_SLP
++
++SLPBoolean MySLPSrvURLCallback( SLPHandle phslp,
++ const char* srvurl,
++ unsigned short lifetime,
++ SLPError errcode,
++ void* cookie )
++{
++ QRegExp r("^service:ksysguardd.kde://(\\w+):(.*)$");
++
++ if ( r.search(srvurl) >= 0 ){
++ QString host( r.cap(1) );
++ int port = r.cap(2).toInt() ;
++
++ if ( !host.isEmpty() && port > 0 )
++ KSGRD::SensorMgr->engage( host, "", "", port );
++ };
++ return SLP_TRUE;
++}
++
++void TopLevel::rescanSLP( bool enableErrorPopup )
++{
++ SLPHandle phslp;
++ SLPError result;
++ result = SLPOpen( NULL, SLP_FALSE, &phslp);
++ if (result != SLP_OK)
++ qWarning( "SLPOpen failed" ); // TODO: KMessagebox
++ else {
++ result = SLPFindSrvs( phslp,
++ "service:ksysguardd.kde",
++ "", // TODO: Scope selector
++ "", // all services
++ MySLPSrvURLCallback,
++ this );
++ if (result != SLP_OK)
++ qWarning( "unable to register SLP service" ); // TODO: KMessageBox
++ }
++}
++#endif
++
+ void TopLevel::initStatusBar()
+ {
+ KSGRD::SensorMgr->engage( "localhost", "", "ksysguardd" );
+@@ -363,6 +405,10 @@
+ KSGRD::SensorMgr->sendRequest( "localhost", "mem/swap/used",
+ (KSGRD::SensorClient*)this, 4 );
+ }
++
++#if HAVE_SLP
++ rescanSLP();
++#endif
+ }
+
+ bool TopLevel::queryClose()
+--- ksysguard/gui/ksysguard.h
++++ ksysguard/gui/ksysguard.h
+@@ -24,6 +24,8 @@
+ #ifndef KSG_KSYSGUARD_H
+ #define KSG_KSYSGUARD_H
+
++#include <config.h>
++
+ #include <qevent.h>
+
+ #include <dcopclient.h>
+@@ -34,6 +36,10 @@
+
+ #include <ksgrd/SensorClient.h>
+
++#if HAVE_SLP
++#include <slp.h>
++#endif
++
+ class KRecentFilesAction;
+ class KToggleAction;
+
+@@ -77,6 +83,9 @@
+ virtual void customEvent( QCustomEvent* );
+ virtual void timerEvent( QTimerEvent* );
+ virtual bool queryClose();
++#if HAVE_SLP
++ virtual void rescanSLP( bool enableErrorPopup = FALSE );
++#endif
+
+ protected slots:
+ void connectHost();
+--- ksysguard/ksysguardd/Makefile.am
++++ ksysguard/ksysguardd/Makefile.am
+@@ -31,5 +31,5 @@
+ bin_PROGRAMS = ksysguardd
+
+ ksysguardd_SOURCES = Command.c conf.c ksysguardd.c PWUIDCache.c
+-ksysguardd_LDFLAGS = $(all_libraries)
++ksysguardd_LDFLAGS = $(all_libraries) $(LIB_SLP)
+ ksysguardd_LDADD = $(top_builddir)/ksysguard/ksysguardd/$(UNAME)/libksysguardd.a ../CContLib/libccont.a -lkdefakes_nonpic $(LIBHOSTS) $(LIB_DNSSD) $(LIB_KINFO)
+--- ksysguard/ksysguardd/conf.c
++++ ksysguard/ksysguardd/conf.c
+@@ -56,6 +56,7 @@
+ char *begin, *token, *tmp;
+ ConfigLogFile *confLog;
+
++ confSLPrefresh = 0;
+ LogFileList = new_ctnr();
+ SensorList = new_ctnr();
+
+@@ -93,6 +94,10 @@
+ if ( line[ strlen( line ) - 1 ] == '\n' )
+ line[ strlen( line ) - 1 ] = '\0';
+
++ if ( !strncmp( line, "SLPrefresh=", 11 ) ) {
++ confSLPrefresh = atoi( line + 11 );
++ };
++
+ if ( !strncmp( line, "RegisterDomain",14) && (begin = strchr( line, '=' )) ) RegisterDomain=strdup(begin+1);
+
+ if ( !strncmp( line, "LogFiles", 8 ) && (begin = strchr( line, '=' )) ) {
+--- ksysguard/ksysguardd/conf.h
++++ ksysguard/ksysguardd/conf.h
+@@ -30,6 +30,8 @@
+
+ extern char* RegisterDomain;
+
++short confSLPrefresh;
++
+ void parseConfigFile( const char *filename );
+ void freeConfigFile();
+
+--- ksysguard/ksysguardd/ksysguardd.c
++++ ksysguard/ksysguardd/ksysguardd.c
+@@ -43,6 +43,10 @@
+ #ifdef HAVE_DNSSD
+ #include <dns_sd.h>
+ #endif
++#if HAVE_SLP
++#include <slp.h>
++#endif
++
+ #include "modules.h"
+
+ #include "ksysguardd.h"
+@@ -348,6 +352,62 @@
+ #endif
+
+
++#if HAVE_SLP
++void mySLPRegReport(SLPHandle hslp, SLPError errcode, void *cookie)
++{
++ if (errcode)
++ log_error( "SLP (de)registration error" );
++}
++
++void register_slp();
++
++void refresh_slp()
++{
++ register_slp();
++}
++
++void register_slp()
++{
++ SLPHandle phslp;
++ SLPError result;
++ int slp_timeout = confSLPrefresh;
++ struct sigaction act, oact;
++
++ if ( slp_timeout < 120 ) /* do not bomb the slp server with wrong config */
++ slp_timeout = 120 ;
++ if ( slp_timeout > SLP_LIFETIME_MAXIMUM )
++ slp_timeout = SLP_LIFETIME_MAXIMUM;
++
++ result = SLPOpen( NULL, SLP_FALSE, &phslp);
++ if (result != SLP_OK)
++ log_error( "SLPOpen failed" );
++ else {
++ char hostname[1024];
++ char SLPServiceUrl[2048];
++ gethostname( hostname, 1023 );
++ snprintf( SLPServiceUrl, 1023, "service:ksysguardd.kde://%s:%i", hostname, SocketPort );
++
++ result = SLPReg( phslp,
++ SLPServiceUrl,
++ slp_timeout,
++ 0,
++ "",
++ SLP_TRUE,
++ mySLPRegReport,
++ 0 );
++
++ if (result != SLP_OK)
++ log_error( "unable to register SLP service" );
++ SLPClose( phslp );
++
++ act.sa_handler = refresh_slp;
++ if (0 != sigaction(SIGALRM, &act, &oact))
++ log_error("Error establishing signal handler for SLP");
++ alarm(slp_timeout - 15);
++ }
++}
++#endif
++
+ int createServerSocket()
+ {
+ int i = 1;
+@@ -402,6 +462,10 @@
+ ServiceSocket = DNSServiceRefSockFD(Ref);
+ #endif
+
++#if HAVE_SLP
++ if ( BindToAllInterfaces )
++ register_slp();
++#endif
+ return newSocket;
+ }
+