Changeset 47dbbb940a7211caebac367f2a0fc05c278f6f8b
- Timestamp:
- 03/07/10 13:42:44 (5 months ago)
- Author:
- Nedko Arnaudov <nedko@…>
- Children:
- e154c89ce313738b3356c116c83148b5b3044ce2
- Parents:
- c2f277228ed93d3377c520fa75ba53e51c484254
- git-committer:
- Nedko Arnaudov <nedko@arnaudov.name> / 2010-03-07T13:42:44Z+0200
- Message:
-
sane helper for sending signals with complex parameters
- expose dbus_signal_send()
- dbus_signal_emit() is lame for complex parameters because path, interface and name function parameters are unused
- Location:
- dbus
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r5f832c86
|
r47dbbb9
|
|
| 3 | 3 | * LADI Session Handler (ladish) |
| 4 | 4 | * |
| 5 | | * Copyright (C) 2009 Nedko Arnaudov <nedko@arnaudov.name> |
| | 5 | * Copyright (C) 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name> |
| 6 | 6 | * Copyright (C) 2008 Juuso Alasuutari <juuso.alasuutari@gmail.com> |
| 7 | 7 | * |
| … |
… |
|
| 32 | 32 | #include "helpers.h" |
| 33 | 33 | |
| 34 | | static void dbus_signal_send(DBusConnection * connection_ptr, DBusMessage * message_ptr) |
| | 34 | void dbus_signal_send(DBusConnection * connection_ptr, DBusMessage * message_ptr) |
| 35 | 35 | { |
| 36 | 36 | if (!dbus_connection_send(connection_ptr, message_ptr, NULL)) |
| … |
… |
|
| 62 | 62 | va_start(ap, signature); |
| 63 | 63 | |
| 64 | | if (signature != NULL) |
| | 64 | ASSERT(signature != NULL); |
| | 65 | |
| | 66 | if (!dbus_signature_validate(signature, NULL)) |
| 65 | 67 | { |
| 66 | | if (!dbus_signature_validate(signature, NULL)) |
| | 68 | log_error("signature '%s' is invalid", signature); |
| | 69 | goto exit; |
| | 70 | } |
| | 71 | |
| | 72 | dbus_signature_iter_init(&sig_iter, signature); |
| | 73 | |
| | 74 | message_ptr = dbus_message_new_signal(path, interface, name); |
| | 75 | if (message_ptr == NULL) |
| | 76 | { |
| | 77 | log_error("dbus_message_new_signal() failed."); |
| | 78 | goto exit; |
| | 79 | } |
| | 80 | |
| | 81 | dbus_message_iter_init_append(message_ptr, &iter); |
| | 82 | |
| | 83 | while (*signature != '\0') |
| | 84 | { |
| | 85 | type = dbus_signature_iter_get_current_type(&sig_iter); |
| | 86 | if (!dbus_type_is_basic(type)) |
| 67 | 87 | { |
| 68 | | log_error("signature '%s' is invalid", signature); |
| 69 | | goto exit; |
| | 88 | log_error("non-basic input parameter '%c' (%d)", *signature, type); |
| | 89 | goto unref; |
| 70 | 90 | } |
| 71 | 91 | |
| 72 | | dbus_signature_iter_init(&sig_iter, signature); |
| | 92 | parameter_ptr = va_arg(ap, void *); |
| 73 | 93 | |
| 74 | | message_ptr = dbus_message_new_signal(path, interface, name); |
| 75 | | if (message_ptr == NULL) |
| | 94 | if (!dbus_message_iter_append_basic(&iter, type, parameter_ptr)) |
| 76 | 95 | { |
| 77 | | log_error("dbus_message_new_signal() failed."); |
| 78 | | goto exit; |
| | 96 | log_error("dbus_message_iter_append_basic() failed."); |
| | 97 | goto unref; |
| 79 | 98 | } |
| 80 | 99 | |
| 81 | | dbus_message_iter_init_append(message_ptr, &iter); |
| | 100 | dbus_signature_iter_next(&sig_iter); |
| | 101 | signature++; |
| | 102 | } |
| 82 | 103 | |
| 83 | | while (*signature != '\0') |
| 84 | | { |
| 85 | | type = dbus_signature_iter_get_current_type(&sig_iter); |
| 86 | | if (!dbus_type_is_basic(type)) |
| 87 | | { |
| 88 | | log_error("non-basic input parameter '%c' (%d)", *signature, type); |
| 89 | | goto unref; |
| 90 | | } |
| | 104 | dbus_signal_send(connection_ptr, message_ptr); |
| 91 | 105 | |
| 92 | | parameter_ptr = va_arg(ap, void *); |
| 93 | | |
| 94 | | if (!dbus_message_iter_append_basic(&iter, type, parameter_ptr)) |
| 95 | | { |
| 96 | | log_error("dbus_message_iter_append_basic() failed."); |
| 97 | | goto unref; |
| 98 | | } |
| 99 | | |
| 100 | | dbus_signature_iter_next(&sig_iter); |
| 101 | | signature++; |
| 102 | | } |
| 103 | | |
| 104 | | dbus_signal_send(connection_ptr, message_ptr); |
| 105 | | |
| 106 | | unref: |
| 107 | | dbus_message_unref(message_ptr); |
| 108 | | } |
| 109 | | else |
| 110 | | { |
| 111 | | message_ptr = va_arg(ap, DBusMessage *); |
| 112 | | dbus_signal_send(connection_ptr, message_ptr); |
| 113 | | } |
| | 106 | unref: |
| | 107 | dbus_message_unref(message_ptr); |
| 114 | 108 | |
| 115 | 109 | exit: |
-
|
r9290a15
|
r47dbbb9
|
|
| 3 | 3 | * LADI Session Handler (ladish) |
| 4 | 4 | * |
| 5 | | * Copyright (C) 2008, 2009 Nedko Arnaudov <nedko@arnaudov.name> |
| | 5 | * Copyright (C) 2008, 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name> |
| 6 | 6 | * Copyright (C) 2008 Juuso Alasuutari <juuso.alasuutari@gmail.com> |
| 7 | 7 | * |
| … |
… |
|
| 42 | 42 | const struct dbus_signal_arg_descriptor * args; |
| 43 | 43 | }; |
| | 44 | |
| | 45 | void dbus_signal_send(DBusConnection * connection_ptr, DBusMessage * message_ptr); |
| 44 | 46 | |
| 45 | 47 | void |