Several plugins have code for setting properties using the
BlueZ/ConnMan/oFono style API.  The code for this is duplicated
unnecessarily.  The properties tend to be e.g. booleans for Powered or
simple String states.

Here we create a convenience function that will send the set property
request and call the user-provided callback function.
---
 gdbus/gdbus.h |    8 ++++++++
 gdbus/util.c  |   45 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h
index fd35e65..dda49f3 100644
--- a/gdbus/gdbus.h
+++ b/gdbus/gdbus.h
@@ -166,6 +166,14 @@ gboolean 
g_dbus_emit_property_changed_fixed_array(DBusConnection *conn,
                                                        const char *name,
                                                        int type, void *value,
                                                        int len);
+
+gboolean g_dbus_set_property_basic(DBusConnection *conn, const char *service,
+                                       const char *path, const char *interface,
+                                       const char *property,
+                                       int type, void *value,
+                                       DBusPendingCallNotifyFunction cb,
+                                       void *user_data,
+                                       DBusFreeFunction free_func);
 #ifdef __cplusplus
 }
 #endif
diff --git a/gdbus/util.c b/gdbus/util.c
index 1abffc9..70a4413 100644
--- a/gdbus/util.c
+++ b/gdbus/util.c
@@ -224,3 +224,48 @@ gboolean 
g_dbus_emit_property_changed_fixed_array(DBusConnection *conn,
 
        return g_dbus_send_message(conn, signal);
 }
+
+gboolean g_dbus_set_property_basic(DBusConnection *conn, const char *service,
+                                       const char *path, const char *interface,
+                                       const char *property,
+                                       int type, void *value,
+                                       DBusPendingCallNotifyFunction cb,
+                                       void *user_data,
+                                       DBusFreeFunction free_func)
+{
+       DBusMessage *message;
+       DBusMessageIter iter;
+       DBusPendingCall *call;
+
+       message = dbus_message_new_method_call(service, path, interface,
+                                               "SetProperty");
+
+       if (message == NULL)
+               goto fail;
+
+       dbus_message_set_auto_start(message, FALSE);
+
+       dbus_message_iter_init_append(message, &iter);
+       dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &property);
+       append_variant(&iter, type, value);
+
+       if (dbus_connection_send_with_reply(conn, message, &call, -1) == FALSE)
+               goto fail;
+
+       if (call == NULL)
+               goto fail;
+
+       dbus_pending_call_set_notify(call, cb, user_data, free_func);
+       dbus_message_unref(message);
+
+       return TRUE;
+
+fail:
+       if (message)
+               dbus_message_unref(message);
+
+       if (free_func && user_data)
+               free_func(user_data);
+
+       return FALSE;
+}
-- 
1.6.4.4

_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to