/* This file is part of GNUnet. (C) 2005 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /** * @file src/plugins/daemon/daemon.c * @brief code for gnunet-gtk gnunetd interaction * @author Christian Grothoff */ #include "platform.h" #include "gnunetgtk_common.h" static void doUpdateMenus(void * arg) { int ret = *(int*) arg; static GtkWidget * killEntry = NULL; static GtkWidget * launchEntry = NULL; static GtkWidget * statsEntryYes = NULL; static GtkWidget * statsEntryNo = NULL; static int once = 1; static int isLocal; char * host; if (once) { once = 0; killEntry = glade_xml_get_widget(getMainXML(), "stopDaemon"); launchEntry = glade_xml_get_widget(getMainXML(), "startDaemon"); statsEntryYes = glade_xml_get_widget(getMainXML(), "statusPixmapYes"); statsEntryNo = glade_xml_get_widget(getMainXML(), "statusPixmapNo"); host = getConfigurationString("NETWORK", "HOST"); if ( (host == NULL) || (strcmp(host, "localhost")==0) ) isLocal = TRUE; else isLocal = FALSE; FREENONNULL(host); } if (ret == SYSERR) { gtk_widget_hide(statsEntryYes); gtk_widget_show_all(statsEntryNo); gtk_widget_set_sensitive(killEntry, FALSE); gtk_widget_set_sensitive(launchEntry, (TRUE & isLocal) ); } else { gtk_widget_hide(statsEntryNo); gtk_widget_show_all(statsEntryYes); gtk_widget_set_sensitive(killEntry, TRUE); gtk_widget_set_sensitive(launchEntry, FALSE); } } static void cronCheckDaemon(void * dummy) { static int last = 42; int ret; ret = checkGNUnetDaemonRunning(); if (ret != last) { last = ret; gtkSaveCall(&doUpdateMenus, &ret); } } /** * Launch gnunetd w/ checks */ void on_startDaemon_clicked(GtkWidget * widget, gpointer data) { GtkWidget * launchEntry; launchEntry = glade_xml_get_widget(getMainXML(), "startDaemon"); gtk_widget_set_sensitive(launchEntry, FALSE); if (OK == checkGNUnetDaemonRunning() ) { cronCheckDaemon(NULL); return; } else { addLogEntry(_("Launching gnunetd...")); if (OK == startGNUnetDaemon(YES)) { addLogEntry(_("Launched gnunetd")); } else { addLogEntry(_("Launching gnunetd failed")); } } } /** * Kill gnunetd */ void on_stopDaemon_clicked(GtkWidget * widget, gpointer data) { GtkWidget * killEntry = NULL; killEntry = glade_xml_get_widget(getMainXML(), "stopDaemon"); gtk_widget_set_sensitive(killEntry, FALSE); if (OK == checkGNUnetDaemonRunning() ) { if (OK != stopGNUnetDaemon()) { guiMessage(_("Error requesting shutdown by gnunetd.")); } else { addLogEntry(_("Terminating gnunetd...")); } } cronCheckDaemon(NULL); } void init_daemon() { GtkWidget * tab; tab = glade_xml_get_widget(getMainXML(), "daemonScrolledWindow"); gtk_widget_show(tab); addCronJob(&cronCheckDaemon, 0, 15 * cronSECONDS, NULL); } void done_daemon() { delCronJob(&cronCheckDaemon, 15 * cronSECONDS, NULL); } /* end of daemon.c */