From b0a90b27085297610465e800d8b4ecdabe0b3546 Mon Sep 17 00:00:00 2001 From: Gowtham Anandha Babu Date: Tue, 30 Dec 2014 19:56:57 +0530 Subject: [PATCH] obexd/client: Add support for MAP Event Report 1.1 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 | 4 ++++ obexd/client/mns.c | 46 +++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/obexd/client/map-event.h b/obexd/client/map-event.h index ba5d5d2..5414b26 100644 --- a/obexd/client/map-event.h +++ b/obexd/client/map-event.h @@ -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. diff --git a/obexd/client/mns.c b/obexd/client/mns.c index d638886..43b0502 100644 --- a/obexd/client/mns.c +++ b/obexd/client/mns.c @@ -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); } -- 2.7.4