gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r3964 - in gnunet-gtk: . src/plugins/daemon


From: grothoff
Subject: [GNUnet-SVN] r3964 - in gnunet-gtk: . src/plugins/daemon
Date: Sun, 17 Dec 2006 16:18:24 -0800 (PST)

Author: grothoff
Date: 2006-12-17 16:18:20 -0800 (Sun, 17 Dec 2006)
New Revision: 3964

Modified:
   gnunet-gtk/gnunet-gtk.glade
   gnunet-gtk/src/plugins/daemon/Makefile.am
   gnunet-gtk/src/plugins/daemon/daemon.c
Log:
fixing Mantis 1088

Modified: gnunet-gtk/gnunet-gtk.glade
===================================================================
--- gnunet-gtk/gnunet-gtk.glade 2006-12-17 23:14:44 UTC (rev 3963)
+++ gnunet-gtk/gnunet-gtk.glade 2006-12-18 00:18:20 UTC (rev 3964)
@@ -476,6 +476,23 @@
                                          <property name="fill">False</property>
                                        </packing>
                                      </child>
+
+                                     <child>
+                                       <widget class="GtkImage" 
id="statusPixmapError">
+                                         <property agent="glademm" 
name="cxx_visibility">public</property>
+                                         <property 
name="stock">gtk-dialog-error</property>
+                                         <property 
name="icon_size">4</property>
+                                         <property name="xalign">0.5</property>
+                                         <property name="yalign">0.5</property>
+                                         <property name="xpad">0</property>
+                                         <property name="ypad">0</property>
+                                       </widget>
+                                       <packing>
+                                         <property name="padding">0</property>
+                                         <property 
name="expand">False</property>
+                                         <property name="fill">True</property>
+                                       </packing>
+                                     </child>
                                    </widget>
                                  </child>
 
@@ -510,6 +527,72 @@
                              </child>
 
                              <child>
+                               <widget class="GtkHBox" id="hbox67">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">0</property>
+
+                                 <child>
+                                   <widget class="GtkLabel" id="label152">
+                                     <property name="visible">True</property>
+                                     <property name="label" 
translatable="yes">_configuration file that should be used when starting 
gnunetd:</property>
+                                     <property 
name="use_underline">True</property>
+                                     <property 
name="use_markup">False</property>
+                                     <property 
name="justify">GTK_JUSTIFY_LEFT</property>
+                                     <property name="wrap">False</property>
+                                     <property 
name="selectable">False</property>
+                                     <property name="xalign">0.5</property>
+                                     <property name="yalign">0.5</property>
+                                     <property name="xpad">5</property>
+                                     <property name="ypad">0</property>
+                                     <property 
name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                                     <property name="width_chars">-1</property>
+                                     <property 
name="single_line_mode">False</property>
+                                     <property name="angle">0</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">False</property>
+                                     <property name="fill">False</property>
+                                   </packing>
+                                 </child>
+
+                                 <child>
+                                   <widget class="GtkFileChooserButton" 
id="gnunetdconfigFileChooserButton">
+                                     <property name="visible">True</property>
+                                     <property name="title" 
translatable="yes">Select gnunetd configuration File</property>
+                                     <property 
name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
+                                     <property 
name="local_only">True</property>
+                                     <property 
name="show_hidden">True</property>
+                                     <property 
name="do_overwrite_confirmation">False</property>
+                                     <property name="width_chars">-1</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHSeparator" id="hseparator1">
+                                 <property name="visible">True</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
                                <widget class="GtkFrame" id="frame1">
                                  <property name="visible">True</property>
                                  <property name="label_xalign">0</property>
@@ -572,6 +655,16 @@
                              </child>
 
                              <child>
+                               <widget class="GtkHSeparator" id="hseparator2">
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
                                <widget class="GtkFrame" id="daemonConfigFrame">
                                  <property name="label_xalign">0</property>
                                  <property name="label_yalign">0.5</property>
@@ -749,7 +842,7 @@
                                  <child>
                                    <widget class="GtkLabel" 
id="daemonConfigLabel">
                                      <property name="visible">True</property>
-                                     <property name="label" 
translatable="yes">&lt;b&gt;GNUnet daemon configuration&lt;/b&gt;</property>
+                                     <property name="label" 
translatable="yes">&lt;b&gt;GNUnet configuration&lt;/b&gt;</property>
                                      <property 
name="use_underline">False</property>
                                      <property 
name="use_markup">True</property>
                                      <property 
