Receiving dbus signals using low-level C API

Krishna R sith.list at gmail.com
Wed Jan 24 13:12:46 PST 2007


Hi,

I have a basic question about sending and receiving signals. Most of what i
have learnt till now is based on the dbus low level API tutorial.

I am using dbus 1.0.2 and a session bus.

Sending signal:
I send a signal as told in the tutorial, i use dbus_message_append_args() to
send some arguments with the message.

Rcving signal: (this is where i have some questions)

1. I set a filter function and read the arguements of the message in the
filter function.
2. I add a match rule  to recv the signal like this
dbus_bus_add_match(conn, "type='signal',interface='test.signal.Type'",
&dbusError);

3. And instead of dbus_connection_pop_message as used in the tutorial, do
this...
while (dbus_connection_read_write_dispatch (conn, -1) ) ;

4. In my filter function, i read the message using dbus_message_get_args()
and return DBUS_HANDLER_RESULT_HANDLED.

Questions:

1. Is this a correct way to recv signals? Do i have to do
dbus_message_unref(message) in the filter function after handling it before
i return?

2. I also see that as soon as i call the match rule api, the filter function
gets called. I further found that the message has a argument which a string,
which is 2. Is this expected? I had assumed that the filter function will
only be called when i send a signal and not before that. Why is this?

Seperate point: Also in the tutorial the send signal function closes the
dbus connection and the dbus version 1.0.2 complains about this. Can someone
pls fix the tutorial for this. I assume from the error message we dont close
the connection anymore?

Thanks for any help or insights!
-Krish
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freedesktop.org/archives/dbus/attachments/20070124/cc8318f4/attachment.html


More information about the dbus mailing list