summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rw-r--r--src/monitor/monitor_iface_generated.c57
-rw-r--r--src/providers/data_provider_iface_generated.c57
-rw-r--r--src/responder/ifp/ifp_iface_generated.c443
-rwxr-xr-xsrc/sbus/sbus_codegen133
-rw-r--r--src/sbus/sssd_dbus_invokers.c465
-rw-r--r--src/sbus/sssd_dbus_invokers.h120
-rw-r--r--src/sbus/sssd_dbus_meta.h15
-rw-r--r--src/sbus/sssd_dbus_properties.c51
-rw-r--r--src/tests/sbus_codegen_tests_generated.c789
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));
-}