static Eldbus_Message * _cb_property_get(const Eldbus_Service_Interface *piface, const Eldbus_Message *msg) { const char *propname, *iface_name; Eldbus_Service_Object *obj = piface->obj; Eldbus_Service_Interface *iface; Property *prop; Eldbus_Message *reply, *error_reply = NULL; Eldbus_Message_Iter *main_iter, *variant; Eina_Bool ret; Eldbus_Property_Get_Cb getter = NULL; if (!eldbus_message_arguments_get(msg, "ss", &iface_name, &propname)) return NULL; iface = eina_hash_find(obj->interfaces, iface_name); if (!iface) return eldbus_message_error_new(msg, DBUS_ERROR_UNKNOWN_INTERFACE, "Interface not found."); prop = eina_hash_find(iface->properties, propname); if (!prop || prop->is_invalidate) goto not_found; if (prop->property->get_func) getter = prop->property->get_func; else if (iface->get_func) getter = iface->get_func; if (!getter) goto not_found; reply = eldbus_message_method_return_new(msg); EINA_SAFETY_ON_NULL_RETURN_VAL(reply, NULL); main_iter = eldbus_message_iter_get(reply); variant = eldbus_message_iter_container_new(main_iter, 'v', prop->property->type); ret = getter(iface, propname, variant, msg, &error_reply); if (ret) { eldbus_message_iter_container_close(main_iter, variant); return reply; } eldbus_message_unref(reply); return error_reply; not_found: return eldbus_message_error_new(msg, DBUS_ERROR_UNKNOWN_PROPERTY, "Property not found."); }
static int _log_dom = -1; #undef DBG #undef WARN #undef INF #undef ERR #define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__) #define WARN(...) EINA_LOG_DOM_WARN(_log_dom, __VA_ARGS__) #define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__) #define ERR(...) EINA_LOG_DOM_ERR(_log_dom, __VA_ARGS__) static Eldbus_Message * cb_langs(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) { Eldbus_Message *reply = eldbus_message_method_return_new(msg); Eldbus_Message_Iter *main_iter, *array; const Eina_List *l; const char *str; if (!reply) return NULL; main_iter = eldbus_message_iter_get(reply); eldbus_message_iter_arguments_append(main_iter, "as", &array); if (!array) return reply; EINA_LIST_FOREACH(e_intl_language_list(), l, str) { DBG("language: %s", str); eldbus_message_iter_basic_append(array, 's', str); }