/ldbus

Lua Bindings to dbus.

Primary LanguageCMIT LicenseMIT

DBus for Lua.

ldbus is a C binding to dbus for Lua.

Compatible with Lua 5.1, 5.2, 5.3 and 5.4 (thanks compat-5.3).

Status

Installation

ldbus is on luarocks: https://luarocks.org/modules/daurnimator/ldbus

Install via luarocks, you will need to provide paths to dbus/dbus.h and dbus/dbus-arch-deps.h

luarocks install --server=http://luarocks.org/manifests/daurnimator ldbus DBUS_INCDIR=/usr/include/dbus-1.0/ DBUS_ARCH_INCDIR=/usr/lib/dbus-1.0/include

Usage

example.lua is a lua version of Matthew Johnson's example

Bound from C

  • Functions that normally take a DBusError return nil, "error_message" on failure.
  • Errors will be thrown on out of memory
C Lua Comments
dbus_bus_get() ldbus.bus.get() Takes type as one of "session", "system" or "starter". The connection will not have exit_on_disconnect set.
dbus_bus_get_private() ldbus.bus.get_private() Takes type as one of "session", "system" or "starter". The connection will not have exit_on_disconnect set.
dbus_bus_register() ldbus.bus.register()
dbus_bus_set_unique_name() ldbus.bus.set_unique_name()
dbus_bus_get_unique_name() ldbus.bus.get_unique_name()
dbus_bus_request_name() ldbus.bus.request_name() Takes flags as a table contain keys "allow_replacement", "do_not_queue" and "replace_existing"; On success returns one of "primary_owner", "in_queue", "exists" or "already_owner"
dbus_bus_release_name() ldbus.bus.release_name() On success, returns one of "released", "non_existant" or "not_owner"
dbus_bus_name_has_owner() ldbus.bus.name_has_owner()
dbus_bus_start_service_by_name() ldbus.bus.start_service_by_name()
dbus_bus_add_match() ldbus.bus.add_match() On success, returns one of "success" or "already_running"
dbus_bus_remove_match() ldbus.bus.remove_match()
dbus_connection_open() ldbus.connection.open()
dbus_connection_get_is_connected() my_conn:get_is_connected()
dbus_connection_get_is_authenticated() my_conn:get_is_authenticated()
dbus_connection_get_is_anonymous() my_conn:get_is_anonymous()
dbus_connection_get_server_id() my_conn:get_server_id()
dbus_connection_send() my_conn:send()
dbus_connection_send_with_reply() pending_call = my_conn:send_with_reply(msg [, timeout]) Timeout is in seconds, when not provided there will be no timeout.
dbus_connection_send_with_reply_and_block() response_msg = my_conn:send_with_reply_and_block(msg [, timeout]) Timeout is in seconds, when not provided there will be no timeout.
dbus_connection_flush() my_conn:flush()
dbus_connection_read_write_dispatch() my_conn:read_write_dispatch()
dbus_connection_read_write() my_conn:read_write()
dbus_connection_pop_message() my_conn:pop_message()
dbus_connection_get_dispatch_status() my_conn:get_dispatch_status()
dbus_connection_dispatch() my_conn:dispatch()
dbus_connection_set_watch_functions() my_conn:set_watch_functions()
dbus_connection_set_timeout_functions() my_conn:set_timeout_functions()
dbus_connection_set_dispatch_status_function() my_conn:set_dispatch_status_function()
dbus_connection_set_wakeup_main_function() my_conn:set_wakeup_main_function(callback)
dbus_connection_register_object_path() my_conn:register_object_path()
dbus_connection_register_fallback() my_conn:register_fallback()
dbus_connection_unregister_object_path() my_conn:unregister_object_path()
dbus_connection_set_max_message_size() my_conn:set_max_message_size()
dbus_connection_get_max_message_size() my_conn:get_max_message_size()
dbus_connection_set_max_received_size() my_conn:set_max_received_size()
dbus_connection_get_max_received_size() my_conn:get_max_received_size()
dbus_connection_get_outgoing_size() my_conn:get_outgoing_size()
dbus_connection_has_messages_to_send() my_conn:has_messages_to_send()
dbus_message_new() ldbus.message.new(type_str) The type is taken as a string (uses dbus_message_type_from_string())
dbus_message_new_method_call() ldbus.message.new_method_call()
dbus_message_new_signal() ldbus.message.new_signal()
dbus_message_get_serial() my_message:get_serial()
dbus_message_set_reply_serial() my_message:set_reply_serial()
dbus_message_get_reply_serial() my_message:get_reply_serial()
dbus_message_new_method_return() my_message:new_method_return()
dbus_message_new_error() my_message:new_error()
dbus_message_copy() my_message:copy()
dbus_message_get_type() my_message:get_type()
dbus_message_iter_init() my_iter = my_message:iter_init([my_iter]) Returns nil if message has no arguments
dbus_message_iter_init_append() my_iter = my_message:iter_init_append([my_iter])
dbus_message_set_no_reply() my_message:set_no_reply()
dbus_message_get_no_reply() my_message:get_no_reply()
dbus_message_set_auto_start() my_message:set_auto_start()
dbus_message_get_auto_start() my_message:get_auto_start()
dbus_message_set_path() my_message:set_path()
dbus_message_get_path() my_message:get_path()
dbus_message_get_path_decomposed() my_message:get_path_decomposed()
dbus_message_set_interface() my_message:set_interface()
dbus_message_get_interface() my_message:get_interface()
dbus_message_set_member() my_message:set_member()
dbus_message_get_member() my_message:get_member()
dbus_message_set_error_name() my_message:set_error_name()
dbus_message_get_error_name() my_message:get_error_name()
dbus_message_set_destination() my_message:set_destination()
dbus_message_get_destination() my_message:get_destination()
dbus_message_set_sender() my_message:set_sender()
dbus_message_get_sender() my_message:get_sender()
dbus_message_get_signature() my_message:get_signature()
dbus_message_iter_has_next() bool = my_message_iter:has_next()
dbus_message_iter_next() bool = my_message_iter:next()
dbus_message_iter_get_element_type() type = my_message_iter:get_element_type() DBUS_TYPE_INVALID is returned as nil
dbus_message_iter_recurse() sub_iter = my_message_iter:recurse([sub_iter]) Creates a new DBusMessageIter if one is not passed
dbus_message_iter_get_signature() sig = my_message_iter:get_signature()
dbus_message_iter_get_basic() object = my_message_iter:get_basic() number types are all returned as lua numbers (even 64bit integers at the moment; so watch out); strings, object paths and signatures will be returned as strings
dbus_message_iter_append_basic() my_message_iter:append_basic(object [, type])
dbus_message_iter_open_container() sub_iter = my_message_iter:open_container(type [, sign [, sub_iter]]) Creates sub_iter if not passed. Returns the sub_iter or nil on failure
dbus_message_iter_close_container() ok = my_message_iter:close_container(sub_iter)
dbus_pending_call_set_notify() my_pending_call:set_notify(callback) Callback gets no arguments
dbus_pending_call_cancel() my_pending_call:cancel()
dbus_pending_call_get_completed() completed = my_pending_call:get_completed()
dbus_pending_call_steal_reply() message = my_pending_call:steal_reply()
dbus_pending_call_block() my_pending_call:block()
dbus_timeout_get_interval() secs = my_timeout:get_interval() Returned number is in seconds (rather than milliseconds)
dbus_timeout_handle() ok = my_timeout:handle()
dbus_timeout_get_enabled() enabled = my_timeout:get_enabled()
DBUS_WATCH_READABLE ldbus.watch.READABLE
DBUS_WATCH_WRITABLE ldbus.watch.WRITABLE
DBUS_WATCH_HANGUP ldbus.watch.HANGUP
DBUS_WATCH_ERROR ldbus.watch.ERROR
dbus_watch_get_unix_fd() fd = my_watch:get_unix_fd() Returns nil when no fd is available
dbus_watch_get_socket() fd = my_watch:get_socket() Returns nil when no fd is available
dbus_watch_get_flags() flags = my_watch:get_flags() flags will be the a number
dbus_watch_handle() ok = my_watch:handle(flags)
dbus_watch_get_enabled() enabled = my_watch:get_enabled()

Other

ldbus.types

A table of the dbus types from name to type (as a character)

key value
"boolean" "b"
"byte" "y"
"double" "d"
"int16" "n"
"int32" "i"
"int64" "x"
"uint16" "q"
"uint32" "u"
"uint64" "t"
"string" "s"
"signature" "g"
"object_path" "o"
"array" "a"
"dict_entry" "e"
"variant" "v"
"struct" "r"

ldbus.basic_types

A table of the dbus basic types from name to type (as a character)

key value
"boolean" "b"
"byte" "y"
"double" "d"
"int16" "n"
"int32" "i"
"int64" "x"
"uint16" "q"
"uint32" "u"
"uint64" "t"
"string" "s"
"signature" "g"
"object_path" "o"

my_iter = ldbus.message.iter.new()

Creates a new DBusMessageIter object

new_iter = my_iter:clone()

Creates a copy of the given DBusMessageIter