All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] mmsd: delivery-report flag
@ 2012-07-23 14:18 Ronald Tessier
  2012-07-23 14:18 ` [PATCH 1/4] store: Add utilities for mms settings file access Ronald Tessier
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Ronald Tessier @ 2012-07-23 14:18 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 809 bytes --]

This patch concerns mmsd and is related to delivery-report flag setting.
A specific delivery-report flag is defined for mmsd, it is managed via a DBus
api (SetProperty, described in the doc section) and stored in a setting file.

Ronald Tessier (4):
  store: Add utilities for mms settings file access
  service: Load delivery-report from mms settings
  service: Add DBus method to set delivery-report
  test: Add a script to set the delivery-report flag

 doc/service-api.txt |    6 ++++
 src/service.c       |   88 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/store.c         |   56 ++++++++++++++++++++++++++++++++
 src/store.h         |    4 +++
 test/set-dr         |   25 +++++++++++++++
 5 files changed, 179 insertions(+)
 create mode 100755 test/set-dr

-- 
1.7.9.5


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/4] store: Add utilities for mms settings file access
  2012-07-23 14:18 [PATCH 0/4] mmsd: delivery-report flag Ronald Tessier
@ 2012-07-23 14:18 ` Ronald Tessier
  2012-07-23 14:18 ` [PATCH 2/4] service: Load delivery-report from mms settings Ronald Tessier
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Ronald Tessier @ 2012-07-23 14:18 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2126 bytes --]

---
 src/store.c |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/store.h |    4 ++++
 2 files changed, 60 insertions(+)

diff --git a/src/store.c b/src/store.c
index 88d9e77..b09c17b 100644
--- a/src/store.c
+++ b/src/store.c
@@ -358,3 +358,59 @@ void mms_store_meta_close(const char *service_id, const char *uuid,
 
 	g_key_file_free(keyfile);
 }
+
+GKeyFile *mms_settings_open(const char *service_id, const char *store)
+{
+	GKeyFile *keyfile;
+	char *path;
+
+	if (store == NULL)
+		return NULL;
+
+	path = mms_store_get_path(service_id, store);
+	if (path == NULL)
+		return NULL;
+
+	if (create_dirs(path, S_IRUSR | S_IWUSR | S_IXUSR) != 0) {
+		mms_error("Failed to create path %s", path);
+
+		g_free(path);
+		return NULL;
+	}
+
+	keyfile = g_key_file_new();
+
+	g_key_file_load_from_file(keyfile, path, 0, NULL);
+
+	g_free(path);
+
+	return keyfile;
+}
+
+static void settings_sync(const char *service_id, const char *store,
+							GKeyFile *keyfile)
+{
+	char *path;
+	char *data;
+	gsize length = 0;
+
+	path = mms_store_get_path(service_id, store);
+	if (path == NULL)
+		return;
+
+	data = g_key_file_to_data(keyfile, &length, NULL);
+
+	g_file_set_contents(path, data, length, NULL);
+
+	g_free(data);
+	g_free(path);
+}
+
+void mms_settings_close(const char *service_id, const char *store,
+					GKeyFile *keyfile, gboolean save)
+{
+	if (save == TRUE)
+		settings_sync(service_id, store, keyfile);
+
+	g_key_file_free(keyfile);
+}
diff --git a/src/store.h b/src/store.h
index 21f11be..ba2c080 100644
--- a/src/store.h
+++ b/src/store.h
@@ -28,3 +28,7 @@ char *mms_store_get_path(const char *service_id, const char *uuid);
 GKeyFile *mms_store_meta_open(const char *service_id, const char *uuid);
 void mms_store_meta_close(const char *service_id, const char *uuid,
 					GKeyFile *keyfile, gboolean save);
+
+GKeyFile *mms_settings_open(const char *service_id, const char *store);
+void mms_settings_close(const char *service_id, const char *store,
+					GKeyFile *keyfile, gboolean save);
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/4] service: Load delivery-report from mms settings
  2012-07-23 14:18 [PATCH 0/4] mmsd: delivery-report flag Ronald Tessier
  2012-07-23 14:18 ` [PATCH 1/4] store: Add utilities for mms settings file access Ronald Tessier
