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),