Mercurial > pidgin
comparison libpurple/dbus-server.c @ 27502:3bb1085235d0
propagate from branch 'im.pidgin.pidgin' (head 90138fae4d2350d166f730736ecea9ee8e20ecdb)
to branch 'im.pidgin.cpw.darkrain42.roster' (head 04af1d94534183574e72b50b268b425b4cac2a33)
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Sun, 12 Jul 2009 02:56:06 +0000 |
parents | 3a0552df3379 |
children | 5ef119455f0d |
comparison
equal
deleted
inserted
replaced
27501:6d26258e9f1d | 27502:3bb1085235d0 |
---|---|
419 { | 419 { |
420 return purple_dbus_connection; | 420 return purple_dbus_connection; |
421 } | 421 } |
422 | 422 |
423 #include "dbus-bindings.c" | 423 #include "dbus-bindings.c" |
424 #include "dbus-signals.c" | |
424 | 425 |
425 static gboolean | 426 static gboolean |
426 purple_dbus_dispatch_cb(DBusConnection *connection, | 427 purple_dbus_dispatch_cb(DBusConnection *connection, |
427 DBusMessage *message, void *user_data) | 428 DBusMessage *message, void *user_data) |
428 { | 429 { |
487 static DBusMessage *purple_dbus_introspect(DBusMessage *message) | 488 static DBusMessage *purple_dbus_introspect(DBusMessage *message) |
488 { | 489 { |
489 DBusMessage *reply; | 490 DBusMessage *reply; |
490 GString *str; | 491 GString *str; |
491 GList *bindings_list, *node; | 492 GList *bindings_list, *node; |
493 const char *signals; | |
494 const char *type; | |
495 const char *pointer_type; | |
492 | 496 |
493 str = g_string_sized_new(0x1000); /* TODO: why this size? */ | 497 str = g_string_sized_new(0x1000); /* TODO: why this size? */ |
494 | 498 |
495 g_string_append(str, "<!DOCTYPE node PUBLIC '-//freedesktop//DTD D-BUS Object Introspection 1.0//EN' 'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>\n"); | 499 g_string_append(str, "<!DOCTYPE node PUBLIC '-//freedesktop//DTD D-BUS Object Introspection 1.0//EN' 'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>\n"); |
496 g_string_append_printf(str, "<node name='%s'>\n", DBUS_PATH_PURPLE); | 500 g_string_append_printf(str, "<node name='%s'>\n", DBUS_PATH_PURPLE); |
526 name, type, direction); | 530 name, type, direction); |
527 } | 531 } |
528 g_string_append(str, "</method>\n"); | 532 g_string_append(str, "</method>\n"); |
529 } | 533 } |
530 } | 534 } |
535 | |
536 if (sizeof(int) == sizeof(dbus_int32_t)) | |
537 pointer_type = "type='i'"; | |
538 else | |
539 pointer_type = "type='x'"; | |
540 | |
541 signals = dbus_signals; | |
542 while ((type = strstr(signals, "type='p'")) != NULL) { | |
543 g_string_append_len(str, signals, type - signals); | |
544 g_string_append(str, pointer_type); | |
545 signals = type + sizeof("type='p'") - 1; | |
546 } | |
547 g_string_append(str, signals); | |
531 | 548 |
532 g_string_append(str, "</interface>\n</node>\n"); | 549 g_string_append(str, "</interface>\n</node>\n"); |
533 | 550 |
534 reply = dbus_message_new_method_return(message); | 551 reply = dbus_message_new_method_return(message); |
535 dbus_message_append_args(reply, DBUS_TYPE_STRING, &(str->str), | 552 dbus_message_append_args(reply, DBUS_TYPE_STRING, &(str->str), |