static Eina_Bool _props_getall(Eldbus_Service_Interface *iface, Eina_Iterator *iterator, Eldbus_Message_Iter *dict, const Eldbus_Message *input_msg, Eldbus_Message **error_reply) { Property *prop; EINA_ITERATOR_FOREACH(iterator, prop) { Eldbus_Message_Iter *entry, *var; Eina_Bool ret; Eldbus_Property_Get_Cb getter = NULL; if (prop->property->get_func) getter = prop->property->get_func; else if (iface->get_func) getter = iface->get_func; if (!getter || prop->is_invalidate) continue; if (!eldbus_message_iter_arguments_append(dict, "{sv}", &entry)) continue; eldbus_message_iter_basic_append(entry, 's', prop->property->name); var = eldbus_message_iter_container_new(entry, 'v', prop->property->type); ret = getter(iface, prop->property->name, var, input_msg, error_reply); if (!ret) return EINA_FALSE; eldbus_message_iter_container_close(entry, var); eldbus_message_iter_container_close(dict, entry); }
static void _efl_net_control_technology_property_set(Eo *o, Efl_Net_Control_Technology_Data *pd, const char *name, const char *signature, ...) { Eldbus_Message *msg; Eldbus_Message_Iter *msg_itr, *var; Eldbus_Pending *p; va_list ap; msg = eldbus_proxy_method_call_new(pd->proxy, "SetProperty"); EINA_SAFETY_ON_NULL_RETURN(msg); msg_itr = eldbus_message_iter_get(msg); EINA_SAFETY_ON_NULL_GOTO(msg_itr, error_send); eldbus_message_iter_basic_append(msg_itr, 's', name); var = eldbus_message_iter_container_new(msg_itr, 'v', signature); va_start(ap, signature); eldbus_message_iter_arguments_vappend(var, signature, ap); va_end(ap); eldbus_message_iter_container_close(msg_itr, var); p = eldbus_proxy_send(pd->proxy, msg, _efl_net_control_technology_property_set_cb, o, DEFAULT_TIMEOUT); EINA_SAFETY_ON_NULL_GOTO(p, error_send); pd->pending = eina_list_append(pd->pending, p); DBG("Setting property %s", name); return; error_send: eldbus_message_unref(msg); }
void wkb_ibus_iter_append_text(Eldbus_Message_Iter *iter, struct wkb_ibus_text *text) { Eldbus_Message_Iter *txt_iter = NULL; /* TODO */ txt_iter = eldbus_message_iter_container_new(iter, 'v', "sa{sv}sv"); eldbus_message_iter_container_close(iter, txt_iter); }
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 void _elm_sys_notify_marshal_dict_string(Eldbus_Message_Iter *array, const char *key, const char *value) { Eldbus_Message_Iter *var, *entry; eldbus_message_iter_arguments_append(array, "{sv}", &entry); eldbus_message_iter_basic_append(entry, 's', key); var = eldbus_message_iter_container_new(entry, 'v', "s"); eldbus_message_iter_basic_append(var, 's', value); eldbus_message_iter_container_close(entry, var); eldbus_message_iter_container_close(array, entry); }
static Eina_Bool _eldbus_message_iter_arguments_vappend(Eldbus_Message_Iter *iter, const char *signature, va_list *aq) { DBusSignatureIter signature_iter; Eina_Bool r = EINA_TRUE; char *type; ELDBUS_MESSAGE_ITERATOR_CHECK_RETVAL(iter, EINA_FALSE); EINA_SAFETY_ON_FALSE_RETURN_VAL(iter->writable, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(signature, EINA_FALSE); dbus_signature_iter_init(&signature_iter, signature); while ((type = dbus_signature_iter_get_signature(&signature_iter))) { if (type[0] != DBUS_TYPE_VARIANT && !type[1]) r = append_basic(type[0], aq, &iter->dbus_iterator); else { Eldbus_Message_Iter **user_itr; Eldbus_Message_Iter *sub; user_itr = va_arg(*aq, Eldbus_Message_Iter **); sub = _message_iterator_new(EINA_TRUE); if (!sub) { ERR("Could not create sub iterator"); r = EINA_FALSE; goto next; } iter->iterators = eina_inlist_append(iter->iterators, EINA_INLIST_GET(sub)); if (type[0] == DBUS_TYPE_ARRAY) r = dbus_message_iter_open_container(&iter->dbus_iterator, type[0], type+1, &sub->dbus_iterator); else if (type[1] == DBUS_TYPE_VARIANT) { ERR("variant not supported by \ eldbus_message_iter_arguments_append(), \ try eldbus_message_iter_container_new()"); r = EINA_FALSE; goto next; } else { char real_type; if (type[0] == DBUS_STRUCT_BEGIN_CHAR) real_type = DBUS_TYPE_STRUCT; else real_type = DBUS_TYPE_DICT_ENTRY; r = dbus_message_iter_open_container(&iter->dbus_iterator, real_type, NULL, &sub->dbus_iterator); } *user_itr = sub; } next: dbus_free(type); if (!r || !dbus_signature_iter_next(&signature_iter)) break; } return r; }