1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
DBusHandlerResult
my_com_netsplit_Nih_Test_Signal_signal (DBusConnection * connection,
DBusMessage * signal,
NihDBusProxySignal *proxied)
{
DBusMessageIter iter;
NihDBusMessage *message;
nih_assert (connection != NULL);
nih_assert (signal != NULL);
nih_assert (proxied != NULL);
nih_assert (connection == proxied->proxy->connection);
if (! dbus_message_is_signal (signal, proxied->interface->name, proxied->signal->name))
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
if (! dbus_message_has_path (signal, proxied->proxy->path))
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
if (proxied->proxy->name)
if (! dbus_message_has_sender (signal, proxied->proxy->owner))
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
message = nih_dbus_message_new (NULL, connection, signal);
if (! message)
return DBUS_HANDLER_RESULT_NEED_MEMORY;
/* Iterate the arguments to the signal and demarshal into arguments
* for our own function call.
*/
dbus_message_iter_init (message->message, &iter);
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID) {
nih_free (message);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
/* Call the handler function */
nih_error_push_context ();
((MySignalHandler)proxied->handler) (proxied->data, message);
nih_error_pop_context ();
nih_free (message);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
|