aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-03-20 10:47:21 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-03-20 10:47:21 +0000
commit47276502d802e0a33693b79c855d9ca66d75f5ec (patch)
treebe24f5671da605d98e82c4f4b5a0dc5740e4e9ba
parentfeb2481e5564f7819e2c0ffc752e41f383a63351 (diff)
downloadgnunet-gtk-47276502d802e0a33693b79c855d9ca66d75f5ec.tar.gz
gnunet-gtk-47276502d802e0a33693b79c855d9ca66d75f5ec.zip
- namestore check
-rw-r--r--src/gns/gnunet-gns-gtk.c142
1 files changed, 67 insertions, 75 deletions
diff --git a/src/gns/gnunet-gns-gtk.c b/src/gns/gnunet-gns-gtk.c
index f7d8e42b..48b99066 100644
--- a/src/gns/gnunet-gns-gtk.c
+++ b/src/gns/gnunet-gns-gtk.c
@@ -92,7 +92,8 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
92{ 92{
93 93
94 struct GNUNET_GNS_Context *gns = cls; 94 struct GNUNET_GNS_Context *gns = cls;
95 GNUNET_assert (gns != NULL); 95 if (NULL == gns)
96 return;
96 if (NULL != gns->ns) 97 if (NULL != gns->ns)
97 { 98 {
98 GNUNET_NAMESTORE_disconnect (gns->ns, GNUNET_NO); 99 GNUNET_NAMESTORE_disconnect (gns->ns, GNUNET_NO);
@@ -113,11 +114,11 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
113 114
114 115
115void 116void
116GNUNET_GNS_GTK_shutdown (void *user_data) 117GNUNET_GNS_GTK_shutdown (struct GNUNET_GNS_Context *gns)
117{ 118{
118 GNUNET_GTK_tray_icon_destroy (); 119 GNUNET_GTK_tray_icon_destroy ();
119 GNUNET_GTK_main_loop_quit (ml); 120 GNUNET_GTK_main_loop_quit (ml);
120 GNUNET_SCHEDULER_add_now (&shutdown_task, user_data); 121 GNUNET_SCHEDULER_add_now (&shutdown_task, gns);
121} 122}
122 123
123 124
@@ -315,43 +316,84 @@ close_error_box (GtkDialog *dialog,
315 gint response_id, 316 gint response_id,
316 gpointer user_data) 317 gpointer user_data)
317{ 318{
318 struct GNUNET_GNS_Context *gns = user_data; 319 gtk_widget_destroy (GTK_WIDGET(dialog));
319 GNUNET_GNS_GTK_shutdown (gns); 320 GNUNET_GNS_GTK_shutdown (user_data);
320} 321}
321 322
322static void 323static void
323namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 324namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
324{ 325{
325 struct GNUNET_GNS_Context *gns = cls; 326 struct GNUNET_GNS_Context *gns = NULL;
326 struct GNUNET_CRYPTO_ShortHashAsciiEncoded shenc; 327 struct GNUNET_CRYPTO_ShortHashAsciiEncoded shenc;
328 GtkWidget *dialog;
327 char *label; 329 char *label;
330 char *keyfile;
328 331
329 if ((tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT) != 0) 332 if ((tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT) != 0)
330 { 333 {
331 char * message = _("Namestore service is not running!\n"); 334 char * message = _("Namestore service is not running!\n");
332 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 335 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, message);
333 message); 336 dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
334 GtkWidget *dialog, *label, *content_area; 337 GTK_DIALOG_DESTROY_WITH_PARENT,
335 dialog = gtk_dialog_new_with_buttons (_("ERROR"), 338 GTK_MESSAGE_ERROR,
336 GTK_WINDOW (main_window), 339 GTK_BUTTONS_CLOSE,
337 GTK_DIALOG_DESTROY_WITH_PARENT, 340 "%s",
338 GTK_STOCK_OK, 341 message);
339 GTK_RESPONSE_NONE, 342
340 NULL); 343 g_signal_connect (dialog, "response", G_CALLBACK(close_error_box), gns);
341 content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
342 label = gtk_label_new (message);
343 /* Ensure that the dialog box is destroyed when the user responds. */
344 g_signal_connect_swapped (dialog,
345 "response",
346 G_CALLBACK(close_error_box),
347 gns);
348 /* Add the label, and show everything we've added to the dialog. */
349 gtk_container_add (GTK_CONTAINER (content_area), label);
350 gtk_widget_show_all (dialog); 344 gtk_widget_show_all (dialog);
351 return; 345 return;
352 } 346 }
353 347
348 /* setup crypto keys */
349 gns = GNUNET_malloc (sizeof (struct GNUNET_GNS_Context));
350 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration (),
351 "gns",
352 "ZONEKEY",
353 &keyfile))
354 {
355 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
356 _("Option `%s' missing in section `%s'\n"), "ZONEKEY", "gns");
357 return;
358 }
359 else
360 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Using `%s'\n", keyfile);
361 gns->pkey = GNUNET_CRYPTO_rsa_key_create_from_file (keyfile);
362 GNUNET_free (keyfile);
363 keyfile = NULL;
364 if (NULL == gns->pkey)
365 {
366 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
367 _("Failed to read or create private zone key\n"));
368 return;
369 }
370 GNUNET_CRYPTO_rsa_key_get_public (gns->pkey, &gns->pubkey);
371 GNUNET_CRYPTO_short_hash (&gns->pubkey,
372 sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded),
373 &gns->zone);
354 GNUNET_CRYPTO_short_hash_to_enc(&gns->zone, &shenc); 374 GNUNET_CRYPTO_short_hash_to_enc(&gns->zone, &shenc);
375
376 /* connect to namestore */
377 gns->ns = GNUNET_NAMESTORE_connect (get_configuration ());
378 if (NULL == gns->ns)
379 {
380 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
381 _("Failed to connect to namestore\n"));
382 GNUNET_SCHEDULER_add_now (&shutdown_task, gns);
383 return;
384 }
385
386 /* setup gui */
387 if (GNUNET_OK != GNUNET_GTK_main_loop_build_window (ml, gns))
388 {
389 GNUNET_break (0);
390 GNUNET_SCHEDULER_add_now (&shutdown_task, gns);
391 return;
392 }
393 gns->builder = GNUNET_GTK_main_loop_get_builder(ml);
394 gns->ts = GTK_TREE_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_treestore"));
395 gns->ls = GTK_LIST_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_type_liststore"));
396
355 zone_as_string = GNUNET_strdup ((char *) &shenc); 397 zone_as_string = GNUNET_strdup ((char *) &shenc);
356 label = g_markup_printf_escaped (_("<b>Editing zone %s</b>"), 398 label = g_markup_printf_escaped (_("<b>Editing zone %s</b>"),
357 zone_as_string); 399 zone_as_string);
@@ -363,7 +405,6 @@ namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *t
363 GNUNET_GTK_setup_nls (); 405 GNUNET_GTK_setup_nls ();
364 /* setup main window */ 406 /* setup main window */
365 main_window = GTK_WIDGET (get_object ("GNUNET_GNS_GTK_main_window")); 407 main_window = GTK_WIDGET (get_object ("GNUNET_GNS_GTK_main_window"));
366 //gtk_window_maximize (GTK_WINDOW (main_window));
367 GNUNET_GTK_tray_icon_create (GTK_WINDOW (main_window), 408 GNUNET_GTK_tray_icon_create (GTK_WINDOW (main_window),
368 "gnunet-gtk" /* FIXME: different icon? */ , 409 "gnunet-gtk" /* FIXME: different icon? */ ,
369 "gnunet-gns-gtk"); 410 "gnunet-gns-gtk");
@@ -387,57 +428,8 @@ namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *t
387static void 428static void
388run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 429run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
389{ 430{
390 struct GNUNET_GNS_Context *gns = GNUNET_malloc (sizeof (struct GNUNET_GNS_Context));
391 char *keyfile;
392
393 ml = cls; 431 ml = cls;
394 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration (), 432 GNUNET_CLIENT_service_test("namestore", get_configuration(), GNUNET_TIME_UNIT_SECONDS, &namestore_service_check, NULL);
395 "gns",
396 "ZONEKEY",
397 &keyfile))
398 {
399 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
400 _("Option `%s' missing in section `%s'\n"),
401 "ZONEKEY", "gns");
402 return;
403 }
404 else
405 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
406 "Using `%s'\n", keyfile);
407 gns->pkey = GNUNET_CRYPTO_rsa_key_create_from_file (keyfile);
408 GNUNET_free (keyfile);
409 keyfile = NULL;
410 if (NULL == gns->pkey)
411 {
412 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
413 _("Failed to read or create private zone key\n"));
414 return;
415 }
416 GNUNET_CRYPTO_rsa_key_get_public (gns->pkey, &gns->pubkey);
417 GNUNET_CRYPTO_short_hash (&gns->pubkey, sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), &gns->zone);
418
419
420 gns->ns = GNUNET_NAMESTORE_connect (get_configuration ());
421 if (NULL == gns->ns)
422 {
423 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
424 _("Failed to connect to namestore\n"));
425 GNUNET_SCHEDULER_add_now (&shutdown_task, gns);
426 return;
427 }
428
429 if (GNUNET_OK != GNUNET_GTK_main_loop_build_window (ml, gns))
430 {
431 GNUNET_break (0);
432 GNUNET_SCHEDULER_add_now (&shutdown_task, gns);
433 return;
434 }
435 gns->builder = GNUNET_GTK_main_loop_get_builder(ml);
436 gns->ts = GTK_TREE_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_treestore"));
437 gns->ls = GTK_LIST_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_type_liststore"));
438 GNUNET_assert (NULL != gns->ts);
439
440 GNUNET_CLIENT_service_test("namestore", get_configuration(), GNUNET_TIME_UNIT_SECONDS, &namestore_service_check, gns);
441} 433}
442 434
443 435