1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-16 00:00:07 +01:00
libwebsockets/minimal-examples/dbus-server/minimal-dbus-server/README.md
Andy Green 31dfc4aa12 role: dbus
This adds support for the integrating libdbus into the lws event loop.

Unlike the other roles, lws doesn't completely adopt the fd and libdbus insists
to retain control over the fd lifecycle.  However libdbus provides apis for
foreign code (lws) to provide event loop services to libdbus for the fd.

Accordingly, unlike the other roles rx and writeable are not subsumed into
lws callback messages and the events remain the property of libdbus.

A context struct wrapper is provided that is available in the libdbus
callbacks to bridge between the lws and dbus worlds, along with
a minimal example dbus client and server.
2018-10-13 08:16:27 +08:00

2.6 KiB

lws minimal dbus server

build

Using libdbus requires additional non-default include paths setting, same as is necessary for lws build described in ./lib/roles/dbus/README.md

CMake can guess one path and the library name usually, see the README above for details of how to override for custom libdbus and cross build.

Fedora example:

$ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include"
$ make

Ubuntu example:

$ cmake .. -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include"
$ make

usage

Commandline option Meaning
-d Debug verbosity in decimal, eg, -d15
--session Bind to session bus instead of creating private abstract unix socket

By default the minimal server listens using its own abstract unix socket at unix:abstract=org.libwebsockets.test.

You can also run it instead as a participant on the session bus, without its own unix socket, by giving --session.

Examples using the default private abstract unix socket

 $ ./lws-minimal-dbus-server
[2018/10/03 07:08:02:6448] USER: LWS minimal dbus server
[2018/10/03 07:08:02:6693] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off
...

You can communicate with the dbus server over its private abstract socket using, eg

$ gdbus introspect --address unix:abstract=org.libwebsockets.test --dest org.libwebsockets.test --object-path /org/libwebsockets/test
node /org/example/TestObject {
  interface org.freedesktop.DBus.Introspectable {
    methods:
      Introspect(out s data);
    signals:
    properties:
  };
  interface org.freedesktop.DBus.Properties {
    methods:
      Get(in  s interface,
...
$ gdbus call --address unix:abstract=org.libwebsockets.test --dest org.libwebsockets.test --object-path /org/libwebsockets/test --method org.libwebsockets.test.Echo HELLO
('HELLO',)

Examples using the DBUS session bus

 $ ./lws-minimal-dbus-server --session
[2018/10/03 07:08:02:6448] USER: LWS minimal dbus server
[2018/10/03 07:08:02:6693] NOTICE: Creating Vhost 'default' port 0, 1 protocols, IPv6 off
...

You can communicate with the dbus server over the session bus using, eg

$ gdbus introspect --session --dest org.libwebsockets.test --object-path /org/libwebsockets/test
node /org/example/TestObject {
  interface org.freedesktop.DBus.Introspectable {
    methods:
      Introspect(out s data);
    signals:
    properties:
  };
  interface org.freedesktop.DBus.Properties {
    methods:
      Get(in  s interface,
...
$ gdbus call --session --dest org.libwebsockets.test --object-path /org/libwebsockets/test --method org.libwebsockets.test.Echo HELLO
('HELLO',)