void message_emit_added(struct message *m, const char *interface) { DBusMessage *signal; DBusMessageIter iter; DBusMessageIter dict; const char *path; const char *atompath = __ofono_atom_get_path(m->atom); signal = dbus_message_new_signal(atompath, interface, "MessageAdded"); if (signal == NULL) return; path = message_path_from_uuid(m->atom, &m->uuid); dbus_message_iter_init_append(signal, &iter); dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH, &path); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, OFONO_PROPERTIES_ARRAY_SIGNATURE, &dict); message_append_properties(m, &dict); dbus_message_iter_close_container(&iter, &dict); g_dbus_send_message(ofono_dbus_get_connection(), signal); }
static DBusMessage *sms_get_messages(DBusConnection *conn, DBusMessage *msg, void *data) { struct ofono_sms *sms = data; DBusMessage *reply; DBusMessageIter iter; DBusMessageIter array; DBusMessageIter entry, dict; const char *path; GHashTableIter hashiter; gpointer key, value; struct message *m; const struct ofono_uuid *uuid; reply = dbus_message_new_method_return(msg); if (reply == NULL) return NULL; dbus_message_iter_init_append(reply, &iter); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, DBUS_STRUCT_BEGIN_CHAR_AS_STRING DBUS_TYPE_OBJECT_PATH_AS_STRING DBUS_TYPE_ARRAY_AS_STRING DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING DBUS_STRUCT_END_CHAR_AS_STRING, &array); g_hash_table_iter_init(&hashiter, sms->messages); while (g_hash_table_iter_next(&hashiter, &key, &value)) { m = value; uuid = message_get_uuid(m); path = __ofono_sms_message_path_from_uuid(sms, uuid); dbus_message_iter_open_container(&array, DBUS_TYPE_STRUCT, NULL, &entry); dbus_message_iter_append_basic(&entry, DBUS_TYPE_OBJECT_PATH, &path); dbus_message_iter_open_container(&entry, DBUS_TYPE_ARRAY, OFONO_PROPERTIES_ARRAY_SIGNATURE, &dict); message_append_properties(m, &dict); dbus_message_iter_close_container(&entry, &dict); dbus_message_iter_close_container(&array, &entry); } dbus_message_iter_close_container(&iter, &array); return reply; }
static DBusMessage *message_get_properties(DBusConnection *conn, DBusMessage *msg, void *data) { struct message *m = data; DBusMessage *reply; DBusMessageIter iter; DBusMessageIter dict; reply = dbus_message_new_method_return(msg); if (reply == NULL) return NULL; dbus_message_iter_init_append(reply, &iter); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, OFONO_PROPERTIES_ARRAY_SIGNATURE, &dict); message_append_properties(m, &dict); dbus_message_iter_close_container(&iter, &dict); return reply; }