name="justify">GTK_JUSTIFY_LEFT</property>
@@ -775,6 +868,57 @@
                                  <property name="fill">False</property>
                                </packing>
                              </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox68">
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">0</property>
+
+                                 <child>
+                                   <widget class="GtkRadioButton" 
id="configureClientRadioButton">
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="label" 
translatable="yes">C_onfigure client</property>
+                                     <property 
name="use_underline">True</property>
+                                     <property 
name="relief">GTK_RELIEF_NORMAL</property>
+                                     <property 
name="focus_on_click">True</property>
+                                     <property name="active">True</property>
+                                     <property 
name="inconsistent">False</property>
+                                     <property 
name="draw_indicator">True</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">True</property>
+                                     <property name="fill">False</property>
+                                   </packing>
+                                 </child>
+
+                                 <child>
+                                   <widget class="GtkRadioButton" 
id="configureDaemonRadioButton">
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="label" 
translatable="yes">Configure da_emon</property>
+                                     <property 
name="use_underline">True</property>
+                                     <property 
name="relief">GTK_RELIEF_NORMAL</property>
+                                     <property 
name="focus_on_click">True</property>
+                                     <property name="active">False</property>
+                                     <property 
name="inconsistent">False</property>
+                                     <property 
name="draw_indicator">True</property>
+                                     <property 
name="group">configureClientRadioButton</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">True</property>
+                                     <property name="fill">False</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
                            </widget>
                          </child>
                        </widget>

Modified: gnunet-gtk/src/plugins/daemon/Makefile.am
===================================================================
--- gnunet-gtk/src/plugins/daemon/Makefile.am   2006-12-17 23:14:44 UTC (rev 
3963)
+++ gnunet-gtk/src/plugins/daemon/Makefile.am   2006-12-18 00:18:20 UTC (rev 
3964)
@@ -16,6 +16,7 @@
   $(top_builddir)/src/common/libgnunetgtk_common.la \
   -lgnunetutil \
   -lgnunetutil_cron \
+  -lgnunetutil_config \
   -lgnunetgetoption_api \
   -lgnunetutil_network_client
 libgnunetgtkmodule_daemon_la_LDFLAGS = \

Modified: gnunet-gtk/src/plugins/daemon/daemon.c
===================================================================
--- gnunet-gtk/src/plugins/daemon/daemon.c      2006-12-17 23:14:44 UTC (rev 
3963)
+++ gnunet-gtk/src/plugins/daemon/daemon.c      2006-12-18 00:18:20 UTC (rev 
3964)
@@ -26,7 +26,9 @@
 
 #include "platform.h"
 #include "gnunetgtk_common.h"
+#include <GNUnet/gnunet_directories.h>
 #include <GNUnet/gnunet_getoption_lib.h>
+#include <GNUnet/gnunet_util_config_impl.h>
 #include <GNUnet/gnunet_util_cron.h>
 #include <GNUnet/gnunet_util_network_client.h>
 #include <gtk/gtk.h>
@@ -114,9 +116,16 @@
   static GtkWidget * launchEntry = NULL;
   static GtkWidget * statsEntryYes = NULL;
   static GtkWidget * statsEntryNo = NULL;
+  static GtkWidget * statsEntryError = NULL;
+  static GtkWidget * chooser = NULL;
   static int once = 1;
   static int isLocal;
   char * host;
