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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
DBusHandlerResult
my_com_netsplit_Nih_Test_Signal_signal (DBusConnection * connection,
DBusMessage * signal,
NihDBusProxySignal *proxied)
{
DBusMessageIter iter;
NihDBusMessage *message;
char * msg;
const char * msg_dbus;
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);
/* Demarshal a char * from the message */
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRING) {
nih_free (message);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
dbus_message_iter_get_basic (&iter, &msg_dbus);
msg = nih_strdup (message, msg_dbus);
if (! msg) {
nih_free (message);
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
dbus_message_iter_next (&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, msg);
nih_error_pop_context ();
nih_free (message);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
|