obexd/client: Add support for MAP Event Report 1.1 48/32948/1 accepted/tizen/common/20150106.082126 accepted/tizen/ivi/20150112.091102 accepted/tizen/mobile/20150106.115704 accepted/tizen/tv/20150106.115522 accepted/tizen/wearable/20150106.115554 submit/tizen/20150105.030815
authorGowtham Anandha Babu <gowtham.ab@samsung.com>
Tue, 30 Dec 2014 14:26:57 +0000 (19:56 +0530)
committerGowtham Anandha Babu <gowtham.ab@samsung.com>
Tue, 30 Dec 2014 14:26:57 +0000 (19:56 +0530)
This adds support for Event Report 1.1 of MAP 1.2 which includes the
following atributes: Subject, datetime, sender_name, priority.

Adds null check for event values and fix leaking memory on event attributes.

Taken from upstream:
http://git.kernel.org/cgit/bluetooth/bluez.git/commit/?id=bb57098100a9f47b1a0f6e2be8aa0a85a2d33384
http://git.kernel.org/cgit/bluetooth/bluez.git/commit/?id=60ebd27931f2f9241e1ddad521af36c0ed991524
http://git.kernel.org/cgit/bluetooth/bluez.git/commit/?id=7e03d3d92f726176718d855b771c95702726014c

Change-Id: If007c3fb03cfc36295e7424e6585f96b4a09010f

obexd/client/map-event.h
obexd/client/mns.c

index ba5d5d2..5414b26 100644 (file)
@@ -41,6 +41,10 @@ struct map_event {
        char *folder;
        char *old_folder;
        char *msg_type;
+       char *datetime;
+       char *subject;
+       char *sender_name;
+       char *priority;
 };
 
 /* Handle notification in map client.
index d638886..43b0502 100644 (file)
@@ -191,8 +191,7 @@ static void parse_event_report_handle(struct map_event *event,
 static void parse_event_report_folder(struct map_event *event,
                                                        const char *value)
 {
-       if (!value)
-               return;
+       g_free(event->folder);
 
        if (g_str_has_prefix(value, "/"))
                event->folder = g_strdup(value);
@@ -203,8 +202,7 @@ static void parse_event_report_folder(struct map_event *event,
 static void parse_event_report_old_folder(struct map_event *event,
                                                        const char *value)
 {
-       if (!value)
-               return;
+       g_free(event->old_folder);
 
        if (g_str_has_prefix(value, "/"))
                event->old_folder = g_strdup(value);
@@ -215,9 +213,38 @@ static void parse_event_report_old_folder(struct map_event *event,
 static void parse_event_report_msg_type(struct map_event *event,
                                                        const char *value)
 {
+       g_free(event->msg_type);
        event->msg_type = g_strdup(value);
 }
 
+static void parse_event_report_date_time(struct map_event *event,
+                                                       const char *value)
+{
+       g_free(event->datetime);
+       event->datetime = g_strdup(value);
+}
+
+static void parse_event_report_subject(struct map_event *event,
+                                                       const char *value)
+{
+       g_free(event->subject);
+       event->subject = g_strdup(value);
+}
+
+static void parse_event_report_sender_name(struct map_event *event,
+                                                       const char *value)
+{
+       g_free(event->sender_name);
+       event->sender_name = g_strdup(value);
+}
+
+static void parse_event_report_priority(struct map_event *event,
+                                                       const char *value)
+{
+       g_free(event->priority);
+       event->priority = g_strdup(value);
+}
+
 static struct map_event_report_parser {
        const char *name;
        void (*func) (struct map_event *event, const char *value);
@@ -227,6 +254,10 @@ static struct map_event_report_parser {
                { "folder", parse_event_report_folder },
                { "old_folder", parse_event_report_old_folder },
                { "msg_type", parse_event_report_msg_type },
+               { "datetime", parse_event_report_date_time },
+               { "subject", parse_event_report_subject },
+               { "sender_name", parse_event_report_sender_name },
+               { "priority", parse_event_report_priority },
                { }
 };
 
@@ -248,7 +279,8 @@ static void event_report_element(GMarkupParseContext *ctxt,
                for (parser = event_report_parsers; parser && parser->name;
                                                                parser++) {
                        if (strcasecmp(key, parser->name) == 0) {
-                               parser->func(event, values[i]);
+                               if (values[i])
+                                       parser->func(event, values[i]);
                                break;
                        }
                }
@@ -268,6 +300,10 @@ static void map_event_free(struct map_event *event)
        g_free(event->folder);
        g_free(event->old_folder);
        g_free(event->msg_type);
+       g_free(event->datetime);
+       g_free(event->subject);
+       g_free(event->sender_name);
+       g_free(event->priority);
        g_free(event);
 }