+  int canStart;
+  struct GC_Configuration * dcfg;
+  char * fn;
+  char * user;
+  struct passwd * pws;
 
   if (once) {
     once = 0;
@@ -132,6 +141,12 @@
     statsEntryNo
       = glade_xml_get_widget(getMainXML(),
                             "statusPixmapNo");
+    statsEntryError
+      = glade_xml_get_widget(getMainXML(),
+                            "statusPixmapError");
+    chooser 
+      = glade_xml_get_widget(getMainXML(),
+                            "gnunetdconfigFileChooserButton");
     GC_get_configuration_value_string(cfg,
                                      "NETWORK",
                                      "HOST",
@@ -141,16 +156,53 @@
       isLocal = TRUE;
     else
       isLocal = FALSE;
-    FREENONNULL(host);
+    FREE(host);
   }
   updateAppModelSafe(NULL);
-  if (ret == SYSERR) {
+  if (ret == 0) {
+    canStart = 0;
+    if ( (isLocal) &&
+        (NULL != (fn = 
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)))) ) {
+      if (disk_file_test(ectx, fn) == YES) {
+       dcfg = GC_create_C_impl();
+       canStart = 1;
+       if (0 != GC_parse_configuration(dcfg, fn))
+         canStart = 0;
+       user = NULL;
+       GC_get_configuration_value_string(dcfg,
+                                         "GNUNETD",
+                                         "USER",
+                                         "",
+                                         &user);
+       if (strlen(user) > 0) {
+         if (NULL == (pws = getpwnam(user))) {
+           canStart = 0;
+         } else {
+           if (pws->pw_uid != getuid())
+             canStart = (geteuid() == 0);
+           else
+             canStart = 1;
+         }
+       }
+       FREE(user);
+       GC_free(dcfg);
+      }    
+      g_free(fn);
+    } 
     gtk_widget_hide(statsEntryYes);
-    gtk_widget_show_all(statsEntryNo);
     gtk_widget_set_sensitive(killEntry, FALSE);
-    gtk_widget_set_sensitive(launchEntry, (TRUE & isLocal) );
+    if (canStart && isLocal) {
+      gtk_widget_set_sensitive(launchEntry, TRUE);
+      gtk_widget_show_all(statsEntryNo);
+      gtk_widget_hide(statsEntryError);
+    } else {
+      gtk_widget_set_sensitive(launchEntry, FALSE);
+      gtk_widget_show_all(statsEntryError);
+      gtk_widget_hide(statsEntryNo);
+    }
   } else {
     gtk_widget_hide(statsEntryNo);
+    gtk_widget_hide(statsEntryError);
     gtk_widget_show_all(statsEntryYes);
     gtk_widget_set_sensitive(killEntry, TRUE);
     gtk_widget_set_sensitive(launchEntry, FALSE);
@@ -159,15 +211,14 @@
 }
 
 static void cronCheckDaemon(void * dummy) {
-  static int last = 42;
   int ret;
 
-  ret = connection_test_running(ectx,
-                               cfg);
-  if (ret != last) {
-    last = ret;
-    gtkSaveCall(&doUpdateMenus, &ret);
-  }
+  if (OK == connection_test_running(ectx,
+                                   cfg))
+    ret = 1;
+  else
+    ret = 0;
+  gtkSaveCall(&doUpdateMenus, &ret);  
 }
 
 
@@ -177,7 +228,9 @@
 void on_startDaemon_clicked_daemon(GtkWidget * widget,
                                   gpointer data) {
   GtkWidget * launchEntry;
-
+  GtkWidget * chooser;
+  char * fn;
+ 
   launchEntry
     = glade_xml_get_widget(getMainXML(),
                           "startDaemon");
@@ -188,14 +241,21 @@
     return;
   } else {     
     addLogEntry(_("Launching gnunetd..."));
+    chooser 
+      = glade_xml_get_widget(getMainXML(),
+                            "gnunetdconfigFileChooserButton");
+    fn = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser));
+    GE_BREAK(ectx, fn != NULL);
     if (SYSERR != os_daemon_start(ectx,
                                  cfg,
-                                 NULL, /* fixme: cfgFile */
+                                 fn, 
                                  YES)) {
       addLogEntry(_("Launched gnunetd"));
     } else {
       addLogEntry(_("Launching gnunetd failed"));
     }
+    if (fn != NULL)
+      g_free(fn);
   }
 }
 
@@ -242,6 +302,7 @@
   GtkListStore * model;
   GtkCellRenderer * renderer;
   int col;
+  char * daemon_config;
 
   ectx = e;
   cfg = c;
@@ -277,6 +338,22 @@
     = glade_xml_get_widget(getMainXML(),
                           "daemonScrolledWindow");
   gtk_widget_show(tab);
+  daemon_config = NULL;
+  GC_get_configuration_value_filename(cfg,
+                                     "DAEMON",
+                                     "CONFIGFILE",
+                                     DEFAULT_DAEMON_CONFIG_FILE,
+                                     &daemon_config);
+  if (YES == disk_file_test(NULL, daemon_config)) {
+    
gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(glade_xml_get_widget(getMainXML(),
+                                                                       
"gnunetdconfigFileChooserButton")),
+                                 daemon_config);
+  } else {
+    addLogEntry(_("Configuration file for GNUnet daemon `%s' does not exist! 
Run `gnunet-setup -d'."),
+               daemon_config);
+  }
+  FREE(daemon_config);
+  
   cron = cron_create(ectx);
   cron_add_job(cron,
               &cronCheckDaemon,





reply via email to

[Prev in Thread] Current Thread [Next in Thread]