From f6e77d54ae41bc5b96a3565268e563914a53cacd Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 4 Dec 2012 13:33:16 +0000 Subject: -adding custom dialogs for a few simple record types --- contrib/Makefile.am | 4 +- contrib/gnunet_setup_gns_edit_aaaa.glade | 4 +- contrib/gnunet_setup_gns_edit_cname.glade | 6 +- contrib/gnunet_setup_gns_edit_leho.glade | 4 +- contrib/gnunet_setup_gns_edit_mx.glade | 6 +- contrib/gnunet_setup_gns_edit_ns.glade | 4 +- contrib/gnunet_setup_gns_edit_pkey.glade | 6 +- contrib/gnunet_setup_gns_edit_ptr.glade | 4 +- contrib/gnunet_setup_gns_edit_soa.glade | 2 +- contrib/gnunet_setup_gns_edit_srv.glade | 2 +- contrib/gnunet_setup_gns_edit_txt.glade | 4 +- contrib/gnunet_setup_gns_edit_vpn.glade | 2 +- src/setup/gnunet-setup-gns-edit.c | 781 ++++++++++++++++++++++++++++++ src/setup/gnunet-setup-gns-edit.h | 70 +++ src/setup/gnunet-setup-gns.c | 18 +- 15 files changed, 891 insertions(+), 26 deletions(-) diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 9eab52cb..a2850246 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -62,8 +62,8 @@ pkgdata_DATA = \ gnunet_setup_gns_edit_pkey.glade \ gnunet_setup_gns_edit_leho.glade \ gnunet_setup_gns_edit_srv.glade \ - gnunet_setup_gns_edit_vpn.glade \ - gnunet_setup_gns_edit_pseu.glade + gnunet_setup_gns_edit_vpn.glade + install-data-local: $(mkinstalldirs) $(DESTDIR)$(pkgpixdir) diff --git a/contrib/gnunet_setup_gns_edit_aaaa.glade b/contrib/gnunet_setup_gns_edit_aaaa.glade index 98a6abd0..f2851a9d 100644 --- a/contrib/gnunet_setup_gns_edit_aaaa.glade +++ b/contrib/gnunet_setup_gns_edit_aaaa.glade @@ -24,7 +24,7 @@ center-on-parent True dialog - + True @@ -206,7 +206,7 @@ False True True - + False diff --git a/contrib/gnunet_setup_gns_edit_cname.glade b/contrib/gnunet_setup_gns_edit_cname.glade index a713d213..a4af339e 100644 --- a/contrib/gnunet_setup_gns_edit_cname.glade +++ b/contrib/gnunet_setup_gns_edit_cname.glade @@ -24,7 +24,7 @@ center-on-parent True dialog - + True @@ -200,13 +200,13 @@ True True Enter the name for which this name is an alias. - 15 + 253 False False True True - + False diff --git a/contrib/gnunet_setup_gns_edit_leho.glade b/contrib/gnunet_setup_gns_edit_leho.glade index 2727fa0b..ccd8aaaf 100644 --- a/contrib/gnunet_setup_gns_edit_leho.glade +++ b/contrib/gnunet_setup_gns_edit_leho.glade @@ -63,7 +63,7 @@ center-on-parent True dialog - + True @@ -245,7 +245,7 @@ False True True - + False diff --git a/contrib/gnunet_setup_gns_edit_mx.glade b/contrib/gnunet_setup_gns_edit_mx.glade index fa9997cc..d8aa2074 100644 --- a/contrib/gnunet_setup_gns_edit_mx.glade +++ b/contrib/gnunet_setup_gns_edit_mx.glade @@ -63,7 +63,7 @@ center-on-parent True dialog - + True @@ -239,13 +239,13 @@ True True Enter the hostname of the mail server here - 15 + 253 False False True True - + False diff --git a/contrib/gnunet_setup_gns_edit_ns.glade b/contrib/gnunet_setup_gns_edit_ns.glade index 500264ed..0eb32036 100644 --- a/contrib/gnunet_setup_gns_edit_ns.glade +++ b/contrib/gnunet_setup_gns_edit_ns.glade @@ -63,7 +63,7 @@ center-on-parent True dialog - + True @@ -245,7 +245,7 @@ False True True - + False diff --git a/contrib/gnunet_setup_gns_edit_pkey.glade b/contrib/gnunet_setup_gns_edit_pkey.glade index e37462a1..40d18554 100644 --- a/contrib/gnunet_setup_gns_edit_pkey.glade +++ b/contrib/gnunet_setup_gns_edit_pkey.glade @@ -63,7 +63,7 @@ center-on-parent True dialog - + True @@ -245,7 +245,7 @@ False True True - + False @@ -258,7 +258,7 @@ - + True False <b>GADS authority for the subzone (PKEY)</b> diff --git a/contrib/gnunet_setup_gns_edit_ptr.glade b/contrib/gnunet_setup_gns_edit_ptr.glade index 5a9d7959..394e7ac4 100644 --- a/contrib/gnunet_setup_gns_edit_ptr.glade +++ b/contrib/gnunet_setup_gns_edit_ptr.glade @@ -63,7 +63,7 @@ center-on-parent True dialog - + True @@ -245,7 +245,7 @@ False True True - + False diff --git a/contrib/gnunet_setup_gns_edit_soa.glade b/contrib/gnunet_setup_gns_edit_soa.glade index 8c31df61..00ef0874 100644 --- a/contrib/gnunet_setup_gns_edit_soa.glade +++ b/contrib/gnunet_setup_gns_edit_soa.glade @@ -92,7 +92,7 @@ center-on-parent True dialog - + True diff --git a/contrib/gnunet_setup_gns_edit_srv.glade b/contrib/gnunet_setup_gns_edit_srv.glade index 0835716a..2cec54e1 100644 --- a/contrib/gnunet_setup_gns_edit_srv.glade +++ b/contrib/gnunet_setup_gns_edit_srv.glade @@ -78,7 +78,7 @@ center-on-parent True dialog - + True diff --git a/contrib/gnunet_setup_gns_edit_txt.glade b/contrib/gnunet_setup_gns_edit_txt.glade index 27206616..037d4c62 100644 --- a/contrib/gnunet_setup_gns_edit_txt.glade +++ b/contrib/gnunet_setup_gns_edit_txt.glade @@ -63,7 +63,7 @@ center-on-parent True dialog - + True @@ -245,7 +245,7 @@ False True True - + False diff --git a/contrib/gnunet_setup_gns_edit_vpn.glade b/contrib/gnunet_setup_gns_edit_vpn.glade index 6cba2839..3a30c20b 100644 --- a/contrib/gnunet_setup_gns_edit_vpn.glade +++ b/contrib/gnunet_setup_gns_edit_vpn.glade @@ -63,7 +63,7 @@ center-on-parent True dialog - + True diff --git a/src/setup/gnunet-setup-gns-edit.c b/src/setup/gnunet-setup-gns-edit.c index f790572b..b5e4026d 100644 --- a/src/setup/gnunet-setup-gns-edit.c +++ b/src/setup/gnunet-setup-gns-edit.c @@ -567,4 +567,785 @@ GNS_edit_dialog_a (struct EditDialogContext *edc) } +/* ************************ AAAA records *********************** */ + +/** + * Check validity of the value in the edit dialog for AAAA-records. + * Then call the shared validity check if the result is OK. + * + * @param edc edit dialog context + */ +static void +edit_dialog_aaaa_validity_check (struct EditDialogContext *edc) +{ + GtkEditable *entry; + const gchar *preedit; + struct in6_addr v6; + + entry = GTK_EDITABLE (gtk_builder_get_object (edc->builder, + "edit_dialog_aaaa_entry")), + preedit = gtk_editable_get_chars (entry, 0, -1); + if ( (NULL == preedit) || + (1 != inet_pton (AF_INET6, preedit, &v6)) ) + { + edit_dialog_disable_save (edc); + return; + } + edit_dialog_check_save (edc); +} + + +/** + * Editing dialog was closed, get the data and call the + * continuation. + * + * @param dialog editing dialog + * @param user_data the 'struct EditDialogContext' + */ +void +GNS_edit_aaaa_dialog_response_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + GtkEntry *entry; + const gchar *value; + + if (GTK_RESPONSE_OK == response_id) + { + edit_dialog_putes_common_elements (edc); + entry = GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_aaaa_entry")); + value = gtk_entry_get_text (entry); + g_free (edc->n_value); + edc->n_value = g_strdup (value); + } + gtk_widget_destroy (GTK_WIDGET (edc->dialog)); + g_object_unref (edc->builder); + edc->builder = NULL; + edc->cont (edc, response_id); +} + + +/** + * The user has edited the AAAA record value. Enable/disable 'save' + * button depending on the validity of the value. + * + * @param entry editing widget + * @param preedit new value + * @param user_data the 'struct EditDialogContext' of the dialog + */ +void +GNS_edit_dialog_aaaa_entry_changed_cb (GtkEditable *entry, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + + edit_dialog_a_validity_check (edc); +} + + +/** + * Run an GNS Edit dialog for an 'AAAA' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_aaaa (struct EditDialogContext *edc) +{ + edc->builder = GNUNET_GTK_get_new_builder ("gnunet_setup_gns_edit_aaaa.glade", + edc); + if (NULL == edc->builder) + { + GNUNET_break (0); + edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ + return; + } + if (GNUNET_YES == + edc->old_record_in_namestore) + { + /* set AAAA record */ + gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_aaaa_entry")), + edc->n_value); + } + edc->validator = &edit_dialog_aaaa_validity_check; + edc->dialog = GTK_DIALOG (gtk_builder_get_object (edc->builder, + "edit_aaaa_dialog")); + run_edit_dialog (edc); +} + + +/* ************************ CNAME records *********************** */ + +/** + * Check validity of the value in the edit dialog for AAAA-records. + * Then call the shared validity check if the result is OK. + * + * @param edc edit dialog context + */ +static void +edit_dialog_cname_validity_check (struct EditDialogContext *edc) +{ + GtkEditable *entry; + const gchar *preedit; + + entry = GTK_EDITABLE (gtk_builder_get_object (edc->builder, + "edit_dialog_cname_entry")), + preedit = gtk_editable_get_chars (entry, 0, -1); + if ( (NULL == preedit) || + (GNUNET_OK != GNUNET_DNSPARSER_check_name (preedit)) ) + { + edit_dialog_disable_save (edc); + return; + } + edit_dialog_check_save (edc); +} + + +/** + * Editing dialog was closed, get the data and call the + * continuation. + * + * @param dialog editing dialog + * @param user_data the 'struct EditDialogContext' + */ +void +GNS_edit_cname_dialog_response_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + GtkEntry *entry; + const gchar *value; + + if (GTK_RESPONSE_OK == response_id) + { + edit_dialog_putes_common_elements (edc); + entry = GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_cname_entry")); + value = gtk_entry_get_text (entry); + g_free (edc->n_value); + edc->n_value = g_strdup (value); + } + gtk_widget_destroy (GTK_WIDGET (edc->dialog)); + g_object_unref (edc->builder); + edc->builder = NULL; + edc->cont (edc, response_id); +} + + +/** + * The user has edited the CNAME record value. Enable/disable 'save' + * button depending on the validity of the value. + * + * @param entry editing widget + * @param preedit new value + * @param user_data the 'struct EditDialogContext' of the dialog + */ +void +GNS_edit_dialog_cname_entry_changed_cb (GtkEditable *entry, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + + edit_dialog_cname_validity_check (edc); +} + + +/** + * Run an GNS Edit dialog for an 'CNAME' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_cname (struct EditDialogContext *edc) +{ + edc->builder = GNUNET_GTK_get_new_builder ("gnunet_setup_gns_edit_cname.glade", + edc); + if (NULL == edc->builder) + { + GNUNET_break (0); + edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ + return; + } + if (GNUNET_YES == + edc->old_record_in_namestore) + { + /* set CNAME record */ + gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_cname_entry")), + edc->n_value); + } + edc->validator = &edit_dialog_cname_validity_check; + edc->dialog = GTK_DIALOG (gtk_builder_get_object (edc->builder, + "edit_cname_dialog")); + run_edit_dialog (edc); +} + + +/* ************************ LEHO records *********************** */ + +/** + * Check validity of the value in the edit dialog for LEHO-records. + * Then call the shared validity check if the result is OK. + * + * @param edc edit dialog context + */ +static void +edit_dialog_leho_validity_check (struct EditDialogContext *edc) +{ + GtkEditable *entry; + const gchar *preedit; + + entry = GTK_EDITABLE (gtk_builder_get_object (edc->builder, + "edit_dialog_leho_entry")), + preedit = gtk_editable_get_chars (entry, 0, -1); + if ( (NULL == preedit) || + (GNUNET_OK != GNUNET_DNSPARSER_check_name (preedit)) ) + { + edit_dialog_disable_save (edc); + return; + } + edit_dialog_check_save (edc); +} + + +/** + * Editing dialog was closed, get the data and call the + * continuation. + * + * @param dialog editing dialog + * @param user_data the 'struct EditDialogContext' + */ +void +GNS_edit_leho_dialog_response_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + GtkEntry *entry; + const gchar *value; + + if (GTK_RESPONSE_OK == response_id) + { + edit_dialog_putes_common_elements (edc); + entry = GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_leho_entry")); + value = gtk_entry_get_text (entry); + g_free (edc->n_value); + edc->n_value = g_strdup (value); + } + gtk_widget_destroy (GTK_WIDGET (edc->dialog)); + g_object_unref (edc->builder); + edc->builder = NULL; + edc->cont (edc, response_id); +} + + +/** + * The user has edited the LEHO record value. Enable/disable 'save' + * button depending on the validity of the value. + * + * @param entry editing widget + * @param preedit new value + * @param user_data the 'struct EditDialogContext' of the dialog + */ +void +GNS_edit_dialog_leho_entry_changed_cb (GtkEditable *entry, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + + edit_dialog_leho_validity_check (edc); +} + + +/** + * Run an GNS Edit dialog for an 'LEHO' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_leho (struct EditDialogContext *edc) +{ + edc->builder = GNUNET_GTK_get_new_builder ("gnunet_setup_gns_edit_leho.glade", + edc); + if (NULL == edc->builder) + { + GNUNET_break (0); + edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ + return; + } + if (GNUNET_YES == + edc->old_record_in_namestore) + { + /* set LEHO record */ + gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_leho_entry")), + edc->n_value); + } + edc->validator = &edit_dialog_leho_validity_check; + edc->dialog = GTK_DIALOG (gtk_builder_get_object (edc->builder, + "edit_leho_dialog")); + run_edit_dialog (edc); +} + + +/* ************************ MX records *********************** */ + +/** + * Check validity of the value in the edit dialog for MX-records. + * Then call the shared validity check if the result is OK. + * + * @param edc edit dialog context + */ +static void +edit_dialog_mx_validity_check (struct EditDialogContext *edc) +{ + GtkEditable *entry; + const gchar *preedit; + + entry = GTK_EDITABLE (gtk_builder_get_object (edc->builder, + "edit_dialog_mx_entry")), + preedit = gtk_editable_get_chars (entry, 0, -1); + if ( (NULL == preedit) || + (GNUNET_OK != GNUNET_DNSPARSER_check_name (preedit)) ) + { + edit_dialog_disable_save (edc); + return; + } + edit_dialog_check_save (edc); +} + + +/** + * Editing dialog was closed, get the data and call the + * continuation. + * + * @param dialog editing dialog + * @param user_data the 'struct EditDialogContext' + */ +void +GNS_edit_mx_dialog_response_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + GtkEntry *entry; + const gchar *value; + char *result; + unsigned int distance; + + if (GTK_RESPONSE_OK == response_id) + { + edit_dialog_putes_common_elements (edc); + entry = GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_mx_entry")); + value = gtk_entry_get_text (entry); + distance = gtk_spin_button_get_value (GTK_SPIN_BUTTON (gtk_builder_get_object (edc->builder, + "edit_dialog_mx_distance_spinbutton"))); + g_free (edc->n_value); + GNUNET_asprintf (&result, + "%hu,%s", + distance, + value); + edc->n_value = g_strdup (result); + GNUNET_free (result); + } + gtk_widget_destroy (GTK_WIDGET (edc->dialog)); + g_object_unref (edc->builder); + edc->builder = NULL; + edc->cont (edc, response_id); +} + + +/** + * The user has edited the MX record value. Enable/disable 'save' + * button depending on the validity of the value. + * + * @param entry editing widget + * @param preedit new value + * @param user_data the 'struct EditDialogContext' of the dialog + */ +void +GNS_edit_dialog_mx_entry_changed_cb (GtkEditable *entry, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + + edit_dialog_mx_validity_check (edc); +} + + +/** + * Run an GNS Edit dialog for an 'MX' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_mx (struct EditDialogContext *edc) +{ + uint16_t mx_pref; + char result[253 + 1]; + + edc->builder = GNUNET_GTK_get_new_builder ("gnunet_setup_gns_edit_mx.glade", + edc); + if (NULL == edc->builder) + { + GNUNET_break (0); + edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ + return; + } + if (GNUNET_YES == + edc->old_record_in_namestore) + { + if (2 != SSCANF(edc->n_value, + "%hu,%253s", &mx_pref, result)) + { + GNUNET_break (0); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Unable to parse MX record `%s'\n"), + edc->n_value); + } + else + { + gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_mx_entry")), + result); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object (edc->builder, + "edit_dialog_mx_distance_spinbutton")), + mx_pref); + } + } + edc->validator = &edit_dialog_mx_validity_check; + edc->dialog = GTK_DIALOG (gtk_builder_get_object (edc->builder, + "edit_mx_dialog")); + run_edit_dialog (edc); +} + + +/* ************************ NS records *********************** */ + +/** + * Check validity of the value in the edit dialog for NS-records. + * Then call the shared validity check if the result is OK. + * + * @param edc edit dialog context + */ +static void +edit_dialog_ns_validity_check (struct EditDialogContext *edc) +{ + GtkEditable *entry; + const gchar *preedit; + + entry = GTK_EDITABLE (gtk_builder_get_object (edc->builder, + "edit_dialog_ns_entry")), + preedit = gtk_editable_get_chars (entry, 0, -1); + if ( (NULL == preedit) || + (GNUNET_OK != GNUNET_DNSPARSER_check_name (preedit)) ) + { + edit_dialog_disable_save (edc); + return; + } + edit_dialog_check_save (edc); +} + + +/** + * Editing dialog was closed, get the data and call the + * continuation. + * + * @param dialog editing dialog + * @param user_data the 'struct EditDialogContext' + */ +void +GNS_edit_ns_dialog_response_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + GtkEntry *entry; + const gchar *value; + + if (GTK_RESPONSE_OK == response_id) + { + edit_dialog_putes_common_elements (edc); + entry = GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_ns_entry")); + value = gtk_entry_get_text (entry); + g_free (edc->n_value); + edc->n_value = g_strdup (value); + } + gtk_widget_destroy (GTK_WIDGET (edc->dialog)); + g_object_unref (edc->builder); + edc->builder = NULL; + edc->cont (edc, response_id); +} + + +/** + * The user has edited the NS record value. Enable/disable 'save' + * button depending on the validity of the value. + * + * @param entry editing widget + * @param preedit new value + * @param user_data the 'struct EditDialogContext' of the dialog + */ +void +GNS_edit_dialog_ns_entry_changed_cb (GtkEditable *entry, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + + edit_dialog_ns_validity_check (edc); +} + + +/** + * Run an GNS Edit dialog for an 'NS' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_ns (struct EditDialogContext *edc) +{ + edc->builder = GNUNET_GTK_get_new_builder ("gnunet_setup_gns_edit_ns.glade", + edc); + if (NULL == edc->builder) + { + GNUNET_break (0); + edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ + return; + } + if (GNUNET_YES == + edc->old_record_in_namestore) + { + /* set NS record */ + gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_ns_entry")), + edc->n_value); + } + edc->validator = &edit_dialog_ns_validity_check; + edc->dialog = GTK_DIALOG (gtk_builder_get_object (edc->builder, + "edit_ns_dialog")); + run_edit_dialog (edc); +} + + + +/* ************************ PTR records *********************** */ + +/** + * Check validity of the value in the edit dialog for PTR-records. + * Then call the shared validity check if the result is OK. + * + * @param edc edit dialog context + */ +static void +edit_dialog_ptr_validity_check (struct EditDialogContext *edc) +{ + GtkEditable *entry; + const gchar *preedit; + + entry = GTK_EDITABLE (gtk_builder_get_object (edc->builder, + "edit_dialog_ptr_entry")), + preedit = gtk_editable_get_chars (entry, 0, -1); + if ( (NULL == preedit) || + (GNUNET_OK != GNUNET_DNSPARSER_check_name (preedit)) ) + { + edit_dialog_disable_save (edc); + return; + } + edit_dialog_check_save (edc); +} + + +/** + * Editing dialog was closed, get the data and call the + * continuation. + * + * @param dialog editing dialog + * @param user_data the 'struct EditDialogContext' + */ +void +GNS_edit_ptr_dialog_response_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + GtkEntry *entry; + const gchar *value; + + if (GTK_RESPONSE_OK == response_id) + { + edit_dialog_putes_common_elements (edc); + entry = GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_ptr_entry")); + value = gtk_entry_get_text (entry); + g_free (edc->n_value); + edc->n_value = g_strdup (value); + } + gtk_widget_destroy (GTK_WIDGET (edc->dialog)); + g_object_unref (edc->builder); + edc->builder = NULL; + edc->cont (edc, response_id); +} + + +/** + * The user has edited the PTR record value. Enable/disable 'save' + * button depending on the validity of the value. + * + * @param entry editing widget + * @param preedit new value + * @param user_data the 'struct EditDialogContext' of the dialog + */ +void +GNS_edit_dialog_ptr_entry_changed_cb (GtkEditable *entry, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + + edit_dialog_ptr_validity_check (edc); +} + + +/** + * Run an GNS Edit dialog for an 'PTR' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_ptr (struct EditDialogContext *edc) +{ + edc->builder = GNUNET_GTK_get_new_builder ("gnunet_setup_gns_edit_ptr.glade", + edc); + if (NULL == edc->builder) + { + GNUNET_break (0); + edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ + return; + } + if (GNUNET_YES == + edc->old_record_in_namestore) + { + /* set PTR record */ + gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_ptr_entry")), + edc->n_value); + } + edc->validator = &edit_dialog_ptr_validity_check; + edc->dialog = GTK_DIALOG (gtk_builder_get_object (edc->builder, + "edit_ptr_dialog")); + run_edit_dialog (edc); +} + + +/* ************************ TXT records *********************** */ + +/** + * Check validity of the value in the edit dialog for TXT-records. + * Then call the shared validity check if the result is OK. + * + * @param edc edit dialog context + */ +static void +edit_dialog_txt_validity_check (struct EditDialogContext *edc) +{ + edit_dialog_check_save (edc); +} + + +/** + * Editing dialog was closed, get the data and call the + * continuation. + * + * @param dialog editing dialog + * @param user_data the 'struct EditDialogContext' + */ +void +GNS_edit_txt_dialog_response_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + GtkEntry *entry; + const gchar *value; + + if (GTK_RESPONSE_OK == response_id) + { + edit_dialog_putes_common_elements (edc); + entry = GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_txt_entry")); + value = gtk_entry_get_text (entry); + g_free (edc->n_value); + edc->n_value = g_strdup (value); + } + gtk_widget_destroy (GTK_WIDGET (edc->dialog)); + g_object_unref (edc->builder); + edc->builder = NULL; + edc->cont (edc, response_id); +} + + +/** + * The user has edited the TXT record value. Enable/disable 'save' + * button depending on the validity of the value. + * + * @param entry editing widget + * @param preedit new value + * @param user_data the 'struct EditDialogContext' of the dialog + */ +void +GNS_edit_dialog_txt_entry_changed_cb (GtkEditable *entry, + gpointer user_data) +{ + struct EditDialogContext *edc = user_data; + + edit_dialog_txt_validity_check (edc); +} + + +/** + * Run an GNS Edit dialog for an 'TXT' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_txt (struct EditDialogContext *edc) +{ + edc->builder = GNUNET_GTK_get_new_builder ("gnunet_setup_gns_edit_txt.glade", + edc); + if (NULL == edc->builder) + { + GNUNET_break (0); + edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ + return; + } + if (GNUNET_YES == + edc->old_record_in_namestore) + { + /* set TXT record */ + gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (edc->builder, + "edit_dialog_txt_entry")), + edc->n_value); + } + edc->validator = &edit_dialog_txt_validity_check; + edc->dialog = GTK_DIALOG (gtk_builder_get_object (edc->builder, + "edit_txt_dialog")); + run_edit_dialog (edc); +} + + + + + /* end of gnunet-setup-gns-edit.c */ diff --git a/src/setup/gnunet-setup-gns-edit.h b/src/setup/gnunet-setup-gns-edit.h index 97403d34..71d1bde7 100644 --- a/src/setup/gnunet-setup-gns-edit.h +++ b/src/setup/gnunet-setup-gns-edit.h @@ -174,4 +174,74 @@ void GNS_edit_dialog_a (struct EditDialogContext *edc); +/** + * Run an GNS Edit dialog for an 'AAAA' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_aaaa (struct EditDialogContext *edc); + + +/** + * Run an GNS Edit dialog for an 'CNAME' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_cname (struct EditDialogContext *edc); + + +/** + * Run an GNS Edit dialog for an 'LEHO' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_leho (struct EditDialogContext *edc); + + +/** + * Run an GNS Edit dialog for an 'MX' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_mx (struct EditDialogContext *edc); + + +/** + * Run an GNS Edit dialog for an 'NS' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_ns (struct EditDialogContext *edc); + + +/** + * Run an GNS Edit dialog for an 'PTR' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_ptr (struct EditDialogContext *edc); + + +/** + * Run an GNS Edit dialog for an 'TXT' Record. + * + * @param cont continuation to call when done + * @param edc editing context to use + */ +void +GNS_edit_dialog_txt (struct EditDialogContext *edc); + + #endif diff --git a/src/setup/gnunet-setup-gns.c b/src/setup/gnunet-setup-gns.c index 7c0b2f5e..bc8f5365 100644 --- a/src/setup/gnunet-setup-gns.c +++ b/src/setup/gnunet-setup-gns.c @@ -1424,16 +1424,30 @@ edit_selected_row (int old_record_in_namestore) GNS_edit_dialog_a (edc); break; case GNUNET_DNSPARSER_TYPE_NS: + GNS_edit_dialog_ns (edc); + break; case GNUNET_DNSPARSER_TYPE_CNAME: - case GNUNET_DNSPARSER_TYPE_SOA: + GNS_edit_dialog_cname (edc); + break; case GNUNET_DNSPARSER_TYPE_PTR: + GNS_edit_dialog_ptr (edc); + break; case GNUNET_DNSPARSER_TYPE_MX: + GNS_edit_dialog_mx (edc); + break; case GNUNET_DNSPARSER_TYPE_TXT: + GNS_edit_dialog_txt (edc); + break; case GNUNET_DNSPARSER_TYPE_AAAA: + GNS_edit_dialog_aaaa (edc); + break; + case GNUNET_NAMESTORE_TYPE_LEHO: + GNS_edit_dialog_leho (edc); + break; + case GNUNET_DNSPARSER_TYPE_SOA: case GNUNET_DNSPARSER_TYPE_SRV: case GNUNET_DNSPARSER_TYPE_TLSA: case GNUNET_NAMESTORE_TYPE_PKEY: - case GNUNET_NAMESTORE_TYPE_LEHO: case GNUNET_NAMESTORE_TYPE_VPN: GNUNET_break (0); /* FIXME - implement (#2465) */ edc->cont (edc, GTK_RESPONSE_CANCEL); /* treat as 'cancel' */ -- cgit v1.2.3