edbus: Add Variant to Property set function
authorJosé Roberto de Souza <zehortigoza@profusion.mobi>
Tue, 11 Dec 2012 19:50:49 +0000 (19:50 +0000)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Tue, 11 Dec 2012 19:50:49 +0000 (19:50 +0000)
Patch by: José Roberto de Souza  <zehortigoza@profusion.mobi>

SVN revision: 80696

src/examples/complex_types_server.c
src/lib/edbus_service.c
src/lib/edbus_service.h

index 6e6ff77..ca85f5a 100644 (file)
@@ -223,19 +223,12 @@ _properties_get(const EDBus_Service_Interface *iface, const char *propname, EDBu
 }
 
 static EDBus_Message *
-_properties_set(const EDBus_Service_Interface *iface, const char *propname, const EDBus_Message *msg)
+_properties_set(const EDBus_Service_Interface *iface, const char *propname, EDBus_Message_Iter *iter, const EDBus_Message *msg)
 {
    EDBus_Message *reply;
-   char *interface, *property, *type, *txt;
-   EDBus_Message_Iter *variant;
+   char *type, *txt;
 
-   if (!edbus_message_arguments_get(msg, "ssv", &interface, &property, &variant))
-     {
-        printf("Error on edbus_message_arguments_get()\n");
-        return NULL;
-     }
-
-   type = edbus_message_iter_signature_get(variant);
+   type = edbus_message_iter_signature_get(iter);
    if (type[0] != 's')
      {
         reply = edbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidSignature",
@@ -245,7 +238,7 @@ _properties_set(const EDBus_Service_Interface *iface, const char *propname, cons
      }
 
    reply = edbus_message_method_return_new(msg);
-   edbus_message_iter_arguments_get(variant, "s", &txt);
+   edbus_message_iter_arguments_get(iter, "s", &txt);
    printf("Resp2 was set to: %s, previously was: %s\n", txt, resp2);
    free(type);
    free(resp2);
index 4299981..42a56ae 100644 (file)
@@ -316,17 +316,12 @@ _cb_property_set(const EDBus_Service_Interface *piface, const EDBus_Message *msg
    EDBus_Service_Interface *iface;
    Property *prop;
    EDBus_Message *reply;
-   EDBus_Message_Iter *main_iter;
+   EDBus_Message_Iter *variant;
    EDBus_Property_Set_Cb setter = NULL;
 
-   main_iter = edbus_message_iter_get(msg);
-   if (!edbus_message_iter_get_and_next(main_iter, 's', &iface_name) ||
-       !edbus_message_iter_get_and_next(main_iter, 's', &propname))
+   if (!edbus_message_arguments_get(msg, "ssv", &iface_name, &propname, &variant))
      return NULL;
 
-   dbus_message_iter_init(msg->dbus_msg,
-                          &main_iter->dbus_iterator);
-
    iface = eina_hash_find(obj->interfaces, iface_name);
    if (!iface)
      return edbus_message_error_new(msg, DBUS_ERROR_UNKNOWN_INTERFACE,
@@ -346,7 +341,7 @@ _cb_property_set(const EDBus_Service_Interface *piface, const EDBus_Message *msg
      return edbus_message_error_new(msg, DBUS_ERROR_PROPERTY_READ_ONLY,
                                     "This property is read only");
 
-   reply = setter(iface, propname, msg);
+   reply = setter(iface, propname, variant, msg);
    return reply;
 }
 
index f2ec38e..68c098a 100644 (file)
@@ -59,7 +59,7 @@ typedef Eina_Bool (*EDBus_Property_Get_Cb)(const EDBus_Service_Interface *iface,
  *
  * @return Message of response, could be a simple method_return, error or NULL to send response later.
  */
-typedef EDBus_Message *(*EDBus_Property_Set_Cb)(const EDBus_Service_Interface *iface, const char *propname, const EDBus_Message *input_msg);
+typedef EDBus_Message *(*EDBus_Property_Set_Cb)(const EDBus_Service_Interface *iface, const char *propname, EDBus_Message_Iter *iter, const EDBus_Message *input_msg);
 
 typedef struct _EDBus_Method
 {