forked from enlightenment/efl
eldbus: Fix eldbus_service_*_get() functions over FDO interfaces
This commit is contained in:
parent
d6c7732931
commit
9e4dc299a7
|
@ -66,9 +66,9 @@ static DBusObjectPathVTable vtable = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
Eldbus_Service_Interface *introspectable;
|
static Eldbus_Service_Interface *introspectable;
|
||||||
Eldbus_Service_Interface *properties_iface;
|
static Eldbus_Service_Interface *properties_iface;
|
||||||
Eldbus_Service_Interface *objmanager;
|
static Eldbus_Service_Interface *objmanager;
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
_introspect_arguments_append(Eina_Strbuf *buf, const Eldbus_Arg_Info *args,
|
_introspect_arguments_append(Eina_Strbuf *buf, const Eldbus_Arg_Info *args,
|
||||||
|
@ -1147,40 +1147,28 @@ _object_handler(DBusConnection *conn EINA_UNUSED, DBusMessage *msg, void *user_d
|
||||||
eldbus_msg = eldbus_message_new(EINA_FALSE);
|
eldbus_msg = eldbus_message_new(EINA_FALSE);
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(eldbus_msg, DBUS_HANDLER_RESULT_NEED_MEMORY);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(eldbus_msg, DBUS_HANDLER_RESULT_NEED_MEMORY);
|
||||||
eldbus_msg->dbus_msg = msg;
|
eldbus_msg->dbus_msg = msg;
|
||||||
|
dbus_message_ref(eldbus_msg->dbus_msg);
|
||||||
dbus_message_iter_init(eldbus_msg->dbus_msg, &eldbus_msg->iterator->dbus_iterator);
|
dbus_message_iter_init(eldbus_msg->dbus_msg, &eldbus_msg->iterator->dbus_iterator);
|
||||||
|
|
||||||
if (!_have_signature(method->in, eldbus_msg))
|
if (!_have_signature(method->in, eldbus_msg))
|
||||||
{
|
reply = eldbus_message_error_new(eldbus_msg, DBUS_ERROR_INVALID_SIGNATURE,
|
||||||
reply = eldbus_message_error_new(eldbus_msg,
|
|
||||||
DBUS_ERROR_INVALID_SIGNATURE,
|
|
||||||
"See introspectable to know the expected signature");
|
"See introspectable to know the expected signature");
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (iface->obj)
|
if (iface->obj)
|
||||||
reply = method->cb(iface, eldbus_msg);
|
reply = method->cb(iface, eldbus_msg);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//if iface does have obj it is some of FreeDesktop interfaces:
|
/* if iface does have obj it is some of FreeDesktop interfaces:
|
||||||
//Introspectable, Properties...
|
Introspectable, Properties or ObjectManager */
|
||||||
Eldbus_Service_Interface *cpy;
|
iface->obj = obj;
|
||||||
cpy = calloc(1, sizeof(Eldbus_Service_Interface));
|
reply = method->cb(iface, eldbus_msg);
|
||||||
if (!cpy)
|
iface->obj = NULL;
|
||||||
{
|
|
||||||
dbus_message_ref(eldbus_msg->dbus_msg);
|
|
||||||
eldbus_message_unref(eldbus_msg);
|
|
||||||
return DBUS_HANDLER_RESULT_NEED_MEMORY;
|
|
||||||
}
|
|
||||||
cpy->obj = obj;
|
|
||||||
reply = method->cb(cpy, eldbus_msg);
|
|
||||||
free(cpy);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dbus_message_ref(eldbus_msg->dbus_msg);
|
|
||||||
eldbus_message_unref(eldbus_msg);
|
eldbus_message_unref(eldbus_msg);
|
||||||
if (!reply) return DBUS_HANDLER_RESULT_HANDLED;
|
if (reply)
|
||||||
|
|
||||||
_eldbus_connection_send(obj->conn, reply, NULL, NULL, -1);
|
_eldbus_connection_send(obj->conn, reply, NULL, NULL, -1);
|
||||||
|
|
||||||
return DBUS_HANDLER_RESULT_HANDLED;
|
return DBUS_HANDLER_RESULT_HANDLED;
|
||||||
|
|
Loading…
Reference in New Issue