| 56 pointers (nodes) and the corresponding handles (ids). */ |
57 pointers (nodes) and the corresponding handles (ids). */ |
| 57 |
58 |
| 58 static GHashTable *map_node_id; |
59 static GHashTable *map_node_id; |
| 59 static GHashTable *map_id_node; |
60 static GHashTable *map_id_node; |
| 60 static GHashTable *map_id_type; |
61 static GHashTable *map_id_type; |
| |
62 |
| |
63 static gchar *init_error; |
| 61 |
64 |
| 62 |
65 |
| 63 /* This function initializes the pointer-id traslation system. It |
66 /* This function initializes the pointer-id traslation system. It |
| 64 creates the three above hashtables and defines parents of some types. |
67 creates the three above hashtables and defines parents of some types. |
| 65 */ |
68 */ |
| 227 } |
230 } |
| 228 else { |
231 else { |
| 229 DBusMessageIter *sub; |
232 DBusMessageIter *sub; |
| 230 sub = va_arg (var_args, DBusMessageIter*); |
233 sub = va_arg (var_args, DBusMessageIter*); |
| 231 dbus_message_iter_recurse(iter, sub); |
234 dbus_message_iter_recurse(iter, sub); |
| 232 g_print("subiter %i:%i\n", (int) sub, * (int*) sub); |
235 gaim_debug_info("dbus", "subiter %p:%p\n", sub, * (gpointer*) sub); |
| 233 break; /* for testing only! */ |
236 break; /* for testing only! */ |
| 234 } |
237 } |
| 235 |
238 |
| 236 spec_type = va_arg (var_args, int); |
239 spec_type = va_arg (var_args, int); |
| 237 if (!dbus_message_iter_next(iter) && spec_type != DBUS_TYPE_INVALID) { |
240 if (!dbus_message_iter_next(iter) && spec_type != DBUS_TYPE_INVALID) { |
| 380 DBusConnection *gaim_dbus_get_connection(void) { |
383 DBusConnection *gaim_dbus_get_connection(void) { |
| 381 return gaim_dbus_connection; |
384 return gaim_dbus_connection; |
| 382 } |
385 } |
| 383 |
386 |
| 384 #include "dbus-bindings.c" |
387 #include "dbus-bindings.c" |
| 385 |
|
| 386 void *gaim_dbus_get_handle(void) { |
|
| 387 static int handle; |
|
| 388 |
|
| 389 return &handle; |
|
| 390 } |
|
| 391 |
388 |
| 392 static gboolean |
389 static gboolean |
| 393 gaim_dbus_dispatch_cb(DBusConnection *connection, |
390 gaim_dbus_dispatch_cb(DBusConnection *connection, |
| 394 DBusMessage *message, |
391 DBusMessage *message, |
| 395 void *user_data) |
392 void *user_data) |
| 476 |
473 |
| 477 text = bindings[i].parameters; |
474 text = bindings[i].parameters; |
| 478 while (*text) { |
475 while (*text) { |
| 479 const char *name, *direction, *type; |
476 const char *name, *direction, *type; |
| 480 |
477 |
| 481 direction = gettext(&text); |
478 direction = dbus_gettext(&text); |
| 482 type = gettext(&text); |
479 type = dbus_gettext(&text); |
| 483 name = gettext(&text); |
480 name = dbus_gettext(&text); |
| 484 |
481 |
| 485 g_string_append_printf(str, |
482 g_string_append_printf(str, |
| 486 "<arg name='%s' type='%s' direction='%s'/>\n", |
483 "<arg name='%s' type='%s' direction='%s'/>\n", |
| 487 name, type, direction); |
484 name, type, direction); |
| 488 } |
485 } |
| 537 bindings); |
534 bindings); |
| 538 } |
535 } |
| 539 |
536 |
| 540 |
537 |
| 541 |
538 |
| 542 static gboolean gaim_dbus_dispatch_init(void) |
539 static void gaim_dbus_dispatch_init(void) |
| 543 { |
540 { |
| 544 static DBusObjectPathVTable vtable = {NULL, &gaim_dbus_dispatch, NULL, NULL, NULL, NULL}; |
541 static DBusObjectPathVTable vtable = {NULL, &gaim_dbus_dispatch, NULL, NULL, NULL, NULL}; |
| 545 |
542 |
| 546 DBusError error; |
543 DBusError error; |
| 547 int result; |
544 int result; |
| 548 |
545 |
| 549 dbus_error_init (&error); |
546 dbus_error_init (&error); |
| 550 gaim_dbus_connection = dbus_bus_get (DBUS_BUS_STARTER, &error); |
547 gaim_dbus_connection = dbus_bus_get (DBUS_BUS_STARTER, &error); |
| 551 |
548 |
| 552 if (gaim_dbus_connection == NULL) { |
549 if (gaim_dbus_connection == NULL) { |
| 553 gaim_debug_error("dbus", "Failed to get connection\n"); |
550 init_error = g_strdup_printf(N_("Failed to get connection: %s"), error.message); |
| 554 dbus_error_free(&error); |
551 dbus_error_free(&error); |
| 555 return FALSE; |
552 return; |
| 556 } |
553 } |
| 557 |
554 |
| 558 if (!dbus_connection_register_object_path (gaim_dbus_connection, |
555 if (!dbus_connection_register_object_path (gaim_dbus_connection, |
| 559 DBUS_PATH_GAIM, &vtable, NULL)) |
556 DBUS_PATH_GAIM, &vtable, NULL)) |
| 560 { |
557 { |
| 561 gaim_debug_error("dbus", "Failed to get name: %s\n", error.name); |
558 init_error = g_strdup_printf(N_("Failed to get name: %s"), error.name); |
| 562 dbus_error_free(&error); |
559 dbus_error_free(&error); |
| 563 return FALSE; |
560 return; |
| 564 } |
561 } |
| 565 |
562 |
| 566 |
563 |
| 567 result = dbus_bus_request_name (gaim_dbus_connection, DBUS_SERVICE_GAIM, |
564 result = dbus_bus_request_name (gaim_dbus_connection, DBUS_SERVICE_GAIM, |
| 568 0, &error); |
565 0, &error); |
| 569 |
566 |
| 570 if (dbus_error_is_set (&error)) { |
567 if (dbus_error_is_set (&error)) { |
| 571 dbus_connection_unref(gaim_dbus_connection); |
568 dbus_connection_unref(gaim_dbus_connection); |
| 572 dbus_error_free(&error); |
569 dbus_error_free(&error); |
| 573 gaim_dbus_connection = NULL; |
570 gaim_dbus_connection = NULL; |
| 574 gaim_debug_error("dbus", "Failed to get serv name: %s\n", error.name); |
571 init_error = g_strdup_printf(N_("Failed to get serv name: %s"), error.name); |
| 575 return FALSE; |
572 return; |
| 576 } |
573 } |
| 577 |
574 |
| 578 dbus_connection_setup_with_g_main(gaim_dbus_connection, NULL); |
575 dbus_connection_setup_with_g_main(gaim_dbus_connection, NULL); |
| 579 |
576 |
| 580 gaim_debug_misc ("dbus", "okkk\n"); |
577 gaim_debug_misc ("dbus", "okkk\n"); |
| 588 gaim_signal_register(gaim_dbus_get_handle(), "dbus-introspect", |
585 gaim_signal_register(gaim_dbus_get_handle(), "dbus-introspect", |
| 589 gaim_marshal_VOID__POINTER, NULL, 1, |
586 gaim_marshal_VOID__POINTER, NULL, 1, |
| 590 gaim_value_new_outgoing(GAIM_TYPE_POINTER)); |
587 gaim_value_new_outgoing(GAIM_TYPE_POINTER)); |
| 591 |
588 |
| 592 GAIM_DBUS_REGISTER_BINDINGS(gaim_dbus_get_handle()); |
589 GAIM_DBUS_REGISTER_BINDINGS(gaim_dbus_get_handle()); |
| 593 |
|
| 594 return TRUE; |
|
| 595 } |
590 } |
| 596 |
591 |
| 597 |
592 |
| 598 |
593 |
| 599 /**************************************************************************/ |
594 /**************************************************************************/ |
| 707 |
702 |
| 708 g_free(newname); |
703 g_free(newname); |
| 709 dbus_message_unref(signal); |
704 dbus_message_unref(signal); |
| 710 } |
705 } |
| 711 |
706 |
| 712 |
707 const char * |
| 713 |
708 gaim_dbus_get_init_error(void) |
| 714 |
709 { |
| 715 |
710 return init_error; |
| 716 |
711 } |
| 717 gboolean gaim_dbus_init(void) |
712 |
| |
713 void * |
| |
714 gaim_dbus_get_handle(void) |
| |
715 { |
| |
716 static int handle; |
| |
717 |
| |
718 return &handle; |
| |
719 } |
| |
720 |
| |
721 void |
| |
722 gaim_dbus_init(void) |
| 718 { |
723 { |
| 719 gaim_dbus_init_ids(); |
724 gaim_dbus_init_ids(); |
| 720 return gaim_dbus_dispatch_init() ; |
725 |
| 721 } |
726 g_free(init_error); |
| 722 |
727 init_error = NULL; |
| 723 |
728 gaim_dbus_dispatch_init(); |
| |
729 if (init_error != NULL) |
| |
730 gaim_debug_error("dbus", "%s\n", init_error); |
| |
731 } |
| |
732 |
| |
733 void |
| |
734 gaim_dbus_uninit(void) |
| |
735 { |
| |
736 /* Surely we must do SOME kind of uninitialization? */ |
| |
737 |
| |
738 g_free(init_error); |
| |
739 init_error = NULL; |
| |
740 } |