src/dbus-server.c

changeset 14017
db3f1bdc95c6
parent 13765
3db4ba7f3482
child 14025
98bb9921edfa
equal deleted inserted replaced
14016:2d2e0f347601 14017:db3f1bdc95c6
34 #include "dbus-server.h" 34 #include "dbus-server.h"
35 #include "dbus-useful.h" 35 #include "dbus-useful.h"
36 #include "dbus-bindings.h" 36 #include "dbus-bindings.h"
37 #include "debug.h" 37 #include "debug.h"
38 #include "core.h" 38 #include "core.h"
39 #include "internal.h"
39 #include "savedstatuses.h" 40 #include "savedstatuses.h"
40 #include "value.h" 41 #include "value.h"
41 42
42 43
43 /**************************************************************************/ 44 /**************************************************************************/
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)
435 432
436 return FALSE; 433 return FALSE;
437 } 434 }
438 435
439 436
440 static const char *gettext(const char **ptr) { 437 static const char *dbus_gettext(const char **ptr) {
441 const char *text = *ptr; 438 const char *text = *ptr;
442 *ptr += strlen(text) + 1; 439 *ptr += strlen(text) + 1;
443 return text; 440 return text;
444 } 441 }
445 442
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 }

mercurial