gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r33573 - gnunet-gtk/src/namestore


From: gnunet
Subject: [GNUnet-SVN] r33573 - gnunet-gtk/src/namestore
Date: Fri, 6 Jun 2014 16:49:26 +0200

Author: grothoff
Date: 2014-06-06 16:49:26 +0200 (Fri, 06 Jun 2014)
New Revision: 33573

Added:
   gnunet-gtk/src/namestore/plugin_gtk_namestore_tlsa.c
Modified:
   gnunet-gtk/src/namestore/Makefile.am
   gnunet-gtk/src/namestore/plugin_gtk_namestore_box.c
Log:
-build srv and tlsa plugins, template for tlsa

Modified: gnunet-gtk/src/namestore/Makefile.am
===================================================================
--- gnunet-gtk/src/namestore/Makefile.am        2014-06-06 13:36:08 UTC (rev 
33572)
+++ gnunet-gtk/src/namestore/Makefile.am        2014-06-06 14:49:26 UTC (rev 
33573)
@@ -49,12 +49,12 @@
   libgnunet_plugin_gtk_namestore_pkey.la \
   libgnunet_plugin_gtk_namestore_ptr.la \
   libgnunet_plugin_gtk_namestore_soa.la \
+  libgnunet_plugin_gtk_namestore_srv.la \
+  libgnunet_plugin_gtk_namestore_tlsa.la \
   libgnunet_plugin_gtk_namestore_txt.la \
   libgnunet_plugin_gtk_namestore_vpn.la
 
-#  libgnunet_plugin_gtk_namestore_srv.la
 
-
 libgnunet_plugin_gtk_namestore_a_la_SOURCES = \
   plugin_gtk_namestore_a.c
 libgnunet_plugin_gtk_namestore_a_la_CFLAGS = \
@@ -194,18 +194,30 @@
 libgnunet_plugin_gtk_namestore_soa_la_LDFLAGS = \
  $(GN_PLUGIN_LDFLAGS)
 
-#libgnunet_plugin_gtk_namestore_srv_la_SOURCES = \
-#  plugin_gtk_namestore_srv.c
-#libgnunet_plugin_gtk_namestore_srv_la_CFLAGS = \
-#  @GTK_CFLAGS@ \
-#  @GNUNET_CFLAGS@ \
-#  @GLADE_CFLAGS@
-#libgnunet_plugin_gtk_namestore_srv_la_LIBADD = \
-#  @GNUNET_LIBS@ \
-#  -lgnunetutil
-#libgnunet_plugin_gtk_namestore_srv_la_LDFLAGS = \
-# $(GN_PLUGIN_LDFLAGS)
+libgnunet_plugin_gtk_namestore_srv_la_SOURCES = \
+  plugin_gtk_namestore_srv.c
+libgnunet_plugin_gtk_namestore_srv_la_CFLAGS = \
+  @GTK_CFLAGS@ \
+  @GNUNET_CFLAGS@ \
+  @GLADE_CFLAGS@
+libgnunet_plugin_gtk_namestore_srv_la_LIBADD = \
+  @GNUNET_LIBS@ \
+  -lgnunetutil
+libgnunet_plugin_gtk_namestore_srv_la_LDFLAGS = \
+ $(GN_PLUGIN_LDFLAGS)
 
+libgnunet_plugin_gtk_namestore_tlsa_la_SOURCES = \
+  plugin_gtk_namestore_tlsa.c
+libgnunet_plugin_gtk_namestore_tlsa_la_CFLAGS = \
+  @GTK_CFLAGS@ \
+  @GNUNET_CFLAGS@ \
+  @GLADE_CFLAGS@
+libgnunet_plugin_gtk_namestore_tlsa_la_LIBADD = \
+  @GNUNET_LIBS@ \
+  -lgnunetutil
+libgnunet_plugin_gtk_namestore_tlsa_la_LDFLAGS = \
+ $(GN_PLUGIN_LDFLAGS)
+
 libgnunet_plugin_gtk_namestore_txt_la_SOURCES = \
   plugin_gtk_namestore_txt.c
 libgnunet_plugin_gtk_namestore_txt_la_CFLAGS = \

