Diff between fefeb495dd227c7fb13d68cafe641183fdd05d47 and 1c4f5276723627a5844c92f8f23bfa552145939a

Changed Files

File Additions Deletions Status
obexd/client/map.c +46 -1 modified

Full Patch

diff --git a/obexd/client/map.c b/obexd/client/map.c
index b882033..7ca33cf 100644
--- a/obexd/client/map.c
+++ b/obexd/client/map.c
@@ -51,6 +51,12 @@
 #define CHARSET_NATIVE 0
 #define CHARSET_UTF8 1
 
+#define SDP_MESSAGE_TYPE_EMAIL		0x01
+#define SDP_MESSAGE_TYPE_SMS_GSM	0x02
+#define SDP_MESSAGE_TYPE_SMS_CDMA	0x04
+#define SDP_MESSAGE_TYPE_MMS		0x08
+#define SDP_MESSAGE_TYPE_IM		0x10
+
 static const char * const filter_list[] = {
 	"subject",
 	"timestamp",
@@ -1992,6 +1998,45 @@ static const GDBusMethodTable map_methods[] = {
 	{ }
 };
 
+static gboolean get_supported_types(const GDBusPropertyTable *property,
+					DBusMessageIter *iter, void *user_data)
+{
+	struct map_data *map = user_data;
+	DBusMessageIter entry;
+	const char *str;
+
+	dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
+					DBUS_TYPE_STRING_AS_STRING, &entry);
+	if (map->supported_message_types & SDP_MESSAGE_TYPE_EMAIL) {
+		str = "EMAIL";
+		dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &str);
+	}
+	if (map->supported_message_types & SDP_MESSAGE_TYPE_SMS_GSM) {
+		str = "SMS_GSM";
+		dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &str);
+	}
+	if (map->supported_message_types & SDP_MESSAGE_TYPE_SMS_CDMA) {
+		str = "SMS_CDMA";
+		dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &str);
+	}
+	if (map->supported_message_types & SDP_MESSAGE_TYPE_MMS) {
+		str = "MMS";
+		dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &str);
+	}
+	if (map->supported_message_types & SDP_MESSAGE_TYPE_IM) {
+		str = "IM";
+		dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &str);
+	}
+	dbus_message_iter_close_container(iter, &entry);
+
+	return TRUE;
+}
+
+static const GDBusPropertyTable map_properties[] = {
+	{ "SupportedTypes", "as", get_supported_types },
+	{ }
+};
+
 static void map_msg_remove(void *data)
 {
 	struct map_msg *msg = data;
@@ -2201,7 +2246,7 @@ static int map_probe(struct obc_session *session)
 	set_notification_registration(map, true);
 
 	if (!g_dbus_register_interface(conn, path, MAP_INTERFACE, map_methods,
-					NULL, NULL, map, map_free)) {
+					NULL, map_properties, map, map_free)) {
 		map_free(map);
 
 		return -ENOMEM;