---
 src/sms.c |   41 +++++++++++++++++++++++++++--------------
 1 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/src/sms.c b/src/sms.c
index 9bf7feb..e6a2f9c 100644
--- a/src/sms.c
+++ b/src/sms.c
@@ -1064,12 +1064,24 @@ static gboolean compute_incoming_msgid(GSList *sms_list,
        return TRUE;
 }
 
-static void dispatch_app_datagram(struct ofono_sms *sms, int dst, int src,
-                                       unsigned char *buf, long len)
+static void dispatch_app_datagram(struct ofono_sms *sms,
+                                       const struct ofono_uuid *uuid,
+                                       int dst, int src,
+                                       unsigned char *buf, unsigned len,
+                                       const struct sms_address *addr,
+                                       const struct sms_scts *scts)
 {
-       DBG("Got app datagram for dst port: %d, src port: %d",
-                       dst, src);
-       DBG("Contents-Len: %ld", len);
+       struct ofono_modem *modem = __ofono_atom_get_modem(sms->atom);
+       const char *sender = sms_address_to_string(addr);
+       time_t ts;
+       struct tm remote;
+       struct tm local;
+
+       ts = sms_scts_to_time(scts, &remote);
+       localtime_r(&ts, &local);
+
+       __ofono_history_datagram_received(modem, uuid, sender, dst, src,
+                                               &remote, &local, buf, len);
 }
 
 static void dispatch_text_message(struct ofono_sms *sms,
@@ -1141,6 +1153,7 @@ static void sms_dispatch(struct ofono_sms *sms, GSList 
*sms_list)
 {
        GSList *l;
        const struct sms *s;
+       struct ofono_uuid uuid;
        enum sms_charset uninitialized_var(old_charset);
        enum sms_class cls;
        int srcport = -1;
@@ -1214,6 +1227,11 @@ static void sms_dispatch(struct ofono_sms *sms, GSList 
*sms_list)
                }
        }
 
+       if (!compute_incoming_msgid(sms_list, &uuid))
+               return;
+
+       s = sms_list->data;
+
        /* Handle datagram */
        if (old_charset == SMS_CHARSET_8BIT) {
                unsigned char *buf;
@@ -1230,23 +1248,18 @@ static void sms_dispatch(struct ofono_sms *sms, GSList 
*sms_list)
                if (!buf)
                        return;
 
-               dispatch_app_datagram(sms, dstport, srcport, buf, len);
+               dispatch_app_datagram(sms, &uuid, dstport, srcport, buf, len,
+                                       &s->deliver.oaddr, &s->deliver.scts);
 
                g_free(buf);
        } else {
-               struct ofono_uuid uuid;
                char *message = sms_decode_text(sms_list);
 
                if (!message)
                        return;
 
-               if (compute_incoming_msgid(sms_list, &uuid)) {
-                       s = sms_list->data;
-
-                       dispatch_text_message(sms, &uuid, message, cls,
-                                               &s->deliver.oaddr,
-                                               &s->deliver.scts);
-               }
+               dispatch_text_message(sms, &uuid, message, cls,
+                                       &s->deliver.oaddr, &s->deliver.scts);
 
                g_free(message);
        }
-- 
1.7.0.4

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to