@ 2012-07-23 14:18 ` Ronald Tessier
  2012-07-23 14:18 ` [PATCH 3/4] service: Add DBus method to set delivery-report Ronald Tessier
  2012-07-23 14:18 ` [PATCH 4/4] test: Add a script to set the delivery-report flag Ronald Tessier
  3 siblings, 0 replies; 7+ messages in thread
From: Ronald Tessier @ 2012-07-23 14:18 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2552 bytes --]

---
 src/service.c |   42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/src/service.c b/src/service.c
index 83e1fe1..7243efd 100644
--- a/src/service.c
+++ b/src/service.c
@@ -57,6 +57,9 @@
 #define MAX_ATTACHMENTS_NUMBER 25
 #define MAX_ATTEMPTS 3
 
+#define SETTINGS_STORE "mms"
+#define SETTINGS_GROUP "Settings"
+
 #define uninitialized_var(x) x = x
 
 static const char *ctl_chars = "\x01\x02\x03\x04\x05\x06\x07\x08\x0A"
@@ -84,6 +87,8 @@ struct mms_service {
 	guint current_request_id;
 	GWeb *web;
 	GHashTable *messages;
+	GKeyFile *settings;
+	gboolean use_delivery_reports;
 };
 
 enum mms_request_type {
@@ -111,6 +116,28 @@ static DBusConnection *connection;
 
 static guint32 transaction_id_start = 0;
 
+static void mms_load_settings(struct mms_service *service)
+{
+	GError *error;
+
+	service->settings = mms_settings_open(service->identity,
+							SETTINGS_STORE);
+	if (service->settings == NULL)
+		return;
+
+	error = NULL;
+	service->use_delivery_reports =
+		g_key_file_get_boolean(service->settings, SETTINGS_GROUP,
+						"UseDeliveryReports", &error);
+
+	if (error) {
+		g_error_free(error);
+		g_key_file_set_boolean(service->settings, SETTINGS_GROUP,
+						"UseDeliveryReports",
+						service->use_delivery_reports);
+	}
+}
+
 static void mms_request_destroy(struct mms_request *request)
 {
 	g_free(request->data_path);
@@ -903,6 +930,8 @@ static DBusMessage *send_message(DBusConnection *conn,
 
 	msg->sr.status = MMS_MESSAGE_STATUS_DRAFT;
 
+	msg->sr.dr = service->use_delivery_reports;
+
 	if (send_message_get_args(dbus_msg, msg) == FALSE) {
 		mms_debug("Invalid arguments");
 
@@ -1407,6 +1436,8 @@ int mms_service_register(struct mms_service *service)
 
 	emit_service_added(service);
 
+	mms_load_settings(service);
+
 	load_messages(service);
 
 	return 0;
@@ -1425,6 +1456,17 @@ int mms_service_unregister(struct mms_service *service)
 	if (service->messages != NULL)
 		destroy_message_table(service);
 
+	if (service->settings != NULL) {
+		g_key_file_set_boolean(service->settings, SETTINGS_GROUP,
+					"UseDeliveryReports",
+					service->use_delivery_reports);
+
+		mms_settings_close(service->identity, SETTINGS_STORE,
+						service->settings, TRUE);
+
+		service->settings = NULL;
+	}
+
 	if (g_dbus_unregister_interface(connection, service->path,
 					MMS_SERVICE_INTERFACE) == FALSE) {
 		mms_error("Failed to unregister service interface");
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/4] service: Add DBus method to set delivery-report
  2012-07-23 14:18 [PATCH 0/4] mmsd: delivery-report flag Ronald Tessier
  2012-07-23 14:18 ` [PATCH 1/4] store: Add utilities for mms settings file access Ronald Tessier
  2012-07-23 14:18 ` [PATCH 2/4] service: Load delivery-report from mms settings Ronald Tessier
@ 2012-07-23 14:18 ` Ronald Tessier
  2012-07-23 14:18 ` [PATCH 4/4] test: Add a script to set the delivery-report flag Ronald Tessier
  3 siblings, 0 replies; 7+ messages in thread
From: Ronald Tessier @ 2012-07-23 14:18 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2547 bytes --]

---
 doc/service-api.txt |    6 ++++++
 src/service.c       |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/doc/service-api.txt b/doc/service-api.txt
index 02396ff..f247d3a 100644
--- a/doc/service-api.txt
+++ b/doc/service-api.txt
@@ -82,6 +82,12 @@ Methods		array{object,dict} GetMessages()
 
 			Possible Errors: [service].Error.InvalidArguments
 
+		void SetProperty(string name, variant value)
+
+			Changes the value of the specified property.
+
+			Possible Errors: [service].Error.InvalidArguments
+
 
 Signals		MessageAdded(object path, dict properties)
 
diff --git a/src/service.c b/src/service.c
index 7243efd..c1ca4ab 100644
--- a/src/service.c
+++ b/src/service.c
@@ -887,6 +887,48 @@ out:
 	return reply;
 }
 
+static DBusMessage *set_property(DBusConnection *conn, DBusMessage *dbus_msg,
+								void *data)
+{
+	struct mms_service *service = data;
+	DBusMessageIter iter;
+	DBusMessageIter var;
+	const char *property;
+
+	if (!dbus_message_iter_init(dbus_msg, &iter))
+		return __mms_error_invalid_args(dbus_msg);
+
+	if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
+		return __mms_error_invalid_args(dbus_msg);
+
+	dbus_message_iter_get_basic(&iter, &property);
+	dbus_message_iter_next(&iter);
+
+	if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
+		return __mms_error_invalid_args(dbus_msg);
+
+	dbus_message_iter_recurse(&iter, &var);
+
+	if (!strcmp(property, "UseDeliveryReports")) {
+		dbus_bool_t value;
+
+		if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN)
+			return __mms_error_invalid_args(dbus_msg);
+
+		dbus_message_iter_get_basic(&var, &value);
+
+		if (service->use_delivery_reports != (gboolean) value) {
+			DBG("use_delivery_reports = %d", value);
+
+			service->use_delivery_reports = value;
+		}
+
+		return g_dbus_create_reply(dbus_msg, DBUS_TYPE_INVALID);
+	}
+
+	return __mms_error_invalid_args(dbus_msg);
+}
+
 static gboolean mms_attachment_is_smil(const struct mms_attachment *part)
 {
 	if (g_str_has_prefix(part->content_type, "application/smil"))
@@ -1023,6 +1065,10 @@ static const GDBusMethodTable service_methods[] = {
 			GDBUS_ARGS({ "number", "s" }, { "count", "s" }),
 			GDBUS_ARGS({ "messages_with_properties", "a(oa{sv}" }),
 			get_conversation) },
+	{ GDBUS_METHOD("SetProperty",
+			GDBUS_ARGS({ "property", "s" }, { "value", "v" }),
+		       NULL,
+			set_property) },
 	{ }
 };
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 4/4] test: Add a script to set the delivery-report flag
  2012-07-23 14:18 [PATCH 0/4] mmsd: delivery-report flag Ronald Tessier
                   ` (2 preceding siblings ...)
  2012-07-23 14:18 ` [PATCH 3/4] service: Add DBus method to set delivery-report Ronald Tessier
@ 2012-07-23 14:18 ` Ronald Tessier
  3 siblings, 0 replies; 7+ messages in thread
