From fd28cc359e97e45e29dec8c42b5b45ad2a139c4b Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 23 Jun 2012 20:54:26 +0000 Subject: -towards integrating gnunet-gns-gtk with gnunet-setup --- src/setup/Makefile.am | 3 +- src/setup/gnunet-setup-gns.c | 763 ++++++++++++++++--------------------------- src/setup/gnunet-setup-gns.h | 47 +++ src/setup/gnunet-setup.c | 16 +- 4 files changed, 348 insertions(+), 481 deletions(-) create mode 100644 src/setup/gnunet-setup-gns.h diff --git a/src/setup/Makefile.am b/src/setup/Makefile.am index bce82e78..6d483df4 100644 --- a/src/setup/Makefile.am +++ b/src/setup/Makefile.am @@ -29,13 +29,14 @@ gnunet_setup_SOURCES = \ gnunet-setup-datacache-config.c \ gnunet-setup-namestore-plugins.c \ gnunet-setup-namestore-config.c \ + gnunet-setup-gns.c gnunet-setup-gns.h \ gnunet-setup-hostlist-editing.c \ gnunet-setup-hostlist-server.c gnunet_setup_LDADD = \ $(top_builddir)/src/lib/libgnunetgtk.la \ @GTK_LIBS@ @GNUNET_LIBS@ @GLADE_LIBS@ \ $(WINLIBS) \ - -lgnunetutil -lgnunetnat \ + -lgnunetutil -lgnunetnat -lgnunetnamestore \ $(INTLLIBS) gnunet_setup_LDFLAGS = \ -export-dynamic diff --git a/src/setup/gnunet-setup-gns.c b/src/setup/gnunet-setup-gns.c index 83a49e89..a3feb96b 100644 --- a/src/setup/gnunet-setup-gns.c +++ b/src/setup/gnunet-setup-gns.c @@ -24,7 +24,39 @@ * @brief everything releated to the main GNS zone tree view */ #include "gnunet_gtk.h" -#include "gnunet-gns-gtk.h" +#include "gnunet-setup-gns.h" +#include + +/** + * FIXME. Also: i18n? + */ +#define NEW_NAME_STR "" + +/** + * FIXME. Also: i18n? + */ +#define NEW_RECORD_STR "" + +/** + * FIXME. Also: i18n? + */ +#define ROOT_STR "+" + +/** + * FIXME. Also: i18n? + */ +#define EXPIRE_NEVER_STRING "never" + +/** + * FIXME. Also: i18n? + */ +#define EXPIRE_INVALID_STRING "invalid" + +/** + * FIXME. Also: i18n? + */ +#define PSEU_EMPTY_STR "" + /** @@ -128,10 +160,6 @@ enum LIST_COLUMNS */ struct UpdateContext { - /** - * - */ - struct GNUNET_GNS_Context *gns; /** * @@ -160,27 +188,52 @@ static char *zone_as_string; */ static char *zonekey_directory; +/** + * Handle to the namestore. + */ +static struct GNUNET_NAMESTORE_Handle *namestore; -struct GNUNET_GNS_Context -{ - /** - * Handle to the namestore. - */ - struct GNUNET_NAMESTORE_Handle *ns; +/** + * FIXME... + */ +static GtkTreeStore *ts; + +/** + * FIXME... + */ +static GtkListStore *ls; - GtkCheckMenuItem *shorten_menu; +/** + * FIXME... + */ +static GtkTreeModel *tm; - GtkTreeStore *ts; - GtkListStore *ls; - GtkTreeModel *tm; - GtkTreeView *tv; +/** + * FIXME... + */ +static GtkTreeView *tv; + +/** + * FIXME: not good for multi-zone system we have right now... + */ +static struct GNUNET_CRYPTO_RsaPrivateKey *pkey; + +/** + * FIXME: not good for multi-zone system we have right now... + */ +static struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pubkey; + +/** + * FIXME: not good for multi-zone system we have right now... + */ +static struct GNUNET_CRYPTO_ShortHashCode zone; + +/** + * FIXME... + */ +static int iteration; - struct GNUNET_CRYPTO_RsaPrivateKey *pkey; - struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pubkey; - struct GNUNET_CRYPTO_ShortHashCode zone; - int iteration; -}; static void @@ -190,11 +243,12 @@ check_name_validity_and_commit_remove_proc (void *cls, { struct UpdateContext * uc = cls; unsigned int c; + if ((GNUNET_OK == success) || (GNUNET_NO == success)) { for (c = 0; c < uc->rd_count; c++) { - GNUNET_NAMESTORE_record_create(uc->gns->ns, uc->gns->pkey, + GNUNET_NAMESTORE_record_create(namestore, pkey, uc->name, &uc->rd[c],NULL, NULL); GNUNET_free ((void *) uc->rd[c].data); } @@ -219,7 +273,7 @@ check_name_validity_and_commit_remove_proc (void *cls, static void -check_name_validity_and_commit (struct GNUNET_GNS_Context *gns, gchar *path, char * oldname) +check_name_validity_and_commit (gchar *path, char * oldname) { GtkTreeIter it; GtkTreeIter parent; @@ -244,18 +298,18 @@ check_name_validity_and_commit (struct GNUNET_GNS_Context *gns, gchar *path, cha char *n_value_color; - gtk_tree_model_get_iter_from_string(gns->tm, &it, path); + gtk_tree_model_get_iter_from_string(tm, &it, path); - if (FALSE == gtk_tree_model_iter_parent (gns->tm, &parent, &it)) + if (FALSE == gtk_tree_model_iter_parent (tm, &parent, &it)) parent = it; - children = gtk_tree_model_iter_n_children (gns->tm, &parent); + children = gtk_tree_model_iter_n_children (tm, &parent); if (children < 1) { return; } - gtk_tree_model_get(gns->tm, &parent, + gtk_tree_model_get(tm, &parent, GNS_TREESTORE_COL_NAME, &name, -1); @@ -273,12 +327,12 @@ check_name_validity_and_commit (struct GNUNET_GNS_Context *gns, gchar *path, cha struct GNUNET_NAMESTORE_RecordData *rd = GNUNET_malloc (records * sizeof (struct GNUNET_NAMESTORE_RecordData)); - if (FALSE == gtk_tree_model_iter_children (gns->tm, &it, &parent)) + if (FALSE == gtk_tree_model_iter_children (tm, &it, &parent)) return; for (c = 0; c < children; c++) { - gtk_tree_model_get(gns->tm, &it, + gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_NAME, &n_name, GNS_TREESTORE_COL_RECORD_TYPE, &n_type, GNS_TREESTORE_COL_IS_PUBLIC, &n_public, @@ -333,7 +387,7 @@ check_name_validity_and_commit (struct GNUNET_GNS_Context *gns, gchar *path, cha g_free (n_value); g_free (n_value_color); - if (FALSE == gtk_tree_model_iter_next (gns->tm, &it)) + if (FALSE == gtk_tree_model_iter_next (tm, &it)) break; } @@ -351,7 +405,7 @@ check_name_validity_and_commit (struct GNUNET_GNS_Context *gns, gchar *path, cha GNUNET_assert (children == (records -1)); /* Append PSEU record */ - GtkEntry * entry = GTK_ENTRY (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_pseu_entry")); + GtkEntry * entry = GTK_ENTRY (GNUNET_SETUP_get_object ("GNUNET_SETUP_gns_pseu_entry")); pseu = gtk_entry_get_text (GTK_ENTRY(entry)); if ((NULL != pseu) && (0 != strcmp (PSEU_EMPTY_STR, pseu)) && (0 != strcmp ("", pseu))) { @@ -377,14 +431,13 @@ check_name_validity_and_commit (struct GNUNET_GNS_Context *gns, gchar *path, cha /* Remove old entries */ struct UpdateContext * uc = GNUNET_malloc (sizeof (struct UpdateContext)); - uc->gns = gns; uc->rd = rd; uc->rd_count = records; uc->name = strdup (name); if (oldname != NULL) - GNUNET_NAMESTORE_record_remove(gns->ns, gns->pkey, oldname, NULL, &check_name_validity_and_commit_remove_proc, uc); + GNUNET_NAMESTORE_record_remove (namestore, pkey, oldname, NULL, &check_name_validity_and_commit_remove_proc, uc); else - GNUNET_NAMESTORE_record_remove(gns->ns, gns->pkey, name, NULL, &check_name_validity_and_commit_remove_proc, uc); + GNUNET_NAMESTORE_record_remove (namestore, pkey, name, NULL, &check_name_validity_and_commit_remove_proc, uc); g_free (name); } } @@ -396,11 +449,6 @@ check_name_validity_and_commit (struct GNUNET_GNS_Context *gns, gchar *path, cha struct Remove_Context { - /** - * - */ - struct GNUNET_GNS_Context *gns; - /** * */ @@ -416,10 +464,14 @@ check_name_validity_and_remove_proc (void *cls, struct Remove_Context *rcc = cls; GtkDialog *dialog; GtkTreeIter it; + if (GNUNET_SYSERR == success) { - char * message = _("Record could not be deleted:"); - dialog = GTK_DIALOG(gtk_message_dialog_new (GTK_WINDOW (rcc->gns->main_window), + const char * message = _("Record could not be deleted:"); + GtkWindow *main_window; + + main_window = GTK_WINDOW (GNUNET_SETUP_get_object ("GNUNET_setup_dialog")); + dialog = GTK_DIALOG(gtk_message_dialog_new (main_window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, @@ -427,13 +479,13 @@ check_name_validity_and_remove_proc (void *cls, message, emsg)); - g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), rcc->gns); + g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_widget_show_all (GTK_WIDGET(dialog)); } else { - gtk_tree_model_get_iter_from_string(rcc->gns->tm, &it, rcc->path); - gtk_tree_store_remove (rcc->gns->ts, &it); + gtk_tree_model_get_iter_from_string(tm, &it, rcc->path); + gtk_tree_store_remove (ts, &it); } GNUNET_free (rcc->path); GNUNET_free (rcc); @@ -441,7 +493,7 @@ check_name_validity_and_remove_proc (void *cls, static void -check_name_validity_and_remove (struct GNUNET_GNS_Context *gns, gchar *path) +check_name_validity_and_remove (gchar *path) { GtkTreeIter it; GtkTreeIter parent; @@ -460,18 +512,18 @@ check_name_validity_and_remove (struct GNUNET_GNS_Context *gns, gchar *path) char *n_value; char *n_value_color; - gtk_tree_model_get_iter_from_string(gns->tm, &it, path); - gtk_tree_model_get(gns->tm, &it, + gtk_tree_model_get_iter_from_string(tm, &it, path); + gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_NAME, &name, -1); - if (TRUE == gtk_tree_model_iter_parent (gns->tm, &parent, &it)) + if (TRUE == gtk_tree_model_iter_parent (tm, &parent, &it)) { /* Removing a single record */ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Removing single record for name `%s'\n", name); - gtk_tree_model_get(gns->tm, &it, + gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_NAME, &n_name, GNS_TREESTORE_COL_RECORD_TYPE, &n_type, GNS_TREESTORE_COL_IS_PUBLIC, &n_public, @@ -512,15 +564,14 @@ check_name_validity_and_remove (struct GNUNET_GNS_Context *gns, gchar *path) memcpy ((void *) rd.data, n_value, rd.data_size); rcc = GNUNET_malloc(sizeof (struct Remove_Context)); - rcc->gns = gns; rcc->path = strdup (path); - GNUNET_NAMESTORE_record_remove(gns->ns, gns->pkey, name, &rd, &check_name_validity_and_remove_proc, rcc); + GNUNET_NAMESTORE_record_remove (namestore, pkey, name, &rd, &check_name_validity_and_remove_proc, rcc); GNUNET_free ((void *) rd.data); } else { - gtk_tree_model_get_iter_from_string(gns->tm, &it, path); - gtk_tree_store_remove (gns->ts, &it); + gtk_tree_model_get_iter_from_string(tm, &it, path); + gtk_tree_store_remove (ts, &it); } g_free (n_name); g_free (n_exp_color); @@ -532,9 +583,8 @@ check_name_validity_and_remove (struct GNUNET_GNS_Context *gns, gchar *path) { /* Removing the whole name record */ rcc = GNUNET_malloc(sizeof (struct Remove_Context)); - rcc->gns = gns; rcc->path = strdup (path); - GNUNET_NAMESTORE_record_remove(gns->ns, gns->pkey, name, NULL, &check_name_validity_and_remove_proc, rcc); + GNUNET_NAMESTORE_record_remove (namestore, pkey, name, NULL, &check_name_validity_and_remove_proc, rcc); } g_free (name); } @@ -551,12 +601,11 @@ check_name_validity_and_remove (struct GNUNET_GNS_Context *gns, gchar *path) * @param user_data unused */ void -GNUNET_GNS_GTK_type_cellrenderercombo_changed_cb (GtkCellRendererCombo *combo, +GNUNET_SETUP_gns_type_cellrenderercombo_changed_cb (GtkCellRendererCombo *combo, gchar *path, GtkTreeIter *new_iter, gpointer user_data) { - struct GNUNET_GNS_Context *gns = user_data; GtkTreeIter it; GtkTreeIter child; guint type; @@ -567,19 +616,19 @@ GNUNET_GNS_GTK_type_cellrenderercombo_changed_cb (GtkCellRendererCombo *combo, void *data; size_t data_size; - gtk_tree_model_get(GTK_TREE_MODEL(gns->ls), new_iter, 0, &type, -1); - gtk_tree_model_get(GTK_TREE_MODEL(gns->ls), new_iter, GNS_TYPE_TO_NAME_LISTSTORE_COLUMN_TYPENAME, &type_str, -1); + gtk_tree_model_get(GTK_TREE_MODEL(ls), new_iter, 0, &type, -1); + gtk_tree_model_get(GTK_TREE_MODEL(ls), new_iter, GNS_TYPE_TO_NAME_LISTSTORE_COLUMN_TYPENAME, &type_str, -1); /* check if this is a new record */ - gtk_tree_model_get_iter_from_string(gns->tm, &it, path); - gtk_tree_model_get(gns->tm, &it, GNS_TREESTORE_COL_IS_RECORD_ROW, &record_row, -1); - gtk_tree_model_get(gns->tm, &it, GNS_TREESTORE_COL_NAME, &name_str, -1); + gtk_tree_model_get_iter_from_string(tm, &it, path); + gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_IS_RECORD_ROW, &record_row, -1); + gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_NAME, &name_str, -1); if (GNUNET_YES == record_row) { /* Updating an existing record */ - gtk_tree_store_set(gns->ts, &it, + gtk_tree_store_set(ts, &it, GNS_TREESTORE_COL_RECORD_TYPE, type, GNS_TREESTORE_COL_RECORD_TYPE_AS_STR, type_str, -1); @@ -588,7 +637,7 @@ GNUNET_GNS_GTK_type_cellrenderercombo_changed_cb (GtkCellRendererCombo *combo, { /* Adding a new record */ - gtk_tree_store_insert_with_values(gns->ts, &child , &it, 0, + gtk_tree_store_insert_with_values(ts, &child , &it, 0, GNS_TREESTORE_COL_NAME, name_str, GNS_TREESTORE_COL_NAME_IS_VISIBLE, FALSE, GNS_TREESTORE_COL_RECORD_TYPE, type, @@ -599,34 +648,34 @@ GNUNET_GNS_GTK_type_cellrenderercombo_changed_cb (GtkCellRendererCombo *combo, GNS_TREESTORE_COL_IS_RECORD_ROW, GNUNET_YES, GNS_TREESTORE_COL_NOT_DUMMY_ROW, GNUNET_YES, -1); - gtk_tree_view_expand_row (gns->tv, gtk_tree_model_get_path(gns->tm, &it), 0); + gtk_tree_view_expand_row (tv, gtk_tree_model_get_path(tm, &it), 0); } GNUNET_free (type_str); /* check if value is still valid */ - gtk_tree_model_get(gns->tm, &it, GNS_TREESTORE_COL_VAL_AS_STR, &value_str, -1); + gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_VAL_AS_STR, &value_str, -1); if (NULL != value_str) { if (GNUNET_OK != GNUNET_NAMESTORE_string_to_value (type, - value_str, - &data, - &data_size)) - gtk_tree_store_set (gns->ts, &it, GNS_TREESTORE_COL_VAL_COLOR, "red", -1); + value_str, + &data, + &data_size)) + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_VAL_COLOR, "red", -1); else - gtk_tree_store_set (gns->ts, &it, GNS_TREESTORE_COL_VAL_COLOR, NULL, -1); + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_VAL_COLOR, NULL, -1); GNUNET_free (value_str); } else if (NULL == value_str) { /* Empty value field */ if (GNUNET_YES == record_row) - gtk_tree_store_set (gns->ts, &it, GNS_TREESTORE_COL_VAL_COLOR, "red", -1); + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_VAL_COLOR, "red", -1); else - gtk_tree_store_set (gns->ts, &child, GNS_TREESTORE_COL_VAL_COLOR, "red", -1); + gtk_tree_store_set (ts, &child, GNS_TREESTORE_COL_VAL_COLOR, "red", -1); } - check_name_validity_and_commit (gns, path, NULL); + check_name_validity_and_commit (path, NULL); GNUNET_free_non_null (name_str); } @@ -640,19 +689,18 @@ GNUNET_GNS_GTK_type_cellrenderercombo_changed_cb (GtkCellRendererCombo *combo, * @param user_data unused */ void -GNUNET_GNS_GTK_ispublic_cellrenderertoggle_toggled_cb (GtkCellRendererToggle *cell_renderer, +GNUNET_SETUP_gns_ispublic_cellrenderertoggle_toggled_cb (GtkCellRendererToggle *cell_renderer, gchar *path, gpointer user_data) { - struct GNUNET_GNS_Context *gns = user_data; GtkTreeIter it; gboolean value; - gtk_tree_model_get_iter_from_string(gns->tm, &it, path); - gtk_tree_model_get(gns->tm, &it, GNS_TREESTORE_COL_IS_PUBLIC, &value, -1); - gtk_tree_store_set(gns->ts, &it, GNS_TREESTORE_COL_IS_PUBLIC, !value, -1); + gtk_tree_model_get_iter_from_string(tm, &it, path); + gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_IS_PUBLIC, &value, -1); + gtk_tree_store_set(ts, &it, GNS_TREESTORE_COL_IS_PUBLIC, !value, -1); - check_name_validity_and_commit (gns, path, NULL); + check_name_validity_and_commit (path, NULL); } @@ -757,12 +805,11 @@ convert_string_to_abs_time (const char * text) * @param user_data unused */ void -GNUNET_GNS_GTK_expiration_cellrenderertext_edited_cb (GtkCellRendererText *renderer, +GNUNET_SETUP_gns_expiration_cellrenderertext_edited_cb (GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { - struct GNUNET_GNS_Context * gns = user_data; GtkTreeIter it; struct GNUNET_TIME_Absolute abstime; gboolean is_rel; @@ -770,8 +817,8 @@ GNUNET_GNS_GTK_expiration_cellrenderertext_edited_cb (GtkCellRendererText *rende if ((NULL != new_text)) { - gtk_tree_model_get_iter_from_string(gns->tm, &it, path); - gtk_tree_model_get(gns->tm, &it, + gtk_tree_model_get_iter_from_string(tm, &it, path); + gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_EXP_TIME_AS_STR, &old_text, GNS_TREESTORE_COL_EXP_TIME_IS_REL, &is_rel, -1); @@ -787,7 +834,7 @@ GNUNET_GNS_GTK_expiration_cellrenderertext_edited_cb (GtkCellRendererText *rende { if (GNUNET_SYSERR == check_time(new_text)) { - gtk_tree_store_set (gns->ts, &it, + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_EXP_TIME_AS_STR, new_text, GNS_TREESTORE_COL_EXP_TIME_COLOR, "red", GNS_TREESTORE_COL_EXP_TIME, 0, @@ -805,12 +852,12 @@ GNUNET_GNS_GTK_expiration_cellrenderertext_edited_cb (GtkCellRendererText *rende abstime = convert_string_to_abs_time(new_text); } } - gtk_tree_store_set (gns->ts, &it, + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_EXP_TIME_AS_STR, new_text, GNS_TREESTORE_COL_EXP_TIME, abstime.abs_value, GNS_TREESTORE_COL_EXP_TIME_COLOR, NULL, -1); - check_name_validity_and_commit (gns, path, NULL); + check_name_validity_and_commit (path, NULL); } } @@ -826,13 +873,12 @@ GNUNET_GNS_GTK_expiration_cellrenderertext_edited_cb (GtkCellRendererText *rende * @param user_data unused */ void -GNUNET_GNS_GTK_value_cellrenderertext_edited_cb (GtkCellRendererText *renderer, +GNUNET_SETUP_gns_value_cellrenderertext_edited_cb (GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { - struct GNUNET_GNS_Context *gns = user_data; - GtkTreeModel *tm = GTK_TREE_MODEL(gns->ts); + GtkTreeModel *tm = GTK_TREE_MODEL(ts); GtkTreeIter it; size_t data_size; void * data; @@ -858,18 +904,18 @@ GNUNET_GNS_GTK_value_cellrenderertext_edited_cb (GtkCellRendererText *renderer, } if (GNUNET_OK == GNUNET_NAMESTORE_string_to_value (type, - new_text, - &data, - &data_size)) + new_text, + &data, + &data_size)) { - gtk_tree_store_set (gns->ts, &it, GNS_TREESTORE_COL_VAL_COLOR, NULL, -1); - gtk_tree_store_set (gns->ts, &it, GNS_TREESTORE_COL_VAL_AS_STR, new_text, -1); - check_name_validity_and_commit (gns, path, NULL); + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_VAL_COLOR, NULL, -1); + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_VAL_AS_STR, new_text, -1); + check_name_validity_and_commit (path, NULL); } else { - gtk_tree_store_set (gns->ts, &it, GNS_TREESTORE_COL_VAL_COLOR, "red", -1); - gtk_tree_store_set (gns->ts, &it, GNS_TREESTORE_COL_VAL_AS_STR, new_text, -1); + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_VAL_COLOR, "red", -1); + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_VAL_AS_STR, new_text, -1); } } } @@ -885,15 +931,14 @@ GNUNET_GNS_GTK_value_cellrenderertext_edited_cb (GtkCellRendererText *renderer, * @param user_data unused */ void -GNUNET_GNS_GTK_name_cellrenderertext_edited_cb (GtkCellRendererText *renderer, +GNUNET_SETUP_gns_name_cellrenderertext_edited_cb (GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { - struct GNUNET_GNS_Context *gns = user_data; GtkTreeIter it; GtkTreeIter child; - GtkTreeModel *tm = GTK_TREE_MODEL(gns->ts); + GtkTreeModel *tm = GTK_TREE_MODEL(ts); int not_dummy; char *name; @@ -908,16 +953,16 @@ GNUNET_GNS_GTK_name_cellrenderertext_edited_cb (GtkCellRendererText *renderer, if (not_dummy == GNUNET_NO) { /* update name */ - gtk_tree_store_set (gns->ts, &it, + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_NAME, new_text, GNS_TREESTORE_COL_RECORD_TYPE, 0, GNS_TREESTORE_COL_RECORD_TYPE_AS_STR, _(NEW_RECORD_STR), GNS_TREESTORE_COL_NOT_DUMMY_ROW, GNUNET_YES, -1); - check_name_validity_and_commit (gns, gtk_tree_model_get_string_from_iter(gns->tm, &it), name); + check_name_validity_and_commit (gtk_tree_model_get_string_from_iter(tm, &it), name); /* add a new dummy line */ - gtk_tree_store_insert_with_values (gns->ts, &it,NULL, 0, + gtk_tree_store_insert_with_values (ts, &it,NULL, 0, GNS_TREESTORE_COL_NAME, _(NEW_NAME_STR), GNS_TREESTORE_COL_NAME_IS_VISIBLE, TRUE, GNS_TREESTORE_COL_RECORD_TYPE, 1, @@ -928,32 +973,32 @@ GNUNET_GNS_GTK_name_cellrenderertext_edited_cb (GtkCellRendererText *renderer, else { /* update name */ - gtk_tree_store_set (gns->ts, &it, GNS_TREESTORE_COL_NAME, new_text, -1); + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_NAME, new_text, -1); - if (TRUE == gtk_tree_model_iter_children (gns->tm, &child, &it)) + if (TRUE == gtk_tree_model_iter_children (tm, &child, &it)) { do { - gtk_tree_store_set (gns->ts, &child, + gtk_tree_store_set (ts, &child, GNS_TREESTORE_COL_NAME, &new_text, -1); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "New text for `%s' is `%s'\n", path, new_text); } - while (TRUE == gtk_tree_model_iter_next (gns->tm, &child)); + while (TRUE == gtk_tree_model_iter_next (tm, &child)); } - check_name_validity_and_commit (gns, gtk_tree_model_get_string_from_iter(gns->tm, &it), name); + check_name_validity_and_commit (gtk_tree_model_get_string_from_iter(tm, &it), name); } if (GNUNET_SYSERR == GNUNET_NAMESTORE_check_name (new_text)) { - gtk_tree_store_set (gns->ts, &it, + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_NAME_COLOR, "red", -1); } else { - gtk_tree_store_set (gns->ts, &it, + gtk_tree_store_set (ts, &it, GNS_TREESTORE_COL_NAME_COLOR, NULL, -1); } @@ -971,24 +1016,23 @@ GNUNET_GNS_GTK_name_cellrenderertext_edited_cb (GtkCellRendererText *renderer, * @return TRUE if a menu was activated */ gboolean -GNUNET_GNS_GTK_main_treeview_popup_menu_cb (GtkWidget *widget, +GNUNET_SETUP_gns_main_treeview_popup_menu_cb (GtkWidget *widget, gpointer user_data) { - struct GNUNET_GNS_Context *gns = user_data; GtkTreeModel *tm; GtkTreeIter it; GtkMenu *popup; GtkTreeSelection * ts; int not_dummy; - ts = gtk_tree_view_get_selection(gns->tv); + ts = gtk_tree_view_get_selection(tv); if (! gtk_tree_selection_get_selected (ts, &tm, &it)) return TRUE; - gtk_tree_model_get(gns->tm, &it, GNS_TREESTORE_COL_NOT_DUMMY_ROW, ¬_dummy, -1); + gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_NOT_DUMMY_ROW, ¬_dummy, -1); if (GNUNET_NO == not_dummy) return TRUE; - popup = GTK_MENU(gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_delete_popup_menu")); + popup = GTK_MENU (GNUNET_SETUP_get_object ("GNUNET_SETUP_gns_delete_popup_menu")); gtk_widget_show_all (GTK_WIDGET(popup)); gtk_menu_popup(popup, NULL, NULL, NULL, NULL, 0, 0); return TRUE; @@ -996,13 +1040,13 @@ GNUNET_GNS_GTK_main_treeview_popup_menu_cb (GtkWidget *widget, static void -set_relative_expiration_time (struct GNUNET_GNS_Context *gns, struct GNUNET_TIME_Relative reltime) +set_relative_expiration_time (struct GNUNET_TIME_Relative reltime) { GtkTreeIter it; GtkTreeIter parent; GtkCellRendererText *renderer; GtkTreeModel *tm; - GtkTreeSelection * ts = gtk_tree_view_get_selection(gns->tv); + GtkTreeSelection * ts = gtk_tree_view_get_selection(tv); gboolean has_parent; struct GNUNET_TIME_Absolute abstime; char *path; @@ -1024,76 +1068,75 @@ set_relative_expiration_time (struct GNUNET_GNS_Context *gns, struct GNUNET_TIME abstime = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), reltime); /* this is a single record */ - renderer = GTK_CELL_RENDERER_TEXT((gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_name_cellrenderertext"))); + renderer = GTK_CELL_RENDERER_TEXT((GNUNET_SETUP_get_object ("GNUNET_SETUP_gns_name_cellrenderertext"))); path = gtk_tree_model_get_string_from_iter (tm, &it); - GNUNET_GNS_GTK_expiration_cellrenderertext_edited_cb (renderer, + GNUNET_SETUP_gns_expiration_cellrenderertext_edited_cb (renderer, path, convert_time_to_string (abstime), - gns); + NULL); } gboolean -GNUNET_GNS_GTK_main_treeview_popup_menu_exp1d_cb (GtkWidget *widget, +GNUNET_SETUP_gns_main_treeview_popup_menu_exp1d_cb (GtkWidget *widget, gpointer user_data) { - set_relative_expiration_time (user_data, GNUNET_TIME_UNIT_DAYS); + set_relative_expiration_time (GNUNET_TIME_UNIT_DAYS); return TRUE; } gboolean -GNUNET_GNS_GTK_main_treeview_popup_menu_exp1w_cb (GtkWidget *widget, +GNUNET_SETUP_gns_main_treeview_popup_menu_exp1w_cb (GtkWidget *widget, gpointer user_data) { - set_relative_expiration_time (user_data, GNUNET_TIME_UNIT_WEEKS); + set_relative_expiration_time (GNUNET_TIME_UNIT_WEEKS); return TRUE; } gboolean -GNUNET_GNS_GTK_main_treeview_popup_menu_exp1y_cb (GtkWidget *widget, +GNUNET_SETUP_gns_main_treeview_popup_menu_exp1y_cb (GtkWidget *widget, gpointer user_data) { - set_relative_expiration_time (user_data, GNUNET_TIME_UNIT_YEARS); + set_relative_expiration_time (GNUNET_TIME_UNIT_YEARS); return TRUE; } gboolean -GNUNET_GNS_GTK_main_treeview_popup_menu_expinf_cb (GtkWidget *widget, +GNUNET_SETUP_gns_main_treeview_popup_menu_expinf_cb (GtkWidget *widget, gpointer user_data) { - set_relative_expiration_time (user_data, GNUNET_TIME_UNIT_FOREVER_REL); + set_relative_expiration_time (GNUNET_TIME_UNIT_FOREVER_REL); return TRUE; } gboolean -GNUNET_GNS_GTK_main_treeview_button_press_popup_menu_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_data) +GNUNET_SETUP_gns_main_treeview_button_press_popup_menu_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { /* Check for right click*/ if (NULL == widget) return FALSE; if (event->type == GDK_BUTTON_PRESS && event->button == 3) - GNUNET_GNS_GTK_main_treeview_popup_menu_cb (widget, user_data); + GNUNET_SETUP_gns_main_treeview_popup_menu_cb (widget, user_data); return FALSE; } gboolean -GNUNET_GNS_GTK_main_treeview_key_press_popup_menu_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data) +GNUNET_SETUP_gns_main_treeview_key_press_popup_menu_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { /* Check for delete key */ if ((event->type == GDK_KEY_PRESS) && (GDK_KEY_Delete == event->keyval)) - GNUNET_GNS_GTK_main_treeview_popup_menu_cb (widget, user_data); + GNUNET_SETUP_gns_main_treeview_popup_menu_cb (widget, user_data); return FALSE; } struct ZoneIteration_Context { - struct GNUNET_GNS_Context *gns; struct GNUNET_CRYPTO_ShortHashCode zone; struct GNUNET_NAMESTORE_ZoneIterator * it; char *label; @@ -1101,25 +1144,24 @@ struct ZoneIteration_Context void -GNUNET_GNS_GTK_delete_popup_menu_delete_cb (GtkMenuItem *menuitem, +GNUNET_SETUP_gns_delete_popup_menu_delete_cb (GtkMenuItem *menuitem, gpointer user_data) { - struct GNUNET_GNS_Context *gns = user_data; GtkTreeIter it; GtkTreeModel *tm; GtkTreeSelection * ts; int not_dummy; char *path; - ts = gtk_tree_view_get_selection(gns->tv); + ts = gtk_tree_view_get_selection(tv); if (gtk_tree_selection_get_selected (ts, &tm, &it)) { gtk_tree_model_get(tm, &it, GNS_TREESTORE_COL_NOT_DUMMY_ROW, ¬_dummy, -1); if (GNUNET_NO == not_dummy) return; /* do not delete the dummy line */ - path = gtk_tree_model_get_string_from_iter (gns->tm, &it); - check_name_validity_and_remove(gns, path); + path = gtk_tree_model_get_string_from_iter (tm, &it); + check_name_validity_and_remove(path); g_free (path); } } @@ -1140,7 +1182,7 @@ zone_iteration_proc (void *cls, GtkEntry *pseu_entry; int c; int time_is_relative; - + struct GNUNET_CRYPTO_ShortHashAsciiEncoded shenc; char *exp; char *val; char * type_str; @@ -1150,28 +1192,27 @@ zone_iteration_proc (void *cls, GNUNET_assert (zc_ctx != NULL); if ((NULL == zone_key) && (NULL == name)) { - struct GNUNET_CRYPTO_ShortHashAsciiEncoded shenc; GNUNET_CRYPTO_short_hash_to_enc(&zc_ctx->zone, &shenc); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Zone `%s 'iteration done\n", &shenc); - pseu_entry = GTK_ENTRY((gtk_builder_get_object (zc_ctx->gns->builder, "GNUNET_GNS_GTK_pseu_entry"))); + pseu_entry = GTK_ENTRY((GNUNET_SETUP_get_object ("GNUNET_SETUP_gns_pseu_entry"))); if (zc_ctx->label == NULL) GNUNET_asprintf(&zc_ctx->label, "%s", PSEU_EMPTY_STR); gtk_entry_set_text (pseu_entry, zc_ctx->label); - zc_ctx->gns->iteration = GNUNET_NO; + iteration = GNUNET_NO; GNUNET_free (zc_ctx->label); GNUNET_free (zc_ctx); + + /* FIXME: hide message 'loading' and make tree view visible! */ + return; } - struct GNUNET_CRYPTO_ShortHashAsciiEncoded shenc; GNUNET_CRYPTO_short_hash_to_enc(&zc_ctx->zone, &shenc); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Zone `%s' iteration result `%s', %u records\n", &shenc, name, rd_count); - - GNUNET_assert(GTK_IS_TREE_STORE(zc_ctx->gns->ts)); - gtk_tree_store_append(zc_ctx->gns->ts, &iter_name, NULL); - gtk_tree_store_set(zc_ctx->gns->ts, &iter_name, + gtk_tree_store_append (ts, &iter_name, NULL); + gtk_tree_store_set(ts, &iter_name, GNS_TREESTORE_COL_NAME, name, GNS_TREESTORE_COL_NAME_IS_VISIBLE, TRUE, GNS_TREESTORE_COL_RECORD_TYPE, 0, @@ -1182,7 +1223,7 @@ zone_iteration_proc (void *cls, if (GNUNET_SYSERR == GNUNET_NAMESTORE_check_name (name)) { - gtk_tree_store_set (zc_ctx->gns->ts, &iter_name, + gtk_tree_store_set (ts, &iter_name, GNS_TREESTORE_COL_NAME_COLOR, "red", -1); } @@ -1237,22 +1278,22 @@ zone_iteration_proc (void *cls, if ((0 ==strcmp (name, ROOT_STR)) && (GNUNET_NAMESTORE_TYPE_PSEU == rd[c].record_type)) { zc_ctx->label = strdup(val); - zc_ctx->gns->iteration = GNUNET_YES; + iteration = GNUNET_YES; } else { - gtk_tree_store_insert_with_values(zc_ctx->gns->ts, &iter_record , &iter_name, 0, - GNS_TREESTORE_COL_NAME, name, - GNS_TREESTORE_COL_NAME_IS_VISIBLE, FALSE, - GNS_TREESTORE_COL_RECORD_TYPE, rd[c].record_type, - GNS_TREESTORE_COL_RECORD_TYPE_AS_STR, type_str, - GNS_TREESTORE_COL_IS_PUBLIC, public, - GNS_TREESTORE_COL_EXP_TIME, exp_t, - GNS_TREESTORE_COL_EXP_TIME_AS_STR, exp, - GNS_TREESTORE_COL_EXP_TIME_IS_REL, time_is_relative, - GNS_TREESTORE_COL_VAL_AS_STR, val, + gtk_tree_store_insert_with_values (ts, &iter_record , &iter_name, 0, + GNS_TREESTORE_COL_NAME, name, + GNS_TREESTORE_COL_NAME_IS_VISIBLE, FALSE, + GNS_TREESTORE_COL_RECORD_TYPE, rd[c].record_type, + GNS_TREESTORE_COL_RECORD_TYPE_AS_STR, type_str, + GNS_TREESTORE_COL_IS_PUBLIC, public, + GNS_TREESTORE_COL_EXP_TIME, exp_t, + GNS_TREESTORE_COL_EXP_TIME_AS_STR, exp, + GNS_TREESTORE_COL_EXP_TIME_IS_REL, time_is_relative, + GNS_TREESTORE_COL_VAL_AS_STR, val, GNS_TREESTORE_COL_IS_RECORD_ROW, GNUNET_YES, - GNS_TREESTORE_COL_NOT_DUMMY_ROW, GNUNET_YES, + GNS_TREESTORE_COL_NOT_DUMMY_ROW, GNUNET_YES, -1); } GNUNET_free (type_str); @@ -1264,57 +1305,24 @@ zone_iteration_proc (void *cls, } -/** - * The zone treeview was realized. Setup the model. - * - * @param widget the widget - * @param user_data unused - */ -void -GNUNET_GNS_GTK_main_treeview_realize_cb (GtkWidget *widget, - gpointer user_data) -{ - struct GNUNET_GNS_Context *gns = user_data; - struct ZoneIteration_Context *zc_ctx; - GtkTreeIter toplevel; - - /* Append a top level row and leave it empty */ - gtk_tree_store_insert_with_values(gns->ts, &toplevel, NULL, 0, - GNS_TREESTORE_COL_NAME, _(NEW_NAME_STR), - GNS_TREESTORE_COL_NAME_IS_VISIBLE, TRUE, - GNS_TREESTORE_COL_RECORD_TYPE, 1, - GNS_TREESTORE_COL_IS_RECORD_ROW, GNUNET_NO, - GNS_TREESTORE_COL_NOT_DUMMY_ROW, GNUNET_NO, - -1); - - zc_ctx = GNUNET_malloc (sizeof (struct ZoneIteration_Context)); - zc_ctx->gns = user_data; - zc_ctx->zone = gns->zone; - zc_ctx->it = GNUNET_NAMESTORE_zone_iteration_start(gns->ns, &gns->zone, - GNUNET_NAMESTORE_RF_NONE, - GNUNET_NAMESTORE_RF_NONE, - &zone_iteration_proc, - zc_ctx); -} - - - static void pseu_change_cont (void *cls, int32_t success, const char *emsg) { - struct GNUNET_GNS_Context *gns = cls; GtkWidget *dialog; if (GNUNET_SYSERR == success) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("New Pseudonym could not be set: `%s'\n"), emsg); - dialog = gtk_message_dialog_new (GTK_WINDOW (gns->main_window), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - _("New Pseudonym could not be set: `%s'\n"), - emsg); + GtkWindow *main_window; + + main_window = GTK_WINDOW (GNUNET_SETUP_get_object ("GNUNET_setup_dialog")); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("New Pseudonym could not be set: `%s'\n"), emsg); + dialog = gtk_message_dialog_new (main_window, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _("New Pseudonym could not be set: `%s'\n"), + emsg); g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog); @@ -1323,41 +1331,8 @@ pseu_change_cont (void *cls, } -/** - * Task run on shutdown. - * - * @param cls unused - * @param tc scheduler context, unused - */ -static void -shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - - struct GNUNET_GNS_Context *gns = cls; - if (NULL == gns) - return; - if (NULL != gns->ns) - { - GNUNET_NAMESTORE_disconnect (gns->ns, GNUNET_NO); - gns->ns = NULL; - } - if (NULL != gns->pkey) - { - GNUNET_CRYPTO_rsa_key_free (gns->pkey); - gns->pkey = NULL; - } - if (NULL != zonekey_directory) - { - GNUNET_free (zonekey_directory); - zonekey_directory = NULL; - } - GNUNET_free (gns); -} - - - gboolean -GNUNET_GNS_GTK_pseu_entry_enter_cb (GtkWidget *widget, +GNUNET_SETUP_gns_pseu_entry_enter_cb (GtkWidget *widget, GdkEvent *event, gpointer user_data) { @@ -1383,15 +1358,14 @@ GNUNET_GNS_GTK_pseu_entry_enter_cb (GtkWidget *widget, * @param user_data unused */ void -GNUNET_GNS_GTK_pseu_entry_changed_cb (GtkEditable *editable, +GNUNET_SETUP_gns_pseu_entry_changed_cb (GtkEditable *editable, gpointer user_data) { - struct GNUNET_GNS_Context *gns = user_data; struct GNUNET_NAMESTORE_RecordData rd; const gchar * pseu; pseu = gtk_entry_get_text (GTK_ENTRY(editable)); - if ((pseu != NULL) && (0 != strcmp (pseu, PSEU_EMPTY_STR)) && (0 != strcmp ("", pseu)) && (GNUNET_NO == gns->iteration)) + if ((pseu != NULL) && (0 != strcmp (pseu, PSEU_EMPTY_STR)) && (0 != strcmp ("", pseu)) && (GNUNET_NO == iteration)) { rd.record_type = GNUNET_NAMESTORE_TYPE_PSEU; @@ -1399,7 +1373,7 @@ GNUNET_GNS_GTK_pseu_entry_changed_cb (GtkEditable *editable, rd.flags = GNUNET_NAMESTORE_RF_AUTHORITY; rd.data_size = strlen (pseu) + 1; rd.data = strdup (pseu); - GNUNET_NAMESTORE_record_create(gns->ns, gns->pkey, "+", &rd, pseu_change_cont, gns); + GNUNET_NAMESTORE_record_create (namestore, pkey, "+", &rd, &pseu_change_cont, NULL); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "New Pseudonym is `%s' %u\n", (char *) rd.data, rd.data_size); } else if ((0 != strcmp (pseu, PSEU_EMPTY_STR)) && ((pseu == NULL) || (0 == strcmp ("", pseu)))) @@ -1409,136 +1383,6 @@ GNUNET_GNS_GTK_pseu_entry_changed_cb (GtkEditable *editable, } -/** - * The user toggled the 'autoshort' option. Update the configuration. - * - * @param checkmenuitem the menu item - * @param user_data unused - */ -void -GNUNET_GNS_GTK_autoshort_imagemenuitem_toggled_cb (GtkCheckMenuItem *checkmenuitem, - gpointer user_data) -{ - struct GNUNET_GNS_Context *gns = user_data; - GtkWidget *dialog; - struct GNUNET_CONFIGURATION_Handle *cfg = (struct GNUNET_CONFIGURATION_Handle *) get_configuration(); - - gboolean state = gtk_check_menu_item_get_active (gns->shorten_menu); - if (TRUE == state) - GNUNET_CONFIGURATION_set_value_string(cfg,"gns", "AUTO_IMPORT_PKEY","YES"); - else - GNUNET_CONFIGURATION_set_value_string(cfg,"gns", "AUTO_IMPORT_PKEY","NO"); - - char * cfgfile = strdup (GNUNET_GTK_main_loop_get_configuration_file(ml)); - if (GNUNET_SYSERR == GNUNET_CONFIGURATION_write(cfg, cfgfile)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Changes to autoshorten could not be written to configuration file: `%s'\n"), cfgfile); - dialog = gtk_message_dialog_new (GTK_WINDOW (gns->main_window), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - _("Changes to autoshorten option could not be written to configuration file: `%s'\n"), - cfgfile); - g_signal_connect_swapped (dialog, "response", - G_CALLBACK (gtk_widget_destroy), - dialog); - gtk_widget_show_all (dialog); - } - GNUNET_free (cfgfile); -} - - -/** - * The user selected 'NEW' in the menu. Open a dialog to enter a filename - * to create a new zone (for editing). - * - * @param checkmenuitem the menu item - * @param user_data unused - */ -void -GNUNET_GNS_GTK_new_imagemenuitem_activate_cb (GtkMenuItem *menuitem, - gpointer user_data) -{ - GNUNET_break (0); // FIXME, not implemented -} - - -/** - * Function called from the open-directory dialog upon completion. - * - * @param dialog the pseudonym selection dialog - * @param response_id response code from the dialog - * @param user_data the builder of the dialog - */ -void -GNUNET_GNS_GTK_zone_open_dialog_response_cb (GtkDialog * dialog, - gint response_id, - gpointer user_data) -{ - char *filename; - - if (GTK_RESPONSE_OK != response_id) - { - gtk_widget_destroy (GTK_WIDGET (dialog)); - g_object_unref (G_OBJECT (dialog)); - return; - } - filename = GNUNET_GTK_filechooser_get_filename_utf8 (GTK_FILE_CHOOSER (dialog)); - gtk_widget_destroy (GTK_WIDGET (dialog)); - g_object_unref (G_OBJECT (dialog)); - - /* FIXME: move to new zone 'filename' */ - fprintf (stderr, "Got zone `%s'\n", filename); - GNUNET_free (filename); -} - - -/** - * The user selected 'OPEN' in the menu. Open a dialog to select - * a different zonefile (for editing). - * - * @param checkmenuitem the menu item - * @param user_data unused - */ -void -GNUNET_GNS_GTK_open_imagemenuitem_activate_cb (GtkMenuItem *menuitem, - gpointer user_data) -{ - GtkWidget *ad; - GtkBuilder *builder; - GtkWidget *toplevel; - GtkFileFilter *ff; - GtkFileChooser *fc; - - builder = - GNUNET_GTK_get_new_builder ("gnunet_gns_gtk_zone_open.glade", NULL); - if (NULL == builder) - { - GNUNET_break (0); - return; - } - /* This file filter could be set with glade if we use gtk3 - * With gtk2 we have to set it manually */ - ff = GTK_FILE_FILTER (gtk_builder_get_object - (builder, "GNUNET_GNS_GTK_zone_open_filefilter")); - gtk_file_filter_add_pattern (ff, "*.zkey"); - - ad = GTK_WIDGET (gtk_builder_get_object - (builder, "GNUNET_GNS_GTK_zone_open_filechooserdialog")); - - if (GTK_IS_FILE_CHOOSER(ad)) - { - fc = GTK_FILE_CHOOSER(ad); - if (NULL != fc) - gtk_file_chooser_set_current_folder(fc, zonekey_directory); - } - - toplevel = gtk_widget_get_toplevel (GTK_WIDGET (menuitem)); - if (GTK_IS_WINDOW (toplevel)) - gtk_window_set_transient_for (GTK_WINDOW (ad), GTK_WINDOW (toplevel)); - gtk_window_present (GTK_WINDOW (ad)); -} - /** * The user clicked on the 'copy' button. Copy the full string @@ -1548,7 +1392,7 @@ GNUNET_GNS_GTK_open_imagemenuitem_activate_cb (GtkMenuItem *menuitem, * @param user_data unused */ void -GNUNET_GNS_GTK_public_key_copy_button_clicked_cb (GtkButton *button, +GNUNET_SETUP_gns_public_key_copy_button_clicked_cb (GtkButton *button, gpointer user_data) { GtkClipboard *cb; @@ -1558,160 +1402,127 @@ GNUNET_GNS_GTK_public_key_copy_button_clicked_cb (GtkButton *button, } - /** - * Callback invoked if the application is supposed to exit (via menu). - * - * @param menuitem the quit menu - * @param user_data unused + * Connect to the namestore and initialize the main + * GNS tree view. */ void -GNUNET_GNS_GTK_quit_imagemenuitem_activate_cb (GtkMenuItem *menuitem, - gpointer user_data) +GNUNET_SETUP_gns_init () { - GNUNET_GTK_tray_icon_destroy (); - GNUNET_GTK_main_loop_quit (ml); - GNUNET_SCHEDULER_add_now (&shutdown_task, user_data); -} - - -/** - * Callback invoked if the application is supposed to exit (via window-close). - * - * @param widget the main window - * @param event deletion event - * @param user_data unused - */ -void -GNUNET_GNS_GTK_main_window_delete_event_cb (GtkWidget *widget, - GdkEvent *event, - gpointer user_data) -{ - GNUNET_GTK_tray_icon_destroy (); - GNUNET_GTK_main_loop_quit (ml); - GNUNET_SCHEDULER_add_now (&shutdown_task, user_data); -} - - -static void -close_error_box (GtkDialog *dialog, - gint response_id, - gpointer user_data) -{ - gtk_widget_destroy (GTK_WIDGET(dialog)); - GNUNET_GNS_GTK_shutdown (user_data); -} - - -static void -namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - struct GNUNET_GNS_Context *gns = NULL; struct GNUNET_CRYPTO_ShortHashAsciiEncoded shenc; - GtkWidget *dialog; char *label; char *keyfile; char *servicehome; + struct ZoneIteration_Context *zc_ctx; + GtkTreeIter toplevel; - gns = GNUNET_malloc (sizeof (struct GNUNET_GNS_Context)); - - if ((tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT) != 0) - { - char * message = _("Namestore service is not running!\n"); - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, message); - dialog = gtk_message_dialog_new (GTK_WINDOW (gns->main_window), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - "%s", - message); - - g_signal_connect (dialog, "response", G_CALLBACK(close_error_box), gns); - gtk_widget_show_all (dialog); - return; - } - - if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration (), + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (cfg, "PATHS", "SERVICEHOME", &servicehome)) { - GNUNET_asprintf(&zonekey_directory, ""); + GNUNET_asprintf (&zonekey_directory, ""); } else { - GNUNET_asprintf(&zonekey_directory, "%s%s%s",servicehome, DIR_SEPARATOR_STR, "gns"); + GNUNET_asprintf (&zonekey_directory, "%s%s%s",servicehome, DIR_SEPARATOR_STR, "gns"); GNUNET_free (servicehome); } /* setup crypto keys */ - if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration (), + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (cfg, "gns", "ZONEKEY", &keyfile)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Option `%s' missing in section `%s'\n"), "ZONEKEY", "gns"); + /* FIXME: display error message in GNS tab! */ return; } else GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Using `%s'\n", keyfile); - gns->pkey = GNUNET_CRYPTO_rsa_key_create_from_file (keyfile); + pkey = GNUNET_CRYPTO_rsa_key_create_from_file (keyfile); GNUNET_free (keyfile); keyfile = NULL; - if (NULL == gns->pkey) + if (NULL == pkey) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Failed to read or create private zone key\n")); + /* FIXME: display error message in GNS tab! */ return; } - GNUNET_CRYPTO_rsa_key_get_public (gns->pkey, &gns->pubkey); - GNUNET_CRYPTO_short_hash (&gns->pubkey, + GNUNET_CRYPTO_rsa_key_get_public (pkey, &pubkey); + GNUNET_CRYPTO_short_hash (&pubkey, sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), - &gns->zone); - GNUNET_CRYPTO_short_hash_to_enc(&gns->zone, &shenc); + &zone); + GNUNET_CRYPTO_short_hash_to_enc(&zone, &shenc); /* connect to namestore */ - gns->ns = GNUNET_NAMESTORE_connect (get_configuration ()); - if (NULL == gns->ns) + namestore = GNUNET_NAMESTORE_connect (cfg); + if (NULL == namestore) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Failed to connect to namestore\n")); + /* FIXME: display error message in GNS tab! */ return; } - - /* setup gui */ - if (GNUNET_OK != GNUNET_GTK_main_loop_build_window (ml, gns)) - { - GNUNET_break (0); - GNUNET_SCHEDULER_add_now (&shutdown_task, gns); - return; - } - gns->builder = GNUNET_GTK_main_loop_get_builder(ml); - gns->main_window = GTK_WIDGET (get_object ("GNUNET_GNS_GTK_main_window")); - gns->ts = GTK_TREE_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_treestore")); - gns->ls = GTK_LIST_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_type_liststore")); - gns->tv = GTK_TREE_VIEW (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_main_treeview")); - gns->tm = GTK_TREE_MODEL(gns->ts); - gns->shorten_menu = GTK_CHECK_MENU_ITEM(gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_autoshort_imagemenuitem")); - if (GNUNET_YES == GNUNET_CONFIGURATION_get_value_yesno (get_configuration (), - "gns", - "AUTO_IMPORT_PKEY")) - gtk_check_menu_item_set_active (gns->shorten_menu, TRUE); - else - gtk_check_menu_item_set_active (gns->shorten_menu, FALSE); - - /* TODO: implements menus */ - gtk_widget_set_visible (GTK_WIDGET (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_new_imagemenuitem")), FALSE); - gtk_widget_set_visible (GTK_WIDGET (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_open_imagemenuitem")), FALSE); - + /* FIXME: adjust names below... */ + ts = GTK_TREE_STORE (GNUNET_SETUP_get_object ("GNUNET_SETUP_gns_treestore")); + ls = GTK_LIST_STORE (GNUNET_SETUP_get_object ("GNUNET_SETUP_gns_type_liststore")); + tv = GTK_TREE_VIEW (GNUNET_SETUP_get_object ("GNUNET_SETUP_gns_main_treeview")); + tm = GTK_TREE_MODEL(ts); zone_as_string = GNUNET_strdup ((char *) &shenc); label = g_markup_printf_escaped (_("Editing zone %s"), zone_as_string); - gtk_label_set_markup (GTK_LABEL (get_object ("GNUNET_GNS_GTK_zone_label")), + gtk_label_set_markup (GTK_LABEL (GNUNET_SETUP_get_object ("GNUNET_SETUP_gns_zone_label")), label); g_free (label); + /* Load zone from namestore! */ + + /* Append a top level row and leave it empty */ + gtk_tree_store_insert_with_values (ts, &toplevel, NULL, 0, + GNS_TREESTORE_COL_NAME, _(NEW_NAME_STR), + GNS_TREESTORE_COL_NAME_IS_VISIBLE, TRUE, + GNS_TREESTORE_COL_RECORD_TYPE, 1, + GNS_TREESTORE_COL_IS_RECORD_ROW, GNUNET_NO, + GNS_TREESTORE_COL_NOT_DUMMY_ROW, GNUNET_NO, + -1); + + zc_ctx = GNUNET_malloc (sizeof (struct ZoneIteration_Context)); + zc_ctx->zone = zone; + zc_ctx->it = GNUNET_NAMESTORE_zone_iteration_start (namestore, &zone, + GNUNET_NAMESTORE_RF_NONE, + GNUNET_NAMESTORE_RF_NONE, + &zone_iteration_proc, + zc_ctx); + /* FIXME: show message 'loading', when done make tree view visible! */ +} + + +/** + * Disconnect from the namestore and clean up the main + * GNS tree view. + */ +void +GNUNET_SETUP_gns_done () +{ + if (NULL != namestore) + { + GNUNET_NAMESTORE_disconnect (namestore, GNUNET_NO); + namestore = NULL; + } + if (NULL != pkey) + { + GNUNET_CRYPTO_rsa_key_free (pkey); + pkey = NULL; + } + if (NULL != zonekey_directory) + { + GNUNET_free (zonekey_directory); + zonekey_directory = NULL; + } } diff --git a/src/setup/gnunet-setup-gns.h b/src/setup/gnunet-setup-gns.h new file mode 100644 index 00000000..8a5a78b2 --- /dev/null +++ b/src/setup/gnunet-setup-gns.h @@ -0,0 +1,47 @@ +/* + This file is part of GNUnet. + (C) 2012 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/setup/gnunet-setup-gns.h + * @brief gns interaction management + * @author Christian Grothoff + */ +#ifndef GNUNET_SETUP_GNS_H +#define GNUNET_SETUP_GNS_H + +#include "gnunet-setup.h" + + +/** + * Connect to the namestore and initialize the main + * GNS tree view. + */ +void +GNUNET_SETUP_gns_init (void); + + +/** + * Disconnect from the namestore and clean up the main + * GNS tree view. + */ +void +GNUNET_SETUP_gns_done (void); + +#endif diff --git a/src/setup/gnunet-setup.c b/src/setup/gnunet-setup.c index f93cb853..c425822f 100644 --- a/src/setup/gnunet-setup.c +++ b/src/setup/gnunet-setup.c @@ -28,6 +28,7 @@ #endif #include "gnunet-setup.h" #include "gnunet-setup-options.h" +#include "gnunet-setup-gns.h" #include /** @@ -317,6 +318,7 @@ cleanup_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) } GNUNET_GTK_main_loop_quit (ml); ml = NULL; + GNUNET_SETUP_gns_done (); if (GNUNET_OK != write_configuration ()) gret = 1; cfg = NULL; @@ -349,15 +351,17 @@ GNUNET_SETUP_restart_namestore (void *cls, { if (GNUNET_OK != write_configuration ()) return; /* no point in re-starting namestore ... */ + GNUNET_SETUP_gns_done (); if (NULL != namestore) { GNUNET_break (0 == GNUNET_OS_process_kill (namestore, SIGTERM)); GNUNET_OS_process_destroy (namestore); namestore = NULL; } - /* FIXME: start namestore */ - /* FIXME: refresh namestore model! */ - GNUNET_break (0); // not implemented... + namestore = + GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-namestore", + "gnunet-service-namestore", NULL); + GNUNET_SETUP_gns_init (); } @@ -396,8 +400,12 @@ run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) main_window = GTK_WIDGET (GNUNET_SETUP_get_object ("GNUNET_setup_dialog")); resolver = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-resolver", - "gnunet-service-resolver", NULL); + "gnunet-service-resolver", NULL); + namestore = + GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-namestore", + "gnunet-service-namestore", NULL); load_options (); + GNUNET_SETUP_gns_init (); gtk_widget_show (main_window); gtk_window_present (GTK_WINDOW (main_window)); } -- cgit v1.2.3