diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | src/monitor/monitor_iface_generated.c | 57 | ||||
-rw-r--r-- | src/providers/data_provider_iface_generated.c | 57 | ||||
-rw-r--r-- | src/responder/ifp/ifp_iface_generated.c | 443 | ||||
-rwxr-xr-x | src/sbus/sbus_codegen | 133 | ||||
-rw-r--r-- | src/sbus/sssd_dbus_invokers.c | 465 | ||||
-rw-r--r-- | src/sbus/sssd_dbus_invokers.h | 120 | ||||
-rw-r--r-- | src/sbus/sssd_dbus_meta.h | 15 | ||||
-rw-r--r-- | src/sbus/sssd_dbus_properties.c | 51 | ||||
-rw-r--r-- | src/tests/sbus_codegen_tests_generated.c | 789 |
10 files changed, 695 insertions, 1437 deletions
diff --git a/Makefile.am b/Makefile.am index caeebce35..fece4b41a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -525,6 +525,7 @@ dist_noinst_HEADERS = \ src/sbus/sssd_dbus.h \ src/sbus/sssd_dbus_meta.h \ src/sbus/sssd_dbus_private.h \ + src/sbus/sssd_dbus_invokers.h \ src/db/sysdb.h \ src/db/sysdb_sudo.h \ src/db/sysdb_autofs.h \ @@ -710,6 +711,7 @@ libsss_util_la_SOURCES = \ src/sbus/sssd_dbus_meta.c \ src/sbus/sssd_dbus_interface.c \ src/sbus/sssd_dbus_introspect.c \ + src/sbus/sssd_dbus_invokers.c \ src/sbus/sssd_dbus_properties.c \ src/sbus/sssd_dbus_request.c \ src/sbus/sssd_dbus_server.c \ diff --git a/src/monitor/monitor_iface_generated.c b/src/monitor/monitor_iface_generated.c index 0eee10cae..171cef7e6 100644 --- a/src/monitor/monitor_iface_generated.c +++ b/src/monitor/monitor_iface_generated.c @@ -3,6 +3,7 @@ #include "util/util.h" #include "sbus/sssd_dbus.h" #include "sbus/sssd_dbus_meta.h" +#include "sbus/sssd_dbus_invokers.h" #include "monitor_iface_generated.h" /* methods for org.freedesktop.sssd.monitor */ @@ -24,39 +25,13 @@ const struct sbus_method_meta mon_srv_iface__methods[] = { { NULL, } }; -/* invokes GetAll for the 'org.freedesktop.sssd.monitor' interface */ -static int invoke_mon_srv_iface_get_all(struct sbus_request *dbus_req, void *function_ptr) -{ - DBusMessage *reply; - dbus_bool_t dbret; - DBusMessageIter iter; - DBusMessageIter iter_dict; - - reply = dbus_message_new_method_return(dbus_req->message); - if (!reply) return ENOMEM; - dbus_message_iter_init_append(reply, &iter); - dbret = dbus_message_iter_open_container( - &iter, DBUS_TYPE_ARRAY, - DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING - DBUS_TYPE_STRING_AS_STRING - DBUS_TYPE_VARIANT_AS_STRING - DBUS_DICT_ENTRY_END_CHAR_AS_STRING, - &iter_dict); - if (!dbret) return ENOMEM; - - dbret = dbus_message_iter_close_container(&iter, &iter_dict); - if (!dbret) return ENOMEM; - - return sbus_request_finish(dbus_req, reply); -} - /* interface info for org.freedesktop.sssd.monitor */ const struct sbus_interface_meta mon_srv_iface_meta = { "org.freedesktop.sssd.monitor", /* name */ mon_srv_iface__methods, NULL, /* no signals */ NULL, /* no properties */ - invoke_mon_srv_iface_get_all, /* GetAll invoker */ + sbus_invoke_get_all, /* GetAll invoker */ }; /* methods for org.freedesktop.sssd.service */ @@ -127,37 +102,11 @@ const struct sbus_method_meta mon_cli_iface__methods[] = { { NULL, } }; -/* invokes GetAll for the 'org.freedesktop.sssd.service' interface */ -static int invoke_mon_cli_iface_get_all(struct sbus_request *dbus_req, void *function_ptr) -{ - DBusMessage *reply; - dbus_bool_t dbret; - DBusMessageIter iter; - DBusMessageIter iter_dict; - - reply = dbus_message_new_method_return(dbus_req->message); - if (!reply) return ENOMEM; - dbus_message_iter_init_append(reply, &iter); - dbret = dbus_message_iter_open_container( - &iter, DBUS_TYPE_ARRAY, - DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING - DBUS_TYPE_STRING_AS_STRING - DBUS_TYPE_VARIANT_AS_STRING - DBUS_DICT_ENTRY_END_CHAR_AS_STRING, - &iter_dict); - if (!dbret) return ENOMEM; - - dbret = dbus_message_iter_close_container(&iter, &iter_dict); - if (!dbret) return ENOMEM; - - return sbus_request_finish(dbus_req, reply); -} - /* interface info for org.freedesktop.sssd.service */ const struct sbus_interface_meta mon_cli_iface_meta = { "org.freedesktop.sssd.service", /* name */ mon_cli_iface__methods, NULL, /* no signals */ NULL, /* no properties */ - invoke_mon_cli_iface_get_all, /* GetAll invoker */ + sbus_invoke_get_all, /* GetAll invoker */ }; diff --git a/src/providers/data_provider_iface_generated.c b/src/providers/data_provider_iface_generated.c index 588137625..bdd6a4d76 100644 --- a/src/providers/data_provider_iface_generated.c +++ b/src/providers/data_provider_iface_generated.c @@ -3,6 +3,7 @@ #include "util/util.h" #include "sbus/sssd_dbus.h" #include "sbus/sssd_dbus_meta.h" +#include "sbus/sssd_dbus_invokers.h" #include "data_provider_iface_generated.h" /* methods for org.freedesktop.sssd.dataprovider */ @@ -59,39 +60,13 @@ const struct sbus_method_meta data_provider_iface__methods[] = { { NULL, } }; -/* invokes GetAll for the 'org.freedesktop.sssd.dataprovider' interface */ -static int invoke_data_provider_iface_get_all(struct sbus_request *dbus_req, void *function_ptr) -{ - DBusMessage *reply; - dbus_bool_t dbret; - DBusMessageIter iter; - DBusMessageIter iter_dict; - - reply = dbus_message_new_method_return(dbus_req->message); - if (!reply) return ENOMEM; - dbus_message_iter_init_append(reply, &iter); - dbret = dbus_message_iter_open_container( - &iter, DBUS_TYPE_ARRAY, - DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING - DBUS_TYPE_STRING_AS_STRING - DBUS_TYPE_VARIANT_AS_STRING - DBUS_DICT_ENTRY_END_CHAR_AS_STRING, - &iter_dict); - if (!dbret) return ENOMEM; - - dbret = dbus_message_iter_close_container(&iter, &iter_dict); - if (!dbret) return ENOMEM; - - return sbus_request_finish(dbus_req, reply); -} - /* interface info for org.freedesktop.sssd.dataprovider */ const struct sbus_interface_meta data_provider_iface_meta = { "org.freedesktop.sssd.dataprovider", /* name */ data_provider_iface__methods, NULL, /* no signals */ NULL, /* no properties */ - invoke_data_provider_iface_get_all, /* GetAll invoker */ + sbus_invoke_get_all, /* GetAll invoker */ }; /* methods for org.freedesktop.sssd.dataprovider_rev */ @@ -113,37 +88,11 @@ const struct sbus_method_meta data_provider_rev_iface__methods[] = { { NULL, } }; -/* invokes GetAll for the 'org.freedesktop.sssd.dataprovider_rev' interface */ -static int invoke_data_provider_rev_iface_get_all(struct sbus_request *dbus_req, void *function_ptr) -{ - DBusMessage *reply; - dbus_bool_t dbret; - DBusMessageIter iter; - DBusMessageIter iter_dict; - - reply = dbus_message_new_method_return(dbus_req->message); - if (!reply) return ENOMEM; - dbus_message_iter_init_append(reply, &iter); - dbret = dbus_message_iter_open_container( - &iter, DBUS_TYPE_ARRAY, - DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING - DBUS_TYPE_STRING_AS_STRING - DBUS_TYPE_VARIANT_AS_STRING - DBUS_DICT_ENTRY_END_CHAR_AS_STRING, - &iter_dict); - if (!dbret) return ENOMEM; - - dbret = dbus_message_iter_close_container(&iter, &iter_dict); - if (!dbret) return ENOMEM; - - return sbus_request_finish(dbus_req, reply); -} - /* interface info for org.freedesktop.sssd.dataprovider_rev */ const struct sbus_interface_meta data_provider_rev_iface_meta = { "org.freedesktop.sssd.dataprovider_rev", /* name */ data_provider_rev_iface__methods, NULL, /* no signals */ NULL, /* no properties */ - invoke_data_provider_rev_iface_get_all, /* GetAll invoker */ + sbus_invoke_get_all, /* GetAll invoker */ }; diff --git a/src/responder/ifp/ifp_iface_generated.c b/src/responder/ifp/ifp_iface_generated.c index 5d7dd3908..306a98a7b 100644 --- a/src/responder/ifp/ifp_iface_generated.c +++ b/src/responder/ifp/ifp_iface_generated.c @@ -3,6 +3,7 @@ #include "util/util.h" #include "sbus/sssd_dbus.h" #include "sbus/sssd_dbus_meta.h" +#include "sbus/sssd_dbus_invokers.h" #include "ifp_iface_generated.h" /* invokes a handler with a 's' DBus signature */ @@ -10,11 +11,6 @@ static int invoke_s_method(struct sbus_request *dbus_req, void *function_ptr); /* invokes a handler with a 'u' DBus signature */ static int invoke_u_method(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_s(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_u(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_b(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_as(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_o(struct sbus_request *dbus_req, void *function_ptr); /* arguments for org.freedesktop.sssd.infopipe.ListComponents */ const struct sbus_arg_meta infopipe_iface_ListComponents__out[] = { @@ -252,39 +248,13 @@ const struct sbus_method_meta infopipe_iface__methods[] = { { NULL, } }; -/* invokes GetAll for the 'org.freedesktop.sssd.infopipe' interface */ -static int invoke_infopipe_iface_get_all(struct sbus_request *dbus_req, void *function_ptr) -{ - DBusMessage *reply; - dbus_bool_t dbret; - DBusMessageIter iter; - DBusMessageIter iter_dict; - - reply = dbus_message_new_method_return(dbus_req->message); - if (!reply) return ENOMEM; - dbus_message_iter_init_append(reply, &iter); - dbret = dbus_message_iter_open_container( - &iter, DBUS_TYPE_ARRAY, - DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING - DBUS_TYPE_STRING_AS_STRING - DBUS_TYPE_VARIANT_AS_STRING - DBUS_DICT_ENTRY_END_CHAR_AS_STRING, - &iter_dict); - if (!dbret) return ENOMEM; - - dbret = dbus_message_iter_close_container(&iter, &iter_dict); - if (!dbret) return ENOMEM; - - return sbus_request_finish(dbus_req, reply); -} - /* interface info for org.freedesktop.sssd.infopipe */ const struct sbus_interface_meta infopipe_iface_meta = { "org.freedesktop.sssd.infopipe", /* name */ infopipe_iface__methods, NULL, /* no signals */ NULL, /* no properties */ - invoke_infopipe_iface_get_all, /* GetAll invoker */ + sbus_invoke_get_all, /* GetAll invoker */ }; int infopipe_component_Enable_finish(struct sbus_request *req) @@ -363,7 +333,7 @@ const struct sbus_property_meta infopipe_component__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_component, infopipe_component_get_name), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -372,7 +342,7 @@ const struct sbus_property_meta infopipe_component__properties[] = { "u", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_component, infopipe_component_get_debug_level), - invoke_get_u, + sbus_invoke_get_u, 0, /* not writable */ NULL, /* no invoker */ }, @@ -381,7 +351,7 @@ const struct sbus_property_meta infopipe_component__properties[] = { "b", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_component, infopipe_component_get_enabled), - invoke_get_b, + sbus_invoke_get_b, 0, /* not writable */ NULL, /* no invoker */ }, @@ -390,7 +360,7 @@ const struct sbus_property_meta infopipe_component__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_component, infopipe_component_get_type), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -399,117 +369,20 @@ const struct sbus_property_meta infopipe_component__properties[] = { "as", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_component, infopipe_component_get_providers), - invoke_get_as, + sbus_invoke_get_as, 0, /* not writable */ NULL, /* no invoker */ }, { NULL, } }; -/* invokes GetAll for the 'org.freedesktop.sssd.infopipe.Components' interface */ -static int invoke_infopipe_component_get_all(struct sbus_request *dbus_req, void *function_ptr) -{ - DBusMessage *reply; - dbus_bool_t dbret; - DBusMessageIter iter; - DBusMessageIter iter_dict; - int ret; - struct sbus_interface *intf = dbus_req->intf; - const struct sbus_property_meta *property; - const char * s_prop_val; - const char * s_out_val; - void (*s_handler)(struct sbus_request *, void *data, const char * *); - bool b_prop_val; - dbus_bool_t b_out_val; - void (*b_handler)(struct sbus_request *, void *data, bool *); - uint32_t u_prop_val; - uint32_t u_out_val; - void (*u_handler)(struct sbus_request *, void *data, uint32_t *); - const char * *as_prop_val; - int as_prop_len; - const char * *as_out_val; - void (*as_handler)(struct sbus_request *, void *data, const char * * *, int *); - - reply = dbus_message_new_method_return(dbus_req->message); - if (!reply) return ENOMEM; - dbus_message_iter_init_append(reply, &iter); - dbret = dbus_message_iter_open_container( - &iter, DBUS_TYPE_ARRAY, - DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING - DBUS_TYPE_STRING_AS_STRING - DBUS_TYPE_VARIANT_AS_STRING - DBUS_DICT_ENTRY_END_CHAR_AS_STRING, - &iter_dict); - if (!dbret) return ENOMEM; - - property = sbus_meta_find_property(intf->vtable->meta, "name"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "name", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "debug_level"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - u_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (u_handler) { - (u_handler)(dbus_req, dbus_req->intf->handler_data, &u_prop_val); - u_out_val = u_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "debug_level", DBUS_TYPE_UINT32, &u_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "enabled"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - b_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (b_handler) { - (b_handler)(dbus_req, dbus_req->intf->handler_data, &b_prop_val); - b_out_val = b_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "enabled", DBUS_TYPE_BOOLEAN, &b_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "type"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "type", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "providers"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - as_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (as_handler) { - (as_handler)(dbus_req, dbus_req->intf->handler_data, &as_prop_val, &as_prop_len); - as_out_val = as_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "providers", DBUS_TYPE_STRING, (uint8_t*)as_out_val, as_prop_len, sizeof(const char *)); - if (ret != EOK) return ret; - } - } - - dbret = dbus_message_iter_close_container(&iter, &iter_dict); - if (!dbret) return ENOMEM; - - return sbus_request_finish(dbus_req, reply); -} - /* interface info for org.freedesktop.sssd.infopipe.Components */ const struct sbus_interface_meta infopipe_component_meta = { "org.freedesktop.sssd.infopipe.Components", /* name */ infopipe_component__methods, NULL, /* no signals */ infopipe_component__properties, - invoke_infopipe_component_get_all, /* GetAll invoker */ + sbus_invoke_get_all, /* GetAll invoker */ }; /* property info for org.freedesktop.sssd.infopipe.Domains */ @@ -519,7 +392,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_name), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -528,7 +401,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_provider), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -537,7 +410,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "as", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_primary_servers), - invoke_get_as, + sbus_invoke_get_as, 0, /* not writable */ NULL, /* no invoker */ }, @@ -546,7 +419,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "as", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_backup_servers), - invoke_get_as, + sbus_invoke_get_as, 0, /* not writable */ NULL, /* no invoker */ }, @@ -555,7 +428,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "u", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_min_id), - invoke_get_u, + sbus_invoke_get_u, 0, /* not writable */ NULL, /* no invoker */ }, @@ -564,7 +437,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "u", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_max_id), - invoke_get_u, + sbus_invoke_get_u, 0, /* not writable */ NULL, /* no invoker */ }, @@ -573,7 +446,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_realm), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -582,7 +455,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_forest), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -591,7 +464,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_login_format), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -600,7 +473,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_fully_qualified_name_format), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -609,7 +482,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "b", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_enumerable), - invoke_get_b, + sbus_invoke_get_b, 0, /* not writable */ NULL, /* no invoker */ }, @@ -618,7 +491,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "b", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_use_fully_qualified_names), - invoke_get_b, + sbus_invoke_get_b, 0, /* not writable */ NULL, /* no invoker */ }, @@ -627,7 +500,7 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "b", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_subdomain), - invoke_get_b, + sbus_invoke_get_b, 0, /* not writable */ NULL, /* no invoker */ }, @@ -636,219 +509,20 @@ const struct sbus_property_meta infopipe_domain__properties[] = { "o", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct infopipe_domain, infopipe_domain_get_parent_domain), - invoke_get_o, + sbus_invoke_get_o, 0, /* not writable */ NULL, /* no invoker */ }, { NULL, } }; -/* invokes GetAll for the 'org.freedesktop.sssd.infopipe.Domains' interface */ -static int invoke_infopipe_domain_get_all(struct sbus_request *dbus_req, void *function_ptr) -{ - DBusMessage *reply; - dbus_bool_t dbret; - DBusMessageIter iter; - DBusMessageIter iter_dict; - int ret; - struct sbus_interface *intf = dbus_req->intf; - const struct sbus_property_meta *property; - const char * s_prop_val; - const char * s_out_val; - void (*s_handler)(struct sbus_request *, void *data, const char * *); - bool b_prop_val; - dbus_bool_t b_out_val; - void (*b_handler)(struct sbus_request *, void *data, bool *); - uint32_t u_prop_val; - uint32_t u_out_val; - void (*u_handler)(struct sbus_request *, void *data, uint32_t *); - const char * *as_prop_val; - int as_prop_len; - const char * *as_out_val; - void (*as_handler)(struct sbus_request *, void *data, const char * * *, int *); - const char * o_prop_val; - const char * o_out_val; - void (*o_handler)(struct sbus_request *, void *data, const char * *); - - reply = dbus_message_new_method_return(dbus_req->message); - if (!reply) return ENOMEM; - dbus_message_iter_init_append(reply, &iter); - dbret = dbus_message_iter_open_container( - &iter, DBUS_TYPE_ARRAY, - DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING - DBUS_TYPE_STRING_AS_STRING - DBUS_TYPE_VARIANT_AS_STRING - DBUS_DICT_ENTRY_END_CHAR_AS_STRING, - &iter_dict); - if (!dbret) return ENOMEM; - - property = sbus_meta_find_property(intf->vtable->meta, "name"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "name", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "provider"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "provider", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "primary_servers"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - as_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (as_handler) { - (as_handler)(dbus_req, dbus_req->intf->handler_data, &as_prop_val, &as_prop_len); - as_out_val = as_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "primary_servers", DBUS_TYPE_STRING, (uint8_t*)as_out_val, as_prop_len, sizeof(const char *)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "backup_servers"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - as_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (as_handler) { - (as_handler)(dbus_req, dbus_req->intf->handler_data, &as_prop_val, &as_prop_len); - as_out_val = as_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "backup_servers", DBUS_TYPE_STRING, (uint8_t*)as_out_val, as_prop_len, sizeof(const char *)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "min_id"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - u_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (u_handler) { - (u_handler)(dbus_req, dbus_req->intf->handler_data, &u_prop_val); - u_out_val = u_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "min_id", DBUS_TYPE_UINT32, &u_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "max_id"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - u_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (u_handler) { - (u_handler)(dbus_req, dbus_req->intf->handler_data, &u_prop_val); - u_out_val = u_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "max_id", DBUS_TYPE_UINT32, &u_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "realm"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "realm", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "forest"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "forest", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "login_format"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "login_format", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "fully_qualified_name_format"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "fully_qualified_name_format", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "enumerable"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - b_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (b_handler) { - (b_handler)(dbus_req, dbus_req->intf->handler_data, &b_prop_val); - b_out_val = b_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "enumerable", DBUS_TYPE_BOOLEAN, &b_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "use_fully_qualified_names"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - b_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (b_handler) { - (b_handler)(dbus_req, dbus_req->intf->handler_data, &b_prop_val); - b_out_val = b_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "use_fully_qualified_names", DBUS_TYPE_BOOLEAN, &b_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "subdomain"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - b_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (b_handler) { - (b_handler)(dbus_req, dbus_req->intf->handler_data, &b_prop_val); - b_out_val = b_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "subdomain", DBUS_TYPE_BOOLEAN, &b_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "parent_domain"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - o_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (o_handler) { - (o_handler)(dbus_req, dbus_req->intf->handler_data, &o_prop_val); - o_out_val = o_prop_val == NULL ? "/" : o_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "parent_domain", DBUS_TYPE_OBJECT_PATH, &o_out_val); - if (ret != EOK) return ret; - } - } - - dbret = dbus_message_iter_close_container(&iter, &iter_dict); - if (!dbret) return ENOMEM; - - return sbus_request_finish(dbus_req, reply); -} - /* interface info for org.freedesktop.sssd.infopipe.Domains */ const struct sbus_interface_meta infopipe_domain_meta = { "org.freedesktop.sssd.infopipe.Domains", /* name */ NULL, /* no methods */ NULL, /* no signals */ infopipe_domain__properties, - invoke_infopipe_domain_get_all, /* GetAll invoker */ + sbus_invoke_get_all, /* GetAll invoker */ }; /* invokes a handler with a 's' DBus signature */ @@ -882,74 +556,3 @@ static int invoke_u_method(struct sbus_request *dbus_req, void *function_ptr) return (handler)(dbus_req, dbus_req->intf->handler_data, arg_0); } - -/* invokes a getter with a 'const char *' DBus type */ -static int invoke_get_s(struct sbus_request *dbus_req, void *function_ptr) -{ - const char * prop_val; - const char * out_val; - - void (*handler)(struct sbus_request *, void *data, const char * *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val == NULL ? "" : prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_STRING, &out_val); -} - -/* invokes a getter with a 'dbus_bool_t' DBus type */ -static int invoke_get_b(struct sbus_request *dbus_req, void *function_ptr) -{ - bool prop_val; - dbus_bool_t out_val; - - void (*handler)(struct sbus_request *, void *data, bool *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_BOOLEAN, &out_val); -} - -/* invokes a getter with a 'uint32_t' DBus type */ -static int invoke_get_u(struct sbus_request *dbus_req, void *function_ptr) -{ - uint32_t prop_val; - uint32_t out_val; - - void (*handler)(struct sbus_request *, void *data, uint32_t *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_UINT32, &out_val); -} - -/* invokes a getter with an array of 'const char *' DBus type */ -static int invoke_get_as(struct sbus_request *dbus_req, void *function_ptr) -{ - const char * *prop_val; - int prop_len; - const char * *out_val; - - void (*handler)(struct sbus_request *, void *data, const char * * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_STRING, (uint8_t*)out_val, prop_len, sizeof(const char *)); -} - -/* invokes a getter with a 'const char *' DBus type */ -static int invoke_get_o(struct sbus_request *dbus_req, void *function_ptr) -{ - const char * prop_val; - const char * out_val; - - void (*handler)(struct sbus_request *, void *data, const char * *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val == NULL ? "/" : prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_OBJECT_PATH, &out_val); -} diff --git a/src/sbus/sbus_codegen b/src/sbus/sbus_codegen index 78ba89d4b..f93cb33a4 100755 --- a/src/sbus/sbus_codegen +++ b/src/sbus/sbus_codegen @@ -190,7 +190,7 @@ class Property(Typed): def getter_name(self): return "%s_get_%s" % (self.iface.c_name(), self.c_name()) def getter_invoker_name(self): - return "invoke_get_%s" % self.type + return "sbus_invoke_get_%s" % self.type def getter_signature(self, name): sig = "void (*%s)(struct sbus_request *, void *data, %s *" % (name, self.sssd_type) if self.is_array: @@ -306,108 +306,6 @@ def source_prop_handler(prop, type_prefix=False): out(" %s", prop.getter_signature("%shandler" % prefix), new_line=False) out(";") -def source_getter_invoker(prop): - out("") - if prop.is_array: - out("/* invokes a getter with an array of '%s' DBus type */", prop.dbus_type) - else: - out("/* invokes a getter with a '%s' DBus type */", prop.dbus_type) - out("static int %s(struct sbus_request *dbus_req, void *function_ptr)", - prop.getter_invoker_name()) - out("{") - - source_prop_types(prop) - - out("") - out(" %s", prop.getter_signature("handler"), new_line=False) - out(" = function_ptr;") - out("") - - out(" (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val", new_line=False) - if prop.is_array: - out(", &prop_len", new_line=False) - out(");") - - out("") - if prop.type == "s": - out(" out_val = prop_val == NULL ? \"\" : prop_val;") - elif prop.type == "o": - out(" out_val = prop_val == NULL ? \"/\" : prop_val;") - else: - out(" out_val = prop_val;") - if prop.is_array: - out(" return sbus_request_return_array_as_variant(dbus_req, %s, (uint8_t*)out_val, prop_len, sizeof(%s));", prop.dbus_constant, prop.sssd_type) - else: - out(" return sbus_request_return_as_variant(dbus_req, %s, &out_val);", prop.dbus_constant) - out("}") - -def source_getall_invoker(iface, prop_invokers): - out("") - out("/* invokes GetAll for the '%s' interface */", iface.name) - out("static int invoke_%s_get_all(struct sbus_request *dbus_req, void *function_ptr)", - iface.c_name()) - out("{") - out(" DBusMessage *reply;") - out(" dbus_bool_t dbret;") - out(" DBusMessageIter iter;") - out(" DBusMessageIter iter_dict;") - if iface.properties: - out(" int ret;") - out(" struct sbus_interface *intf = dbus_req->intf;") - out(" const struct sbus_property_meta *property;") - - iface_types = [ p.type for p in iface.properties ] - for prop in [ p for p in prop_invokers.values() if p.type in iface_types ]: - source_prop_types(prop, type_prefix=True) - source_prop_handler(prop, type_prefix=True) - out("") - - out(" reply = dbus_message_new_method_return(dbus_req->message);") - out(" if (!reply) return ENOMEM;") - out(" dbus_message_iter_init_append(reply, &iter);") - out(" dbret = dbus_message_iter_open_container(") - out(" &iter, DBUS_TYPE_ARRAY,") - out(" DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING") - out(" DBUS_TYPE_STRING_AS_STRING") - out(" DBUS_TYPE_VARIANT_AS_STRING") - out(" DBUS_DICT_ENTRY_END_CHAR_AS_STRING,") - out(" &iter_dict);") - out(" if (!dbret) return ENOMEM;") - out("") - - for prop in iface.properties: - out(" property = sbus_meta_find_property(intf->vtable->meta, \"%s\");", prop.c_name()) - out(" if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) {") - out(" %s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get);", prop.type) - out(" if (%s_handler) {", prop.type) - out(" (%s_handler)(dbus_req, dbus_req->intf->handler_data, &%s_prop_val", prop.type, prop.type, new_line=False) - if prop.is_array: - out(", &%s_prop_len", prop.type, new_line=False) - out(");") - if prop.type == "s": - out(" %s_out_val = %s_prop_val == NULL ? \"\" : %s_prop_val;", - prop.type, prop.type, prop.type) - elif prop.type == "o": - out(" %s_out_val = %s_prop_val == NULL ? \"/\" : %s_prop_val;", - prop.type, prop.type, prop.type) - else: - out(" %s_out_val = %s_prop_val;", prop.type, prop.type) - if prop.is_array: - out(" ret = sbus_add_array_as_variant_to_dict(&iter_dict, \"%s\", %s, (uint8_t*)%s_out_val, %s_prop_len, sizeof(%s));", prop.c_name(), prop.dbus_constant, prop.type, prop.type, prop.sssd_type) - else: - out(" ret = sbus_add_variant_to_dict(&iter_dict, \"%s\", %s, &%s_out_val);", prop.c_name(), prop.dbus_constant, prop.type) - out(" if (ret != EOK) return ret;") - out(" }") - out(" }") - out("") - - out(" dbret = dbus_message_iter_close_container(&iter, &iter_dict);") - out(" if (!dbret) return ENOMEM;") - out("") - - out(" return sbus_request_finish(dbus_req, reply);") - out("}") - def forward_method_invokers(ifaces): invokers = { } for iface in ifaces: @@ -425,27 +323,6 @@ def source_method_invokers(invokers): for (signature, meth) in invokers.items(): source_method_invoker(signature, meth.in_args) -def forward_prop_invoker(prop): - out("static int %s(struct sbus_request *dbus_req, void *function_ptr);", - prop.getter_invoker_name()) - -def forward_prop_invokers(ifaces): - invokers = { } - for iface in ifaces: - for prop in iface.properties: - if not prop.is_basic: - continue - if prop.type in invokers: - continue - forward_prop_invoker(prop) - invokers[prop.type] = prop - return invokers - -def source_prop_invokers(invokers): - for (type, prop) in invokers.items(): - if prop.readable: - source_getter_invoker(prop) - def source_finisher(meth): out("") out("int %s_finish(struct sbus_request *req%s)", @@ -590,7 +467,7 @@ def source_interface(iface): out(" %s__properties,", iface.c_name()) else: out(" NULL, /* no properties */") - out(" invoke_%s_get_all, /* GetAll invoker */", iface.c_name()) + out(" sbus_invoke_get_all, /* GetAll invoker */") out("};") def generate_source(ifaces, filename, include_header=None): @@ -602,11 +479,11 @@ def generate_source(ifaces, filename, include_header=None): out("#include \"util/util.h\"") out("#include \"sbus/sssd_dbus.h\"") out("#include \"sbus/sssd_dbus_meta.h\"") + out("#include \"sbus/sssd_dbus_invokers.h\"") if include_header: out("#include \"%s\"", os.path.basename(include_header)) meth_invokers = forward_method_invokers(ifaces) - prop_invokers = forward_prop_invokers(ifaces) for iface in ifaces: @@ -622,14 +499,10 @@ def generate_source(ifaces, filename, include_header=None): if iface.properties: source_properties(iface, iface.properties) - # always generate getall, for interfaces without properties - # let's return an empty array - source_getall_invoker(iface, prop_invokers) # The sbus_interface structure source_interface(iface) source_method_invokers(meth_invokers) - source_prop_invokers(prop_invokers) def header_finisher(iface, meth): if meth.use_raw_handler(): diff --git a/src/sbus/sssd_dbus_invokers.c b/src/sbus/sssd_dbus_invokers.c new file mode 100644 index 000000000..df9104f63 --- /dev/null +++ b/src/sbus/sssd_dbus_invokers.c @@ -0,0 +1,465 @@ +/* + Authors: + Pavel Březina <pbrezina@redhat.com> + + Copyright (C) 2014 Red Hat + + SBUS: Interface introspection + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "config.h" + +#include <dbus/dbus.h> +#include <errno.h> + +#include "util/util.h" +#include "sbus/sssd_dbus.h" +#include "sbus/sssd_dbus_meta.h" +#include "sbus/sssd_dbus_private.h" +#include "sbus/sssd_dbus_invokers.h" + +static int +sbus_invoke_get_basic(struct sbus_request *sbus_req, + void *function_ptr, + void *value_ptr, + int dbus_type, + DBusMessageIter *iter) +{ + void (*handler_fn)(struct sbus_request *, void *, void *); + dbus_bool_t value_bool; + dbus_bool_t dbret; + + handler_fn = function_ptr; + handler_fn(sbus_req, sbus_req->intf->handler_data, value_ptr); + + if (dbus_type == DBUS_TYPE_BOOLEAN) { + /* Special case to convert bool into dbus_bool_t. */ + value_bool = *((bool *) value_ptr); + value_ptr = &value_bool; + } + + dbret = dbus_message_iter_append_basic(iter, dbus_type, value_ptr); + return dbret ? EOK : EIO; +} + +static int +sbus_invoke_get_string(struct sbus_request *sbus_req, + void *function_ptr, + const char *default_value, + int dbus_type, + DBusMessageIter *iter) +{ + void (*handler_fn)(struct sbus_request *, void *, const char **); + const char *value = NULL; + dbus_bool_t dbret; + + handler_fn = function_ptr; + handler_fn(sbus_req, sbus_req->intf->handler_data, &value); + + value = value == NULL ? default_value : value; + + dbret = dbus_message_iter_append_basic(iter, dbus_type, &value); + return dbret ? EOK : EIO; +} + +static int +sbus_invoke_get_array(struct sbus_request *sbus_req, + void *function_ptr, + unsigned int item_size, + int dbus_type, + DBusMessageIter *iter) +{ + void (*handler_fn)(struct sbus_request *, void *, void *, int *); + const char array_type[2] = {dbus_type, '\0'}; + DBusMessageIter array; + dbus_bool_t dbret; + uint8_t *values; + void *addr; + int num_values; + int i; + + handler_fn = function_ptr; + handler_fn(sbus_req, sbus_req->intf->handler_data, &values, &num_values); + + dbret = dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, + array_type, &array); + if (!dbret) { + return EIO; + } + + for (i = 0; i < num_values; i++) { + addr = values + i * item_size; + + dbret = dbus_message_iter_append_basic(&array, dbus_type, addr); + if (!dbret) { + return ENOMEM; + } + } + + dbret = dbus_message_iter_close_container(iter, &array); + if (!dbret) { + return EIO; + } + + return EOK; +} + +int sbus_invoke_get_y(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + uint8_t value; + + return sbus_invoke_get_basic(sbus_req, function_ptr, &value, + DBUS_TYPE_BYTE, iter); +} + +int sbus_invoke_get_b(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + bool value; + + return sbus_invoke_get_basic(sbus_req, function_ptr, &value, + DBUS_TYPE_BOOLEAN, iter); +} + +int sbus_invoke_get_n(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + int16_t value; + + return sbus_invoke_get_basic(sbus_req, function_ptr, &value, + DBUS_TYPE_INT16, iter); +} + +int sbus_invoke_get_q(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + uint16_t value; + + return sbus_invoke_get_basic(sbus_req, function_ptr, &value, + DBUS_TYPE_UINT16, iter); +} + +int sbus_invoke_get_i(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + int32_t value; + + return sbus_invoke_get_basic(sbus_req, function_ptr, &value, + DBUS_TYPE_INT32, iter); +} + +int sbus_invoke_get_u(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + uint32_t value; + + return sbus_invoke_get_basic(sbus_req, function_ptr, &value, + DBUS_TYPE_UINT32, iter); +} + +int sbus_invoke_get_x(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + int64_t value; + + return sbus_invoke_get_basic(sbus_req, function_ptr, &value, + DBUS_TYPE_INT64, iter); +} + +int sbus_invoke_get_t(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + uint64_t value; + + return sbus_invoke_get_basic(sbus_req, function_ptr, &value, + DBUS_TYPE_UINT64, iter); +} + +int sbus_invoke_get_d(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + double value; + + return sbus_invoke_get_basic(sbus_req, function_ptr, &value, + DBUS_TYPE_DOUBLE, iter); +} + +int sbus_invoke_get_s(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_string(sbus_req, function_ptr, "", + DBUS_TYPE_STRING, iter); +} + +int sbus_invoke_get_o(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_string(sbus_req, function_ptr, "/", + DBUS_TYPE_OBJECT_PATH, iter); +} + +int sbus_invoke_get_ay(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(uint8_t), + DBUS_TYPE_BYTE, iter); +} + +int sbus_invoke_get_an(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(int16_t), + DBUS_TYPE_INT16, iter); +} + +int sbus_invoke_get_aq(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(uint16_t), + DBUS_TYPE_UINT16, iter); +} + +int sbus_invoke_get_ai(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(int32_t), + DBUS_TYPE_INT32, iter); +} + +int sbus_invoke_get_au(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(uint32_t), + DBUS_TYPE_UINT32, iter); +} + +int sbus_invoke_get_ax(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(int64_t), + DBUS_TYPE_INT64, iter); +} + +int sbus_invoke_get_at(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(uint64_t), + DBUS_TYPE_UINT64, iter); +} + +int sbus_invoke_get_ad(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(double), + DBUS_TYPE_DOUBLE, iter); +} + +int sbus_invoke_get_as(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(const char *), + DBUS_TYPE_STRING, iter); +} + +int sbus_invoke_get_ao(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr) +{ + return sbus_invoke_get_array(sbus_req, function_ptr, sizeof(const char *), + DBUS_TYPE_OBJECT_PATH, iter); +} + +void sbus_invoke_get(struct sbus_request *sbus_req, + const char *type, + sbus_get_invoker_fn invoker_fn, + sbus_msg_handler_fn handler_fn) +{ + DBusMessage *reply = NULL; + DBusMessageIter iter; + DBusMessageIter variant; + dbus_bool_t dbret; + errno_t ret; + + reply = dbus_message_new_method_return(sbus_req->message); + if (reply == NULL) { + ret = ENOMEM; + goto fail; + } + + dbus_message_iter_init_append(reply, &iter); + + dbret = dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, + type, &variant); + if (!dbret) { + ret = ENOMEM; + goto fail; + } + + ret = invoker_fn(&variant, sbus_req, handler_fn); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, + "Invoker error [%d]: %s\n", ret, sss_strerror(ret)); + goto fail; + } + + dbret = dbus_message_iter_close_container(&iter, &variant); + if (!dbret) { + ret = EIO; + goto fail; + } + + sbus_request_finish(sbus_req, reply); + return; + +fail: + DEBUG(SSSDBG_CRIT_FAILURE, + "Unable to reply [%d]: %s\n", ret, sss_strerror(ret)); + + if (reply != NULL) { + dbus_message_unref(reply); + } + sbus_request_finish(sbus_req, NULL); + + return; +} + +void sbus_invoke_get_all(struct sbus_request *sbus_req) +{ + const struct sbus_property_meta *props; + sbus_msg_handler_fn *handler_fn; + DBusMessage *reply = NULL; + DBusMessageIter iter; + DBusMessageIter array; + DBusMessageIter dict; + DBusMessageIter variant; + dbus_bool_t dbret; + errno_t ret; + int i; + + reply = dbus_message_new_method_return(sbus_req->message); + if (reply == NULL) { + ret = ENOMEM; + goto fail; + } + + dbus_message_iter_init_append(reply, &iter); + + dbret = dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, + DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING + DBUS_TYPE_STRING_AS_STRING + DBUS_TYPE_VARIANT_AS_STRING + DBUS_DICT_ENTRY_END_CHAR_AS_STRING, + &array); + if (!dbret) { + ret = ENOMEM; + goto fail; + } + + props = sbus_req->intf->vtable->meta->properties; + + if (props != NULL) { + for (i = 0; props[i].name != NULL; i++) { + dbret = dbus_message_iter_open_container(&array, + DBUS_TYPE_DICT_ENTRY, NULL, + &dict); + if (!dbret) { + ret = ENOMEM; + goto fail; + } + + /* key */ + dbret = dbus_message_iter_append_basic(&dict, DBUS_TYPE_STRING, + &props[i].name); + if (!dbret) { + ret = ENOMEM; + goto fail; + } + + /* value */ + dbret = dbus_message_iter_open_container(&dict, DBUS_TYPE_VARIANT, + props[i].type, &variant); + if (!dbret) { + ret = ENOMEM; + goto fail; + } + + handler_fn = VTABLE_FUNC(sbus_req->intf->vtable, + props[i].vtable_offset_get); + if (handler_fn == NULL) { + ret = ERR_INTERNAL; + goto fail; + } + + ret = props[i].invoker_get(&variant, sbus_req, handler_fn); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, + "Invoker error [%d]: %s\n", ret, sss_strerror(ret)); + goto fail; + } + + dbret = dbus_message_iter_close_container(&dict, &variant); + if (!dbret) { + ret = EIO; + goto fail; + } + + dbret = dbus_message_iter_close_container(&array, &dict); + if (!dbret) { + ret = EIO; + goto fail; + } + } + } + + dbret = dbus_message_iter_close_container(&iter, &array); + if (!dbret) { + ret = EIO; + goto fail; + } + + sbus_request_finish(sbus_req, reply); + return; + +fail: + DEBUG(SSSDBG_CRIT_FAILURE, + "Unable to reply [%d]: %s\n", ret, sss_strerror(ret)); + + dbus_message_unref(reply); + sbus_request_finish(sbus_req, NULL); + + return; +} diff --git a/src/sbus/sssd_dbus_invokers.h b/src/sbus/sssd_dbus_invokers.h new file mode 100644 index 000000000..8fd498594 --- /dev/null +++ b/src/sbus/sssd_dbus_invokers.h @@ -0,0 +1,120 @@ +/* + Authors: + Pavel Březina <pbrezina@redhat.com> + + Copyright (C) 2014 Red Hat + + SBUS: Interface introspection + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef SSSD_DBUS_INVOKER_H_ +#define SSSD_DBUS_INVOKER_H_ + +#include "sbus/sssd_dbus.h" + +int sbus_invoke_get_y(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_b(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_n(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_q(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_i(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_u(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_x(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_t(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_d(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_s(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_o(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_ay(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_an(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_aq(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_ai(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_au(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_ax(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_at(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_ad(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_as(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +int sbus_invoke_get_ao(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *function_ptr); + +void sbus_invoke_get(struct sbus_request *sbus_req, + const char *type, + sbus_get_invoker_fn invoker_fn, + sbus_msg_handler_fn handler_fn); + +void sbus_invoke_get_all(struct sbus_request *sbus_req); + + +#endif /* SSSD_DBUS_INVOKER_H_ */ diff --git a/src/sbus/sssd_dbus_meta.h b/src/sbus/sssd_dbus_meta.h index e7de9dfdf..83c2f0517 100644 --- a/src/sbus/sssd_dbus_meta.h +++ b/src/sbus/sssd_dbus_meta.h @@ -21,6 +21,8 @@ #ifndef _SSSD_DBUS_META_H_ #define _SSSD_DBUS_META_H_ +#include <dbus/dbus.h> + /* * Interface metadata * @@ -45,7 +47,14 @@ struct sbus_arg_meta { struct sbus_request; struct sbus_interface; -typedef int (* sbus_method_invoker_fn)(struct sbus_request *dbus_req, void *handler_fn); +typedef int (* sbus_get_invoker_fn)(DBusMessageIter *iter, + struct sbus_request *sbus_req, + void *handler_fn); + +typedef void (* sbus_get_all_invoker_fn)(struct sbus_request *sbus_req); + +typedef int (* sbus_method_invoker_fn)(struct sbus_request *sbus_req, + void *handler_fn); struct sbus_method_meta { const char *name; @@ -65,7 +74,7 @@ struct sbus_property_meta { const char *type; int flags; size_t vtable_offset_get; - sbus_method_invoker_fn invoker_get; + sbus_get_invoker_fn invoker_get; size_t vtable_offset_set; sbus_method_invoker_fn invoker_set; }; @@ -80,7 +89,7 @@ struct sbus_interface_meta { const struct sbus_method_meta *methods; const struct sbus_signal_meta *signals; const struct sbus_property_meta *properties; - sbus_method_invoker_fn invoker_get_all; + sbus_get_all_invoker_fn invoker_get_all; }; const struct sbus_method_meta * diff --git a/src/sbus/sssd_dbus_properties.c b/src/sbus/sssd_dbus_properties.c index 060da584e..15bc6a937 100644 --- a/src/sbus/sssd_dbus_properties.c +++ b/src/sbus/sssd_dbus_properties.c @@ -25,6 +25,7 @@ #include "sbus/sssd_dbus.h" #include "sbus/sssd_dbus_meta.h" #include "sbus/sssd_dbus_private.h" +#include "sbus/sssd_dbus_invokers.h" #define CHECK_SIGNATURE_OR_FAIL(req, error, label, exp) do { \ const char *__sig; \ @@ -124,11 +125,9 @@ sbus_properties_vtable(void) return &iface.vtable; } -static int sbus_properties_invoke(struct sbus_request *sbus_req, - struct sbus_interface *iface, - sbus_msg_handler_fn handler_fn, - void *handler_data, - sbus_method_invoker_fn invoker_fn) +static struct sbus_request * +sbus_properties_subreq(struct sbus_request *sbus_req, + struct sbus_interface *iface) { struct sbus_request *sbus_subreq; @@ -137,20 +136,18 @@ static int sbus_properties_invoke(struct sbus_request *sbus_req, * so it is freed together. */ sbus_subreq = sbus_new_request(sbus_req->conn, iface, sbus_req->message); if (sbus_subreq == NULL) { - return ENOMEM; + return NULL; } talloc_steal(sbus_subreq, sbus_req); - sbus_request_invoke_or_finish(sbus_subreq, handler_fn, handler_data, - invoker_fn); - - return EOK; + return sbus_subreq; } static int sbus_properties_get(struct sbus_request *sbus_req, void *pvt) { DBusError *error; + struct sbus_request *sbus_subreq; struct sbus_connection *conn; struct sbus_interface *iface; const struct sbus_property_meta *prop; @@ -202,8 +199,15 @@ static int sbus_properties_get(struct sbus_request *sbus_req, void *pvt) goto fail; } - return sbus_properties_invoke(sbus_req, iface, handler_fn, - iface->handler_data, prop->invoker_get); + sbus_subreq = sbus_properties_subreq(sbus_req, iface); + if (sbus_subreq == NULL) { + error = NULL; + goto fail; + } + + sbus_invoke_get(sbus_subreq, prop->type, + prop->invoker_get, handler_fn); + return EOK; fail: return sbus_request_fail_and_finish(sbus_req, error); @@ -218,6 +222,7 @@ static int sbus_properties_set(struct sbus_request *sbus_req, void *pvt) DBusError *error; DBusMessageIter iter; DBusMessageIter iter_variant; + struct sbus_request *sbus_subreq; struct sbus_connection *conn; struct sbus_interface *iface; const struct sbus_property_meta *prop; @@ -276,9 +281,17 @@ static int sbus_properties_set(struct sbus_request *sbus_req, void *pvt) goto fail; } - return sbus_properties_invoke(sbus_req, iface, handler_fn, + sbus_subreq = sbus_properties_subreq(sbus_req, iface); + if (sbus_subreq == NULL) { + error = NULL; + goto fail; + } + + sbus_request_invoke_or_finish(sbus_subreq, handler_fn, iface->handler_data, prop->invoker_set); + return EOK; + fail: return sbus_request_fail_and_finish(sbus_req, error); } @@ -286,6 +299,7 @@ fail: static int sbus_properties_get_all(struct sbus_request *sbus_req, void *pvt) { DBusError *error; + struct sbus_request *sbus_subreq; struct sbus_connection *conn; struct sbus_interface *iface; const char *interface_name; @@ -312,8 +326,15 @@ static int sbus_properties_get_all(struct sbus_request *sbus_req, void *pvt) goto fail; } - return sbus_properties_invoke(sbus_req, iface, NULL, NULL, - iface->vtable->meta->invoker_get_all); + sbus_subreq = sbus_properties_subreq(sbus_req, iface); + if (sbus_subreq == NULL) { + error = NULL; + goto fail; + } + + iface->vtable->meta->invoker_get_all(sbus_subreq); + + return EOK; fail: return sbus_request_fail_and_finish(sbus_req, error); diff --git a/src/tests/sbus_codegen_tests_generated.c b/src/tests/sbus_codegen_tests_generated.c index be5c264b7..5fdf9e277 100644 --- a/src/tests/sbus_codegen_tests_generated.c +++ b/src/tests/sbus_codegen_tests_generated.c @@ -3,6 +3,7 @@ #include "util/util.h" #include "sbus/sssd_dbus.h" #include "sbus/sssd_dbus_meta.h" +#include "sbus/sssd_dbus_invokers.h" #include "sbus_codegen_tests_generated.h" /* invokes a handler with a 'bu' DBus signature */ @@ -16,27 +17,6 @@ static int invoke_u_method(struct sbus_request *dbus_req, void *function_ptr); /* invokes a handler with a 'ybnqiuxtdsoayanaqaiauaxatadasao' DBus signature */ static int invoke_ybnqiuxtdsoayanaqaiauaxatadasao_method(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_s(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_y(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_b(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_n(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_q(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_i(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_u(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_x(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_t(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_d(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_o(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_ay(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_an(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_aq(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_ai(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_au(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_ax(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_at(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_ad(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_as(struct sbus_request *dbus_req, void *function_ptr); -static int invoke_get_ao(struct sbus_request *dbus_req, void *function_ptr); /* arguments for com.planetexpress.Ship.MoveUniverse */ const struct sbus_arg_meta com_planetexpress_Ship_MoveUniverse__in[] = { @@ -118,63 +98,20 @@ const struct sbus_property_meta com_planetexpress_Ship__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct com_planetexpress_Ship, com_planetexpress_Ship_get_Color), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, { NULL, } }; -/* invokes GetAll for the 'com.planetexpress.Ship' interface */ -static int invoke_com_planetexpress_Ship_get_all(struct sbus_request *dbus_req, void *function_ptr) -{ - DBusMessage *reply; - dbus_bool_t dbret; - DBusMessageIter iter; - DBusMessageIter iter_dict; - int ret; - struct sbus_interface *intf = dbus_req->intf; - const struct sbus_property_meta *property; - const char * s_prop_val; - const char * s_out_val; - void (*s_handler)(struct sbus_request *, void *data, const char * *); - - reply = dbus_message_new_method_return(dbus_req->message); - if (!reply) return ENOMEM; - dbus_message_iter_init_append(reply, &iter); - dbret = dbus_message_iter_open_container( - &iter, DBUS_TYPE_ARRAY, - DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING - DBUS_TYPE_STRING_AS_STRING - DBUS_TYPE_VARIANT_AS_STRING - DBUS_DICT_ENTRY_END_CHAR_AS_STRING, - &iter_dict); - if (!dbret) return ENOMEM; - - property = sbus_meta_find_property(intf->vtable->meta, "Color"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "Color", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - dbret = dbus_message_iter_close_container(&iter, &iter_dict); - if (!dbret) return ENOMEM; - - return sbus_request_finish(dbus_req, reply); -} - /* interface info for com.planetexpress.Ship */ const struct sbus_interface_meta com_planetexpress_Ship_meta = { "com.planetexpress.Ship", /* name */ com_planetexpress_Ship__methods, com_planetexpress_Ship__signals, com_planetexpress_Ship__properties, - invoke_com_planetexpress_Ship_get_all, /* GetAll invoker */ + sbus_invoke_get_all, /* GetAll invoker */ }; /* arguments for com.planetexpress.Pilot.Blink */ @@ -303,7 +240,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE | SBUS_PROPERTY_WRITABLE, offsetof(struct test_pilot, test_pilot_get_FullName), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -312,7 +249,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "y", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_byte), - invoke_get_y, + sbus_invoke_get_y, 0, /* not writable */ NULL, /* no invoker */ }, @@ -321,7 +258,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "b", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_boolean), - invoke_get_b, + sbus_invoke_get_b, 0, /* not writable */ NULL, /* no invoker */ }, @@ -330,7 +267,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "n", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_int16), - invoke_get_n, + sbus_invoke_get_n, 0, /* not writable */ NULL, /* no invoker */ }, @@ -339,7 +276,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "q", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_uint16), - invoke_get_q, + sbus_invoke_get_q, 0, /* not writable */ NULL, /* no invoker */ }, @@ -348,7 +285,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "i", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_int32), - invoke_get_i, + sbus_invoke_get_i, 0, /* not writable */ NULL, /* no invoker */ }, @@ -357,7 +294,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "u", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_uint32), - invoke_get_u, + sbus_invoke_get_u, 0, /* not writable */ NULL, /* no invoker */ }, @@ -366,7 +303,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "x", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_int64), - invoke_get_x, + sbus_invoke_get_x, 0, /* not writable */ NULL, /* no invoker */ }, @@ -375,7 +312,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "t", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_uint64), - invoke_get_t, + sbus_invoke_get_t, 0, /* not writable */ NULL, /* no invoker */ }, @@ -384,7 +321,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "d", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_double), - invoke_get_d, + sbus_invoke_get_d, 0, /* not writable */ NULL, /* no invoker */ }, @@ -393,7 +330,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_string), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -402,7 +339,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "o", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_object_path), - invoke_get_o, + sbus_invoke_get_o, 0, /* not writable */ NULL, /* no invoker */ }, @@ -411,7 +348,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "s", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_null_string), - invoke_get_s, + sbus_invoke_get_s, 0, /* not writable */ NULL, /* no invoker */ }, @@ -420,7 +357,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "o", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_null_path), - invoke_get_o, + sbus_invoke_get_o, 0, /* not writable */ NULL, /* no invoker */ }, @@ -429,7 +366,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "ay", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_byte_array), - invoke_get_ay, + sbus_invoke_get_ay, 0, /* not writable */ NULL, /* no invoker */ }, @@ -438,7 +375,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "an", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_int16_array), - invoke_get_an, + sbus_invoke_get_an, 0, /* not writable */ NULL, /* no invoker */ }, @@ -447,7 +384,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "aq", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_uint16_array), - invoke_get_aq, + sbus_invoke_get_aq, 0, /* not writable */ NULL, /* no invoker */ }, @@ -456,7 +393,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "ai", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_int32_array), - invoke_get_ai, + sbus_invoke_get_ai, 0, /* not writable */ NULL, /* no invoker */ }, @@ -465,7 +402,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "au", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_uint32_array), - invoke_get_au, + sbus_invoke_get_au, 0, /* not writable */ NULL, /* no invoker */ }, @@ -474,7 +411,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "ax", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_int64_array), - invoke_get_ax, + sbus_invoke_get_ax, 0, /* not writable */ NULL, /* no invoker */ }, @@ -483,7 +420,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "at", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_uint64_array), - invoke_get_at, + sbus_invoke_get_at, 0, /* not writable */ NULL, /* no invoker */ }, @@ -492,7 +429,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "ad", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_double_array), - invoke_get_ad, + sbus_invoke_get_ad, 0, /* not writable */ NULL, /* no invoker */ }, @@ -501,7 +438,7 @@ const struct sbus_property_meta test_pilot__properties[] = { "as", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_string_array), - invoke_get_as, + sbus_invoke_get_as, 0, /* not writable */ NULL, /* no invoker */ }, @@ -510,386 +447,20 @@ const struct sbus_property_meta test_pilot__properties[] = { "ao", /* type */ SBUS_PROPERTY_READABLE, offsetof(struct test_pilot, test_pilot_get_object_path_array), - invoke_get_ao, + sbus_invoke_get_ao, 0, /* not writable */ NULL, /* no invoker */ }, { NULL, } }; -/* invokes GetAll for the 'com.planetexpress.Pilot' interface */ -static int invoke_test_pilot_get_all(struct sbus_request *dbus_req, void *function_ptr) -{ - DBusMessage *reply; - dbus_bool_t dbret; - DBusMessageIter iter; - DBusMessageIter iter_dict; - int ret; - struct sbus_interface *intf = dbus_req->intf; - const struct sbus_property_meta *property; - uint16_t *aq_prop_val; - int aq_prop_len; - uint16_t *aq_out_val; - void (*aq_handler)(struct sbus_request *, void *data, uint16_t * *, int *); - bool b_prop_val; - dbus_bool_t b_out_val; - void (*b_handler)(struct sbus_request *, void *data, bool *); - double d_prop_val; - double d_out_val; - void (*d_handler)(struct sbus_request *, void *data, double *); - const char * *ao_prop_val; - int ao_prop_len; - const char * *ao_out_val; - void (*ao_handler)(struct sbus_request *, void *data, const char * * *, int *); - int32_t i_prop_val; - int32_t i_out_val; - void (*i_handler)(struct sbus_request *, void *data, int32_t *); - const char * *as_prop_val; - int as_prop_len; - const char * *as_out_val; - void (*as_handler)(struct sbus_request *, void *data, const char * * *, int *); - const char * o_prop_val; - const char * o_out_val; - void (*o_handler)(struct sbus_request *, void *data, const char * *); - int16_t n_prop_val; - int16_t n_out_val; - void (*n_handler)(struct sbus_request *, void *data, int16_t *); - uint16_t q_prop_val; - uint16_t q_out_val; - void (*q_handler)(struct sbus_request *, void *data, uint16_t *); - uint8_t *ay_prop_val; - int ay_prop_len; - uint8_t *ay_out_val; - void (*ay_handler)(struct sbus_request *, void *data, uint8_t * *, int *); - const char * s_prop_val; - const char * s_out_val; - void (*s_handler)(struct sbus_request *, void *data, const char * *); - uint32_t u_prop_val; - uint32_t u_out_val; - void (*u_handler)(struct sbus_request *, void *data, uint32_t *); - uint64_t t_prop_val; - uint64_t t_out_val; - void (*t_handler)(struct sbus_request *, void *data, uint64_t *); - int64_t *ax_prop_val; - int ax_prop_len; - int64_t *ax_out_val; - void (*ax_handler)(struct sbus_request *, void *data, int64_t * *, int *); - uint8_t y_prop_val; - uint8_t y_out_val; - void (*y_handler)(struct sbus_request *, void *data, uint8_t *); - int64_t x_prop_val; - int64_t x_out_val; - void (*x_handler)(struct sbus_request *, void *data, int64_t *); - uint32_t *au_prop_val; - int au_prop_len; - uint32_t *au_out_val; - void (*au_handler)(struct sbus_request *, void *data, uint32_t * *, int *); - int16_t *an_prop_val; - int an_prop_len; - int16_t *an_out_val; - void (*an_handler)(struct sbus_request *, void *data, int16_t * *, int *); - double *ad_prop_val; - int ad_prop_len; - double *ad_out_val; - void (*ad_handler)(struct sbus_request *, void *data, double * *, int *); - int32_t *ai_prop_val; - int ai_prop_len; - int32_t *ai_out_val; - void (*ai_handler)(struct sbus_request *, void *data, int32_t * *, int *); - uint64_t *at_prop_val; - int at_prop_len; - uint64_t *at_out_val; - void (*at_handler)(struct sbus_request *, void *data, uint64_t * *, int *); - - reply = dbus_message_new_method_return(dbus_req->message); - if (!reply) return ENOMEM; - dbus_message_iter_init_append(reply, &iter); - dbret = dbus_message_iter_open_container( - &iter, DBUS_TYPE_ARRAY, - DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING - DBUS_TYPE_STRING_AS_STRING - DBUS_TYPE_VARIANT_AS_STRING - DBUS_DICT_ENTRY_END_CHAR_AS_STRING, - &iter_dict); - if (!dbret) return ENOMEM; - - property = sbus_meta_find_property(intf->vtable->meta, "FullName"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "FullName", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "byte"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - y_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (y_handler) { - (y_handler)(dbus_req, dbus_req->intf->handler_data, &y_prop_val); - y_out_val = y_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "byte", DBUS_TYPE_BYTE, &y_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "boolean"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - b_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (b_handler) { - (b_handler)(dbus_req, dbus_req->intf->handler_data, &b_prop_val); - b_out_val = b_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "boolean", DBUS_TYPE_BOOLEAN, &b_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "int16"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - n_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (n_handler) { - (n_handler)(dbus_req, dbus_req->intf->handler_data, &n_prop_val); - n_out_val = n_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "int16", DBUS_TYPE_INT16, &n_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "uint16"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - q_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (q_handler) { - (q_handler)(dbus_req, dbus_req->intf->handler_data, &q_prop_val); - q_out_val = q_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "uint16", DBUS_TYPE_UINT16, &q_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "int32"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - i_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (i_handler) { - (i_handler)(dbus_req, dbus_req->intf->handler_data, &i_prop_val); - i_out_val = i_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "int32", DBUS_TYPE_INT32, &i_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "uint32"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - u_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (u_handler) { - (u_handler)(dbus_req, dbus_req->intf->handler_data, &u_prop_val); - u_out_val = u_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "uint32", DBUS_TYPE_UINT32, &u_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "int64"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - x_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (x_handler) { - (x_handler)(dbus_req, dbus_req->intf->handler_data, &x_prop_val); - x_out_val = x_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "int64", DBUS_TYPE_INT64, &x_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "uint64"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - t_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (t_handler) { - (t_handler)(dbus_req, dbus_req->intf->handler_data, &t_prop_val); - t_out_val = t_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "uint64", DBUS_TYPE_UINT64, &t_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "double"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - d_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (d_handler) { - (d_handler)(dbus_req, dbus_req->intf->handler_data, &d_prop_val); - d_out_val = d_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "double", DBUS_TYPE_DOUBLE, &d_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "string"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "string", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "object_path"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - o_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (o_handler) { - (o_handler)(dbus_req, dbus_req->intf->handler_data, &o_prop_val); - o_out_val = o_prop_val == NULL ? "/" : o_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "object_path", DBUS_TYPE_OBJECT_PATH, &o_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "null_string"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - s_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (s_handler) { - (s_handler)(dbus_req, dbus_req->intf->handler_data, &s_prop_val); - s_out_val = s_prop_val == NULL ? "" : s_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "null_string", DBUS_TYPE_STRING, &s_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "null_path"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - o_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (o_handler) { - (o_handler)(dbus_req, dbus_req->intf->handler_data, &o_prop_val); - o_out_val = o_prop_val == NULL ? "/" : o_prop_val; - ret = sbus_add_variant_to_dict(&iter_dict, "null_path", DBUS_TYPE_OBJECT_PATH, &o_out_val); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "byte_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - ay_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (ay_handler) { - (ay_handler)(dbus_req, dbus_req->intf->handler_data, &ay_prop_val, &ay_prop_len); - ay_out_val = ay_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "byte_array", DBUS_TYPE_BYTE, (uint8_t*)ay_out_val, ay_prop_len, sizeof(uint8_t)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "int16_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - an_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (an_handler) { - (an_handler)(dbus_req, dbus_req->intf->handler_data, &an_prop_val, &an_prop_len); - an_out_val = an_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "int16_array", DBUS_TYPE_INT16, (uint8_t*)an_out_val, an_prop_len, sizeof(int16_t)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "uint16_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - aq_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (aq_handler) { - (aq_handler)(dbus_req, dbus_req->intf->handler_data, &aq_prop_val, &aq_prop_len); - aq_out_val = aq_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "uint16_array", DBUS_TYPE_UINT16, (uint8_t*)aq_out_val, aq_prop_len, sizeof(uint16_t)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "int32_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - ai_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (ai_handler) { - (ai_handler)(dbus_req, dbus_req->intf->handler_data, &ai_prop_val, &ai_prop_len); - ai_out_val = ai_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "int32_array", DBUS_TYPE_INT32, (uint8_t*)ai_out_val, ai_prop_len, sizeof(int32_t)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "uint32_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - au_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (au_handler) { - (au_handler)(dbus_req, dbus_req->intf->handler_data, &au_prop_val, &au_prop_len); - au_out_val = au_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "uint32_array", DBUS_TYPE_UINT32, (uint8_t*)au_out_val, au_prop_len, sizeof(uint32_t)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "int64_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - ax_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (ax_handler) { - (ax_handler)(dbus_req, dbus_req->intf->handler_data, &ax_prop_val, &ax_prop_len); - ax_out_val = ax_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "int64_array", DBUS_TYPE_INT64, (uint8_t*)ax_out_val, ax_prop_len, sizeof(int64_t)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "uint64_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - at_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (at_handler) { - (at_handler)(dbus_req, dbus_req->intf->handler_data, &at_prop_val, &at_prop_len); - at_out_val = at_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "uint64_array", DBUS_TYPE_UINT64, (uint8_t*)at_out_val, at_prop_len, sizeof(uint64_t)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "double_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - ad_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (ad_handler) { - (ad_handler)(dbus_req, dbus_req->intf->handler_data, &ad_prop_val, &ad_prop_len); - ad_out_val = ad_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "double_array", DBUS_TYPE_DOUBLE, (uint8_t*)ad_out_val, ad_prop_len, sizeof(double)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "string_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - as_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (as_handler) { - (as_handler)(dbus_req, dbus_req->intf->handler_data, &as_prop_val, &as_prop_len); - as_out_val = as_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "string_array", DBUS_TYPE_STRING, (uint8_t*)as_out_val, as_prop_len, sizeof(const char *)); - if (ret != EOK) return ret; - } - } - - property = sbus_meta_find_property(intf->vtable->meta, "object_path_array"); - if (property != NULL && property->flags & SBUS_PROPERTY_READABLE) { - ao_handler = VTABLE_FUNC(intf->vtable, property->vtable_offset_get); - if (ao_handler) { - (ao_handler)(dbus_req, dbus_req->intf->handler_data, &ao_prop_val, &ao_prop_len); - ao_out_val = ao_prop_val; - ret = sbus_add_array_as_variant_to_dict(&iter_dict, "object_path_array", DBUS_TYPE_OBJECT_PATH, (uint8_t*)ao_out_val, ao_prop_len, sizeof(const char *)); - if (ret != EOK) return ret; - } - } - - dbret = dbus_message_iter_close_container(&iter, &iter_dict); - if (!dbret) return ENOMEM; - - return sbus_request_finish(dbus_req, reply); -} - /* interface info for com.planetexpress.Pilot */ const struct sbus_interface_meta test_pilot_meta = { "com.planetexpress.Pilot", /* name */ test_pilot__methods, NULL, /* no signals */ test_pilot__properties, - invoke_test_pilot_get_all, /* GetAll invoker */ + sbus_invoke_get_all, /* GetAll invoker */ }; /* invokes a handler with a 'bu' DBus signature */ @@ -1038,307 +609,3 @@ static int invoke_ybnqiuxtdsoayanaqaiauaxatadasao_method(struct sbus_request *db arg_20, len_20); } - -/* invokes a getter with an array of 'uint16_t' DBus type */ -static int invoke_get_aq(struct sbus_request *dbus_req, void *function_ptr) -{ - uint16_t *prop_val; - int prop_len; - uint16_t *out_val; - - void (*handler)(struct sbus_request *, void *data, uint16_t * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_UINT16, (uint8_t*)out_val, prop_len, sizeof(uint16_t)); -} - -/* invokes a getter with a 'dbus_bool_t' DBus type */ -static int invoke_get_b(struct sbus_request *dbus_req, void *function_ptr) -{ - bool prop_val; - dbus_bool_t out_val; - - void (*handler)(struct sbus_request *, void *data, bool *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_BOOLEAN, &out_val); -} - -/* invokes a getter with a 'double' DBus type */ -static int invoke_get_d(struct sbus_request *dbus_req, void *function_ptr) -{ - double prop_val; - double out_val; - - void (*handler)(struct sbus_request *, void *data, double *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_DOUBLE, &out_val); -} - -/* invokes a getter with an array of 'const char *' DBus type */ -static int invoke_get_ao(struct sbus_request *dbus_req, void *function_ptr) -{ - const char * *prop_val; - int prop_len; - const char * *out_val; - - void (*handler)(struct sbus_request *, void *data, const char * * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_OBJECT_PATH, (uint8_t*)out_val, prop_len, sizeof(const char *)); -} - -/* invokes a getter with a 'int32_t' DBus type */ -static int invoke_get_i(struct sbus_request *dbus_req, void *function_ptr) -{ - int32_t prop_val; - int32_t out_val; - - void (*handler)(struct sbus_request *, void *data, int32_t *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_INT32, &out_val); -} - -/* invokes a getter with an array of 'const char *' DBus type */ -static int invoke_get_as(struct sbus_request *dbus_req, void *function_ptr) -{ - const char * *prop_val; - int prop_len; - const char * *out_val; - - void (*handler)(struct sbus_request *, void *data, const char * * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_STRING, (uint8_t*)out_val, prop_len, sizeof(const char *)); -} - -/* invokes a getter with a 'const char *' DBus type */ -static int invoke_get_o(struct sbus_request *dbus_req, void *function_ptr) -{ - const char * prop_val; - const char * out_val; - - void (*handler)(struct sbus_request *, void *data, const char * *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val == NULL ? "/" : prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_OBJECT_PATH, &out_val); -} - -/* invokes a getter with a 'int16_t' DBus type */ -static int invoke_get_n(struct sbus_request *dbus_req, void *function_ptr) -{ - int16_t prop_val; - int16_t out_val; - - void (*handler)(struct sbus_request *, void *data, int16_t *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_INT16, &out_val); -} - -/* invokes a getter with a 'uint16_t' DBus type */ -static int invoke_get_q(struct sbus_request *dbus_req, void *function_ptr) -{ - uint16_t prop_val; - uint16_t out_val; - - void (*handler)(struct sbus_request *, void *data, uint16_t *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_UINT16, &out_val); -} - -/* invokes a getter with an array of 'uint8_t' DBus type */ -static int invoke_get_ay(struct sbus_request *dbus_req, void *function_ptr) -{ - uint8_t *prop_val; - int prop_len; - uint8_t *out_val; - - void (*handler)(struct sbus_request *, void *data, uint8_t * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_BYTE, (uint8_t*)out_val, prop_len, sizeof(uint8_t)); -} - -/* invokes a getter with a 'const char *' DBus type */ -static int invoke_get_s(struct sbus_request *dbus_req, void *function_ptr) -{ - const char * prop_val; - const char * out_val; - - void (*handler)(struct sbus_request *, void *data, const char * *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val == NULL ? "" : prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_STRING, &out_val); -} - -/* invokes a getter with a 'uint32_t' DBus type */ -static int invoke_get_u(struct sbus_request *dbus_req, void *function_ptr) -{ - uint32_t prop_val; - uint32_t out_val; - - void (*handler)(struct sbus_request *, void *data, uint32_t *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_UINT32, &out_val); -} - -/* invokes a getter with a 'uint64_t' DBus type */ -static int invoke_get_t(struct sbus_request *dbus_req, void *function_ptr) -{ - uint64_t prop_val; - uint64_t out_val; - - void (*handler)(struct sbus_request *, void *data, uint64_t *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_UINT64, &out_val); -} - -/* invokes a getter with an array of 'int64_t' DBus type */ -static int invoke_get_ax(struct sbus_request *dbus_req, void *function_ptr) -{ - int64_t *prop_val; - int prop_len; - int64_t *out_val; - - void (*handler)(struct sbus_request *, void *data, int64_t * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_INT64, (uint8_t*)out_val, prop_len, sizeof(int64_t)); -} - -/* invokes a getter with a 'uint8_t' DBus type */ -static int invoke_get_y(struct sbus_request *dbus_req, void *function_ptr) -{ - uint8_t prop_val; - uint8_t out_val; - - void (*handler)(struct sbus_request *, void *data, uint8_t *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_BYTE, &out_val); -} - -/* invokes a getter with a 'int64_t' DBus type */ -static int invoke_get_x(struct sbus_request *dbus_req, void *function_ptr) -{ - int64_t prop_val; - int64_t out_val; - - void (*handler)(struct sbus_request *, void *data, int64_t *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val); - - out_val = prop_val; - return sbus_request_return_as_variant(dbus_req, DBUS_TYPE_INT64, &out_val); -} - -/* invokes a getter with an array of 'uint32_t' DBus type */ -static int invoke_get_au(struct sbus_request *dbus_req, void *function_ptr) -{ - uint32_t *prop_val; - int prop_len; - uint32_t *out_val; - - void (*handler)(struct sbus_request *, void *data, uint32_t * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_UINT32, (uint8_t*)out_val, prop_len, sizeof(uint32_t)); -} - -/* invokes a getter with an array of 'int16_t' DBus type */ -static int invoke_get_an(struct sbus_request *dbus_req, void *function_ptr) -{ - int16_t *prop_val; - int prop_len; - int16_t *out_val; - - void (*handler)(struct sbus_request *, void *data, int16_t * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_INT16, (uint8_t*)out_val, prop_len, sizeof(int16_t)); -} - -/* invokes a getter with an array of 'double' DBus type */ -static int invoke_get_ad(struct sbus_request *dbus_req, void *function_ptr) -{ - double *prop_val; - int prop_len; - double *out_val; - - void (*handler)(struct sbus_request *, void *data, double * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_DOUBLE, (uint8_t*)out_val, prop_len, sizeof(double)); -} - -/* invokes a getter with an array of 'int32_t' DBus type */ -static int invoke_get_ai(struct sbus_request *dbus_req, void *function_ptr) -{ - int32_t *prop_val; - int prop_len; - int32_t *out_val; - - void (*handler)(struct sbus_request *, void *data, int32_t * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_INT32, (uint8_t*)out_val, prop_len, sizeof(int32_t)); -} - -/* invokes a getter with an array of 'uint64_t' DBus type */ -static int invoke_get_at(struct sbus_request *dbus_req, void *function_ptr) -{ - uint64_t *prop_val; - int prop_len; - uint64_t *out_val; - - void (*handler)(struct sbus_request *, void *data, uint64_t * *, int *) = function_ptr; - - (handler)(dbus_req, dbus_req->intf->handler_data, &prop_val, &prop_len); - - out_val = prop_val; - return sbus_request_return_array_as_variant(dbus_req, DBUS_TYPE_UINT64, (uint8_t*)out_val, prop_len, sizeof(uint64_t)); -} |