static ETrustPromptResponse e_trust_prompt_run_with_dialog_ready_callback (GtkWindow *parent, const gchar *source_extension, const gchar *source_display_name, const gchar *host, const gchar *certificate_pem, GTlsCertificateFlags certificate_errors, const gchar *error_text, void (* dialog_ready_cb) (GtkDialog *dialog, gpointer user_data), gpointer user_data) { ETrustPromptResponse response = E_TRUST_PROMPT_RESPONSE_UNKNOWN; GcrParser *parser; GcrParsed *parsed = NULL; GError *local_error = NULL; if (parent) g_return_val_if_fail (GTK_IS_WINDOW (parent), E_TRUST_PROMPT_RESPONSE_UNKNOWN); g_return_val_if_fail (host != NULL, E_TRUST_PROMPT_RESPONSE_UNKNOWN); g_return_val_if_fail (certificate_pem != NULL, E_TRUST_PROMPT_RESPONSE_UNKNOWN); /* Continue even if PKCS#11 module registration fails. * Certificate details won't display correctly but the * user can still respond to the prompt. */ gcr_pkcs11_initialize (NULL, &local_error); if (local_error != NULL) { g_warning ("%s: gcr_pkcs11_initialize() call failed: %s", G_STRFUNC, local_error->message); g_clear_error (&local_error); } parser = gcr_parser_new (); g_signal_connect ( parser, "parsed", G_CALLBACK (trust_prompt_parser_parsed_cb), &parsed); gcr_parser_parse_data (parser, (const guchar *) certificate_pem, strlen (certificate_pem), &local_error); g_object_unref (parser); /* Sanity check. */ g_warn_if_fail ( ((parsed != NULL) && (local_error == NULL)) || ((parsed == NULL) && (local_error != NULL))); if (parsed != NULL) { gchar *reason; reason = e_trust_prompt_describe_certificate_errors (certificate_errors); response = trust_prompt_show (parent, source_extension, source_display_name, host, error_text, parsed, reason, dialog_ready_cb, user_data); gcr_parsed_unref (parsed); g_free (reason); } g_clear_error (&local_error); return response; }
static void test_request (const gchar *path) { GcrParser *parser; GError *err = NULL; guchar *data; gsize n_data; GtkWidget *dialog; GBytes *bytes; if (!g_file_get_contents (path, (gchar**)&data, &n_data, NULL)) g_error ("couldn't read file: %s", path); dialog = gtk_dialog_new (); g_object_ref_sink (dialog); parser = gcr_parser_new (); g_signal_connect (parser, "parsed", G_CALLBACK (on_parser_parsed), dialog); bytes = g_bytes_new_take (data, n_data); if (!gcr_parser_parse_data (parser, data, n_data, &err)) g_error ("couldn't parse data: %s", err->message); g_object_unref (parser); g_bytes_unref (bytes); gtk_widget_show (dialog); g_signal_connect (dialog, "delete-event", G_CALLBACK (gtk_main_quit), NULL); gtk_main (); g_object_unref (dialog); }
static void test_certificate (const gchar *path) { GcrParser *parser; GError *err = NULL; guchar *data; gsize n_data; if (!g_file_get_contents (path, (gchar**)&data, &n_data, NULL)) g_error ("couldn't read file: %s", path); parser = gcr_parser_new (); g_signal_connect (parser, "parsed", G_CALLBACK (on_parser_parsed), NULL); if (!gcr_parser_parse_data (parser, data, n_data, &err)) g_error ("couldn't parse data: %s", err->message); g_object_unref (parser); g_free (data); }
static void state_parse_buffer (GcrImporter *self, gboolean async) { GError *error = NULL; GcrParser *parser; gulong parsed_conn; gulong auth_conn; gboolean ret; g_assert (GCR_IS_IMPORTER (self)); g_assert (self->pv->buffer); parser = gcr_importer_get_parser (self); g_object_ref (parser); /* Listen in to the parser */ parsed_conn = g_signal_connect (parser, "parsed", G_CALLBACK (on_parser_parsed), self); auth_conn = g_signal_connect (parser, "authenticate", G_CALLBACK (on_parser_authenticate), self); ret = gcr_parser_parse_data (parser, self->pv->buffer->data, self->pv->buffer->len, &error); /* An optimization to free data early as possible */ g_byte_array_free (self->pv->buffer, TRUE); self->pv->buffer = NULL; g_signal_handler_disconnect (parser, parsed_conn); g_signal_handler_disconnect (parser, auth_conn); g_object_unref (parser); if (ret == TRUE) { next_state (self, state_import_prompt); } else { g_propagate_error (&self->pv->error, error); next_state (self, state_failure); } }