---
 src/service.c |   48 +++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 45 insertions(+), 3 deletions(-)

diff --git a/src/service.c b/src/service.c
index 44184cb..ba23b4a 100644
--- a/src/service.c
+++ b/src/service.c
@@ -218,6 +218,40 @@ static void emit_msg_status_changed(const char *path, 
const char *new_status)
        g_dbus_send_message(connection, signal);
 }
 
+static void emit_msg_delivery_changed(const char *path, const char *rec,
+                                                       const char *status)
+{
+       DBusMessage *signal;
+       DBusMessageIter iter;
+       DBusMessageIter variant;
+       const char *type = "delivery_report";
+
+       signal = dbus_message_new_signal(path, MMS_MESSAGE_INTERFACE,
+                                                       "ReportChanged");
+       if (signal == NULL)
+               return;
+
+       dbus_message_iter_init_append(signal, &iter);
+
+       dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &type);
+
+       dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+                                       DBUS_TYPE_STRING_AS_STRING, &variant);
+
+       dbus_message_iter_append_basic(&variant, DBUS_TYPE_STRING, &rec);
+
+       dbus_message_iter_close_container(&iter, &variant);
+
+       dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+                                       DBUS_TYPE_STRING_AS_STRING, &variant);
+
+       dbus_message_iter_append_basic(&variant, DBUS_TYPE_STRING, &status);
+
+       dbus_message_iter_close_container(&iter, &variant);
+
+       g_dbus_send_message(connection, signal);
+}
+
 static DBusMessage *msg_mark_read(DBusConnection *conn,
                                        DBusMessage *msg, void *user_data)
 {
@@ -269,6 +303,10 @@ static const GDBusMethodTable message_methods[] = {
 static const GDBusSignalTable message_signals[] = {
        { GDBUS_SIGNAL("PropertyChanged",
                        GDBUS_ARGS({ "name", "s" }, { "value", "v" })) },
+       { GDBUS_SIGNAL("ReportChanged",
+                       GDBUS_ARGS({ "name", "s" },
+                                       { "rec", "v" },
+                                       { "status", "v" })) },
        { }
 };
 
@@ -1369,6 +1407,7 @@ static void process_delivery_ind_notification(struct 
mms_service *service,
        char uuid[MMS_META_UUID_LEN + 1];
        char *path;
        char *to;
+       const char *new_status;
 
        if (get_meta_by_msgid(service, di_msg->di.msgid, uuid) == FALSE)
                goto bail;
@@ -1381,15 +1420,18 @@ static void process_delivery_ind_notification(struct 
mms_service *service,
 
        mms_address_to_string(to);
 
-       g_key_file_set_string(meta, "delivery_status", to,
-                               delivery_status[di_msg->di.dr_status - 127]);
+       new_status = delivery_status[di_msg->di.dr_status - 127];
 
-       g_free(to);
+       g_key_file_set_string(meta, "delivery_status", to, new_status);
 
        mms_store_meta_close(service->identity, uuid, meta, TRUE);
 
        path = g_strdup_printf("%s/%s/%s", MMS_PATH, service->identity, uuid);
 
+       emit_msg_delivery_changed(path, to, new_status);
+
+       g_free(to);
+
        g_free(path);
 
 bail:
-- 
1.7.9.5

_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to