Modified: gnunet-gtk/src/namestore/plugin_gtk_namestore_box.c
===================================================================
--- gnunet-gtk/src/namestore/plugin_gtk_namestore_box.c 2014-06-06 13:36:08 UTC 
(rev 33572)
+++ gnunet-gtk/src/namestore/plugin_gtk_namestore_box.c 2014-06-06 14:49:26 UTC 
(rev 33573)
@@ -56,6 +56,7 @@
 
 /* We simply include the code for boxed plugins directly here */
 #include "plugin_gtk_namestore_srv.c"
+#include "plugin_gtk_namestore_tlsa.c"
 
 
 /**
@@ -122,12 +123,9 @@
   case GNUNET_DNSPARSER_TYPE_TLSA:
     gtk_widget_show (GTK_WIDGET (gtk_builder_get_object (builder,
                                                          
"edit_dialog_tlsa_frame")));
-#if 0
-    /* FIXME: not implemented */
     tlsa_load (bc->env,
                n_value,
                builder);
-#endif
     break;
   default:
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -158,11 +156,8 @@
     return srv_store (bc->env,
                       builder);
   case GNUNET_DNSPARSER_TYPE_TLSA:
-#if 0
-    /* FIXME: not implemented */
     return tlsa_store (bc->env,
                        builder);
-#endif
   default:
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 _("Boxed record type %u not supported\n"),
@@ -195,11 +190,8 @@
     return srv_validate (bc->env,
                          builder);
   case GNUNET_DNSPARSER_TYPE_TLSA:
-#if 0
-    /* FIXME: not implemented */
     return tlsa_validate (bc->env,
                           builder);
-#endif
   default:
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 _("Boxed record type %u not supported\n"),

Added: gnunet-gtk/src/namestore/plugin_gtk_namestore_tlsa.c
===================================================================
--- gnunet-gtk/src/namestore/plugin_gtk_namestore_tlsa.c                        
        (rev 0)