From: Ronald Tessier @ 2012-07-23 14:18 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 892 bytes --]

---
 test/set-dr |   25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
 create mode 100755 test/set-dr

diff --git a/test/set-dr b/test/set-dr
new file mode 100755
index 0000000..99c72b1
--- /dev/null
+++ b/test/set-dr
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+
+import sys
+import dbus
+
+bus = dbus.SessionBus()
+
+manager = dbus.Interface(bus.get_object('org.ofono.mms', '/org/ofono/mms'),
+					'org.ofono.mms.Manager')
+
+services = manager.GetServices()
+path = services[0][0]
+
+service = dbus.Interface(bus.get_object('org.ofono.mms', path),
+						'org.ofono.mms.Service')
+
+if len(sys.argv) > 1:
+	allowed = dbus.Boolean(int(sys.argv[1]))
+else:
+	allowed = dbus.Boolean(1)
+
+service.SetProperty("UseDeliveryReports", allowed)
+
+print "Setting delivery report use for %s...(UseDeliveryReports=%d)" %\
+	(path, allowed)
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/4] store: Add utilities for mms settings file access
  2012-08-06 15:30 ` [PATCH 1/4] store: Add utilities for mms settings file access Ronald Tessier
@ 2012-08-07  7:17   ` Denis Kenzior
  0 siblings, 0 replies; 7+ messages in thread
