-
Notifications
You must be signed in to change notification settings - Fork 3
Fork of Pengutronix JSON-DBUS-Bridge
License
elrafoon/json-dbus-bridge
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
json-dbus-bridge
================
json-dbus-bridge is a fast-cgi application that provides access to D-Bus.
It accepts JSON-RPC[1] calls as used by qooxdoo[2] and translates these
into D-Bus calls. Any response is converted back to JSON and sent to the
client.
The bridge is completely generic. New D-Bus services can be added without
modifications to the bridge.
Syntax
------
A D-Bus method is identified by
- bus name
- object path
- interface
- method
The JSON-RPC used by qooxdoo only knows
- service
- method
This is handled by using "<bus name>|<object path>" as service and
"<interface>.<method>" as method.
To make a successful D-Bus call, all parameters must be encoded with the
correct type. Unfortunately not all D-Bus types can be uniquely mapped to
a JSON type. E.g. int32, uint32, int16, ... are all mapped to a JSON
number. To generate the correct D-Bus message, the JSON-RPC call must
contain an extra first parameter with the D-Bus signature of the parameters
as defined by the D-Bus Specification[3]. For the result the signature is
skipped.
A simple JSON-RPC call could look like this:
request = {
"id": 1,
"service":"org.examle|/",
"method":"org.Example.Echo"
"params": [ "s", "Hello World!" ]
}
response = {
"id": 1,
"error": null,
"result": "Hello World!"
}
Variants are handled the same way. A variant value is an array with two
elements: The variant signature and the actual value. Note the variant can
only contain single complete types. For returned variants the signature is
skipped as well:
Calling a method with one variant as parameter and a variant as return
value, could look like this:
request = {
"id": 1,
"service":"org.examle|/",
"method":"org.Example.VariantEcho"
"params": [ "v", [ "s", "Hello World!" ] ]
}
response = {
"id": 1,
"error": null,
"result": "Hello World!"
}
Limitations
-----------
The bridge cannot handle all D-Bus features:
- D-Bus Dictionaries are translated into JSON objects. As a result only
dictionaries with string keys can be used.
- Translation of structs is not yet implemented.
- D-Bus signals are not yet supported.
[1] http://json-rpc.org
[2] http://qooxdoo.org
[3] http://dbus.freedesktop.org/doc/dbus-specification.html
About
Fork of Pengutronix JSON-DBUS-Bridge
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published