+++ gnunet-gtk/src/namestore/plugin_gtk_namestore_tlsa.c        2014-06-06 
14:49:26 UTC (rev 33573)
@@ -0,0 +1,308 @@
+/*
+  * This file is part of GNUnet
+  * (C) 2009-2014 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 3, 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 namestore/plugin_gtk_namestore_tlsa.c
+ * @brief namestore plugin for editing TLSA records
+ * @author Christian Grothoff
+ *
+ * Please note that the code of this plugin (and its XML) is
+ * included in the BOX plugin (and Box XML) as well and thus
+ * particular care needs to be taken when changes are made
+ * to make sure names are consistent across the plugins.
+ */
+#include "gnunet_gtk.h"
+#include "gnunet_gtk_namestore_plugin.h"
+
+
+/**
+ * The user has edited the target value.  Enable/disable 'save'
+ * button depending on the validity of the value.
+ *
+ * @param entry editing widget
+ * @param user_data the plugin environment
+ */
+static void
+GNS_edit_dialog_tlsa_target_entry_changed_cb (GtkEditable *entry,
+                                             gpointer user_data)
+{
+  struct GNUNET_GTK_NAMESTORE_PluginEnvironment *edc = user_data;
+
+  edc->check_validity (edc);
+}
+
+
+#ifndef EDP_CBC_DEF
+#define EDP_CBC_DEF
+/**
+ * The user has changed the protocol selection.  Enable/disable 'save'
+ * button depending on the validity of the value.
+ *
+ * @param entry editing widget
+ * @param user_data the plugin environment
+ */
+static void
+edit_dialog_protocol_combobox_changed_cb (GtkEditable *entry,
+                                          gpointer user_data)
+{
+  struct GNUNET_GTK_NAMESTORE_PluginEnvironment *edc = user_data;
+
+  edc->check_validity (edc);
+}
+#endif
+
+
+/**
+ * Function that will be called to initialize the builder's
+ * widgets from the existing record (if there is one).
+ * The `n_value` is the existing value of the record as a string.
+ *
+ * @param cls the `struct GNUNET_GTK_NAMESTORE_PluginEnvironment *`
+ * @param n_value the record as a string
+ * @param builder the edit dialog's builder
+ */
+static void
+tlsa_load (void *cls,
+          gchar *n_value,
+          GtkBuilder *builder)
+{
+  unsigned int protocol;
+  GtkComboBox *cb;
+  GtkTreeIter iter;
+  unsigned int service;
+  guint service_at_iter;
+  unsigned int priority;
+  unsigned int weight;
+  unsigned int port;
+  unsigned int record_type;
+  char target_name[253 + 1];
+  GtkTreeModel *tm;
+
+  if (7 != SSCANF (n_value,
+                   "%u %u %u %d %d %d %253s",
+                   &protocol,
+                   &service,
+                   &record_type,
+                   &priority,
+                   &weight,
+                   &port,
+                   target_name))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                _("Unable to parse (boxed) TLSA record `%s'\n"),
+                n_value);
+    return;
+  }
+
+  gtk_spin_button_set_value
+    (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
+                                              "edit_dialog_port_spinbutton")),
+     protocol);
+  cb = GTK_COMBO_BOX (gtk_builder_get_object (builder,
+                                              
"edit_dialog_protocol_combobox"));
+  tm = GTK_TREE_MODEL (gtk_builder_get_object (builder,
+                                               
"edit_dialog_protocol_liststore"));
+  if (gtk_tree_model_get_iter_first (tm,
+                                     &iter))
+  {
+    do
+    {
+      gtk_tree_model_get (tm,
+                          &iter,
+                          1, &service_at_iter,
+                          -1);
+      if (service_at_iter == service)
+      {
+        gtk_combo_box_set_active_iter (cb,
+                                       &iter);
+        break;
+      }
+    }
+    while (gtk_tree_model_iter_next (tm,
+                                     &iter));
+  }
+  gtk_spin_button_set_value
+    (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
+                                              
"edit_dialog_tlsa_priority_spinbutton")),
+     priority);
+  gtk_spin_button_set_value
+    (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
+                                              
"edit_dialog_tlsa_weight_spinbutton")),
+     weight);
+  gtk_spin_button_set_value
+    (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
+                                              
"edit_dialog_tlsa_value_port_spinbutton")),
+     port);
+  gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (builder,
+                                                         
"edit_dialog_tlsa_target_entry")),
+                      target_name);
+}
+
+
+/**
+ * Function that will be called to retrieve the final value of the
+ * record (in string format) once the dialog is being closed.
+ *
+ * @param cls the `struct GNUNET_GTK_NAMESTORE_PluginEnvironment *`
+ * @param builder the edit dialog's builder
+ * @return record value as a string, as specified in the dialog
+ */
+static gchar *
+tlsa_store (void *cls,
+           GtkBuilder *builder)
+{
+  unsigned int protocol;
+  GtkComboBox *cb;
+  GtkTreeIter iter;
+  guint service;
+  unsigned int priority;
+  unsigned int weight;
+  unsigned int port;
+  GtkEntry *entry;
+  const gchar *target;
+  char *result;
+  GtkTreeModel *tm;
+
+  protocol = gtk_spin_button_get_value
+    (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
+                                              "edit_dialog_port_spinbutton")));
+  cb = GTK_COMBO_BOX (gtk_builder_get_object (builder,
+                                              
"edit_dialog_protocol_combobox"));
+  if (! gtk_combo_box_get_active_iter (cb,
+                                       &iter))
+  {
+    GNUNET_break (0);
+    return NULL;
+  }
+  tm = GTK_TREE_MODEL (gtk_builder_get_object (builder,
+                                               
"edit_dialog_protocol_liststore"));
+  gtk_tree_model_get (tm,
+                      &iter,
+                      1, &service,
+                      -1);
+  priority = gtk_spin_button_get_value
+    (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
+                                              
"edit_dialog_tlsa_priority_spinbutton")));
+  weight = gtk_spin_button_get_value
+    (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
+                                              
"edit_dialog_tlsa_weight_spinbutton")));
+  port = gtk_spin_button_get_value
+    (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
+                                              
"edit_dialog_tlsa_value_port_spinbutton")));
+  entry = GTK_ENTRY (gtk_builder_get_object (builder,
+                                             "edit_dialog_tlsa_target_entry"));
+  target = gtk_entry_get_text (entry);
+
+  GNUNET_asprintf (&result,
+                   "%u %u %u %d %d %d %s",
+                   protocol,
+                   (unsigned int) service,
+                   GNUNET_DNSPARSER_TYPE_TLSA,
+                   priority,
+                   weight,
+                   port,
+                   target);
+  return result;
+}
+
+
+/**
+ * Function to call to validate the state of the dialog.  Should
+ * return #GNUNET_OK if the information in the dialog is valid, and
+ * #GNUNET_SYSERR if some fields contain invalid values.  The
+ * function should highlight fields with invalid inputs for the
+ * user.
+ *
+ * @param cls the `struct GNUNET_GTK_NAMESTORE_PluginEnvironment *`
+ * @param builder the edit dialog's builder
+ * @return #GNUNET_OK if there is a valid record value in the dialog
+ */
+static int
+tlsa_validate (void *cls,
+              GtkBuilder *builder)
+{
+  GtkEditable *entry;
+  const gchar *preedit;
+  GtkComboBox *cb;
+  GtkTreeIter iter;
+
+  entry = GTK_EDITABLE (gtk_builder_get_object (builder,
+                                               
"edit_dialog_tlsa_target_entry"));
+  preedit = gtk_editable_get_chars (entry, 0, -1);
+  if ( (NULL == preedit) ||
+       (GNUNET_OK != GNUNET_DNSPARSER_check_name (preedit)) )
+    return GNUNET_SYSERR;
+  cb = GTK_COMBO_BOX (gtk_builder_get_object (builder,
+                                              
"edit_dialog_protocol_combobox"));
+  if (! gtk_combo_box_get_active_iter (cb,
+                                       &iter))
+    return GNUNET_SYSERR;
+  return GNUNET_OK;
+}
+
+
+/**
+ * Entry point for the plugin.
+ *
+ * @param cls the `struct GNUNET_GTK_NAMESTORE_PluginEnvironment`
+ * @return NULL on error, otherwise the plugin context
+ */
+void *
+libgnunet_plugin_gtk_namestore_tlsa_init (void *cls)
+{
+  struct GNUNET_GTK_NAMESTORE_PluginEnvironment *env = cls;
+  struct GNUNET_GTK_NAMESTORE_PluginFunctions *plugin;
+  static struct GNUNET_GTK_NAMESTORE_Symbol symbols[] = {
+    { "GNS_edit_dialog_tlsa_target_entry_changed_cb",
+      G_CALLBACK (GNS_edit_dialog_tlsa_target_entry_changed_cb) },
+    { "edit_dialog_protocol_combobox_changed_cb",
+      G_CALLBACK (edit_dialog_protocol_combobox_changed_cb) },
+    { NULL, NULL }
+  };
+
+  plugin = GNUNET_new (struct GNUNET_GTK_NAMESTORE_PluginFunctions);
+  plugin->cls = env;
+  plugin->dialog_glade_filename = "gnunet_namestore_edit_tlsa.glade";
+  plugin->dialog_widget_name = "edit_tlsa_dialog";
+  plugin->symbols = symbols;
+  plugin->load = &tlsa_load;
+  plugin->store = &tlsa_store;
+  plugin->validate = &tlsa_validate;
+  /* we will not produce a 'native' TLSA record, but one in a BOX */
+  plugin->record_type = GNUNET_GNSRECORD_TYPE_BOX;
+  return plugin;
+}
+
+
+/**
+ * Exit point from the plugin.
+ *
+ * @param cls the plugin context (as returned by "init")
+ * @return always NULL
+ */
+void *
+libgnunet_plugin_gtk_namestore_tlsa_done (void *cls)
+{
+  struct GNUNET_GTK_NAMESTORE_PluginFunctions *plugin = cls;
+
+  GNUNET_free (plugin);
+  return NULL;
+}
+
+/* end of plugin_gtk_namestore_tlsa.c */




reply via email to

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