From: Denis Kenzior @ 2012-08-07  7:17 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 277 bytes --]

Hi Ronald,

On 08/06/2012 10:30 AM, Ronald Tessier wrote:
> ---
>   src/store.c |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>   src/store.h |    4 ++++
>   2 files changed, 60 insertions(+)
>

Patch has been applied, thanks.

Regards,
-Denis


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/4] store: Add utilities for mms settings file access
  2012-08-06 15:30 [PATCH 0/4] mmsd: " Ronald Tessier
@ 2012-08-06 15:30 ` Ronald Tessier
  2012-08-07  7:17   ` Denis Kenzior
  0 siblings, 1 reply; 7+ messages in thread
From: Ronald Tessier @ 2012-08-06 15:30 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2126 bytes --]

---
 src/store.c |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/store.h |    4 ++++
 2 files changed, 60 insertions(+)

diff --git a/src/store.c b/src/store.c
index 88d9e77..b09c17b 100644
--- a/src/store.c
+++ b/src/store.c
@@ -358,3 +358,59 @@ void mms_store_meta_close(const char *service_id, const char *uuid,
 
 	g_key_file_free(keyfile);
 }
+
+GKeyFile *mms_settings_open(const char *service_id, const char *store)
+{
+	GKeyFile *keyfile;
+	char *path;
+
+	if (store == NULL)
+		return NULL;
+
+	path = mms_store_get_path(service_id, store);
+	if (path == NULL)
+		return NULL;
+
+	if (create_dirs(path, S_IRUSR | S_IWUSR | S_IXUSR) != 0) {
+		mms_error("Failed to create path %s", path);
+
+		g_free(path);
+		return NULL;
+	}
+
+	keyfile = g_key_file_new();
+
+	g_key_file_load_from_file(keyfile, path, 0, NULL);
+
+	g_free(path);
+
+	return keyfile;
+}
+
+static void settings_sync(const char *service_id, const char *store,
+							GKeyFile *keyfile)
+{
+	char *path;
+	char *data;
+	gsize length = 0;
+
+	path = mms_store_get_path(service_id, store);
+	if (path == NULL)
+		return;
+
+	data = g_key_file_to_data(keyfile, &length, NULL);
+
+	g_file_set_contents(path, data, length, NULL);
+
+	g_free(data);
+	g_free(path);
+}
+
+void mms_settings_close(const char *service_id, const char *store,
+					GKeyFile *keyfile, gboolean save)
+{
+	if (save == TRUE)
+		settings_sync(service_id, store, keyfile);
+
+	g_key_file_free(keyfile);
+}
diff --git a/src/store.h b/src/store.h
index 21f11be..ba2c080 100644
--- a/src/store.h
+++ b/src/store.h
@@ -28,3 +28,7 @@ char *mms_store_get_path(const char *service_id, const char *uuid);
 GKeyFile *mms_store_meta_open(const char *service_id, const char *uuid);
 void mms_store_meta_close(const char *service_id, const char *uuid,
 					GKeyFile *keyfile, gboolean save);
+
+GKeyFile *mms_settings_open(const char *service_id, const char *store);
+void mms_settings_close(const char *service_id, const char *store,
+					GKeyFile *keyfile, gboolean save);
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-08-07  7:17 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-23 14:18 [PATCH 0/4] mmsd: delivery-report flag Ronald Tessier
2012-07-23 14:18 ` [PATCH 1/4] store: Add utilities for mms settings file access Ronald Tessier
2012-07-23 14:18 ` [PATCH 2/4] service: Load delivery-report from mms settings Ronald Tessier
2012-07-23 14:18 ` [PATCH 3/4] service: Add DBus method to set delivery-report Ronald Tessier
2012-07-23 14:18 ` [PATCH 4/4] test: Add a script to set the delivery-report flag Ronald Tessier
2012-08-06 15:30 [PATCH 0/4] mmsd: " Ronald Tessier
2012-08-06 15:30 ` [PATCH 1/4] store: Add utilities for mms settings file access Ronald Tessier
2012-08-07  7:17   ` Denis Kenzior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.