[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 */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r33573 - gnunet-gtk/src/namestore,
gnunet <=