6 # define DBUS_API_SUBJECT_TO_CHANGE
17 copy_message(DBusMessageIter *from, DBusMessageIter *to)
20 printf(" copy message\n");
21 while((type = dbus_message_iter_get_arg_type(from)) != DBUS_TYPE_INVALID)
23 printf(" copy type: %c\n", type);
24 if (dbus_type_is_basic(type))
26 /* XXX is int64 big enough to hold all basic types? */
28 dbus_message_iter_get_basic(from, &val);
29 dbus_message_iter_append_basic(to, type, &val);
31 else if (dbus_type_is_container(type))
35 subtype = dbus_message_iter_get_element_type(from);
36 if (type == DBUS_TYPE_ARRAY && dbus_type_is_fixed(subtype))
40 dbus_message_iter_get_fixed_array(from, &val, &n);
41 dbus_message_iter_append_fixed_array(to, subtype, val, n);
45 DBusMessageIter fsub, tsub;
47 dbus_message_iter_recurse(from, &fsub);
48 sig = dbus_message_iter_get_signature(&fsub);
49 dbus_message_iter_open_container(to, type, sig, &tsub);
50 copy_message(&fsub, &tsub);
51 dbus_message_iter_close_container(to, &tsub);
54 dbus_message_iter_next(from);
59 cb_repeat(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
62 DBusMessageIter from, to;
64 printf("\n\nREPEAT\n--------\n");
65 reply = dbus_message_new_method_return(msg);
66 dbus_message_iter_init(msg, &from);
67 dbus_message_iter_init_append(reply, &to);
69 copy_message(&from, &to);
74 cb_request_name(void *data __UNUSED__, DBusMessage *msg __UNUSED__, DBusError *err __UNUSED__)
76 // XXX check that this actually succeeded and handle errors...
77 printf("request name\n");
81 _setup(E_DBus_Connection *conn)
83 E_DBus_Object *repeater;
84 E_DBus_Interface *iface;
85 e_dbus_request_name(conn, "org.e.Repeater", 0, cb_request_name, NULL);
86 repeater = e_dbus_object_add(conn, "/org/e/Repeater", NULL);
87 iface = e_dbus_interface_new("org.e.Repeater");
88 e_dbus_interface_method_add(iface, "Repeat", NULL, NULL, cb_repeat);
89 e_dbus_object_interface_attach(repeater, iface);
96 E_DBus_Connection *conn;
100 conn = e_dbus_bus_get(DBUS_BUS_SESSION);
104 if (_setup(conn)) ecore_main_loop_begin();
105 e_dbus_connection_close(conn);