static void seahorse_hkp_source_search_async (SeahorseServerSource *source, const gchar *match, GcrSimpleCollection *results, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { SeahorseHKPSource *self = SEAHORSE_HKP_SOURCE (source); source_search_closure *closure; GSimpleAsyncResult *res; SoupMessage *message; GHashTable *form; SoupURI *uri; gchar hexfpr[11]; res = g_simple_async_result_new (G_OBJECT (source), callback, user_data, seahorse_hkp_source_search_async); closure = g_new0 (source_search_closure, 1); closure->source = g_object_ref (self); closure->cancellable = cancellable ? g_object_ref (cancellable) : NULL; closure->session = create_hkp_soup_session (); closure->results = g_object_ref (results); g_simple_async_result_set_op_res_gpointer (res, closure, source_search_free); uri = get_http_server_uri (self, "/pks/lookup"); g_return_if_fail (uri); form = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (form, "op", "index"); if (is_hex_keyid (match)) { strncpy (hexfpr, "0x", 3); strncpy (hexfpr + 2, match, 9); g_hash_table_insert (form, "search", hexfpr); } else { g_hash_table_insert (form, "search", (char *)match); } g_hash_table_insert (form, "fingerprint", "on"); soup_uri_set_query_from_form (uri, form); g_hash_table_destroy (form); message = soup_message_new_from_uri ("GET", uri); soup_session_queue_message (closure->session, message, on_search_message_complete, g_object_ref (res)); seahorse_progress_prep_and_begin (cancellable, message, NULL); if (cancellable) closure->cancelled_sig = g_cancellable_connect (cancellable, G_CALLBACK (on_session_cancelled), closure->session, NULL); soup_uri_free (uri); g_object_unref (res); }
static SeahorseOperation* seahorse_hkp_source_search (SeahorseSource *src, const gchar *match) { SeahorseHKPOperation *hop; SoupMessage *message; GHashTable *form; gchar *t; SoupURI *uri; gchar hexfpr[11]; g_assert (SEAHORSE_IS_SOURCE (src)); g_assert (SEAHORSE_IS_HKP_SOURCE (src)); hop = setup_hkp_operation (SEAHORSE_HKP_SOURCE (src)); uri = get_http_server_uri (src, "/pks/lookup"); g_return_val_if_fail (uri, FALSE); form = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (form, "op", "index"); if (is_hex_keyid (match)) { strncpy (hexfpr, "0x", 3); strncpy (hexfpr + 2, match, 9); g_hash_table_insert (form, "search", hexfpr); } else g_hash_table_insert (form, "search", (char *)match); soup_uri_set_query_from_form (uri, form); g_hash_table_destroy (form); message = soup_message_new_from_uri ("GET", uri); soup_session_queue_message (hop->session, message, (SoupSessionCallback)refresh_callback, hop); hop->total = hop->requests = 1; t = g_strdup_printf (_("Searching for keys on: %s"), uri->host); seahorse_operation_mark_progress (SEAHORSE_OPERATION (hop), t, -1); g_free (t); soup_uri_free (uri); seahorse_server_source_take_operation (SEAHORSE_SERVER_SOURCE (src), SEAHORSE_OPERATION (hop)); g_object_ref (hop); return SEAHORSE_OPERATION (hop); }