diff options
author | Stef Walter <stefw@redhat.com> | 2014-01-10 08:54:41 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-02-24 11:14:49 +0100 |
commit | fcd8093c58638dc7c4f9cddfc97f273b94ce2ead (patch) | |
tree | 9f8374be57b0a48f19cd861ae4d38f666ae7af5e /src/tests/sbus_codegen_tests_generated.c | |
parent | b699c4d7f85a5404be1d1ee9450331aea869b886 (diff) | |
download | sssd-fcd8093c58638dc7c4f9cddfc97f273b94ce2ead.tar.gz sssd-fcd8093c58638dc7c4f9cddfc97f273b94ce2ead.tar.xz sssd-fcd8093c58638dc7c4f9cddfc97f273b94ce2ead.zip |
sbus: Add sbus_vtable and update codegen to support it
Each interface is a vtable structure derived from
sbus_vtable, in the sense that it has an sbus_vtable
struct as its first argument. This lets us upcast the
interface vtable structure to an sbus_vtable and dispatch
to it dynamically and cleanly.
The interface metadata contains information about which
vtable offset in the interface metadata should be dispatched
to for a given function. This is a common scheme, not only
among dbus implementations, but also compiled languages.
Currently all the vtable functions are of type
sbus_msg_handler_fn. These are the handlers we are familiar
with and perform raw processing of the message. Later commits
will introduce type safe handlers that levelage compile checking
and automatic argument packing/unpacking.
Although this may seem contrived now, the remainder of the
dbus infrastructure work will build on this, including
ofd.Properties, ofd.ObjectManager, ofd.Introspect, compiler
checked type safe unpacking/packing, etc.
The codegen now generates vtable structures for each interface
along-side the metadata, and fills in vtable offsets
appropriately.
It is obviously still possible to hand-craft such vtables and
metadata if needed for a special case.
Once again examples output can be found at:
src/tests/sbus_codegen_tests_generated.h
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Reviewed-by: Sumit Bose <sbose@redhat.com>
Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
Reviewed-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'src/tests/sbus_codegen_tests_generated.c')
-rw-r--r-- | src/tests/sbus_codegen_tests_generated.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/tests/sbus_codegen_tests_generated.c b/src/tests/sbus_codegen_tests_generated.c index 556eea12c..ccf612996 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_codegen_tests_generated.h" /* arguments for com.planetexpress.Ship.MoveUniverse */ const struct sbus_arg_meta com_planetexpress_Ship_MoveUniverse__in[] = { @@ -23,6 +24,13 @@ const struct sbus_method_meta com_planetexpress_Ship__methods[] = { "MoveUniverse", /* name */ com_planetexpress_Ship_MoveUniverse__in, com_planetexpress_Ship_MoveUniverse__out, + offsetof(struct com_planetexpress_Ship, MoveUniverse), + }, + { + "Crash", /* name */ + NULL, /* no in_args */ + NULL, /* no out_args */ + offsetof(struct com_planetexpress_Ship, crash_now), }, { NULL, } }; |