6
#define NOTIFY_FILTER "type='method_call',interface='org.freedesktop.Notifications',member='Notify'"
8
#define MESSAGE_APPNAME 0
9
#define MESSAGE_SUMMARY 3
10
#define MESSAGE_BODY 4
12
static DBusHandlerResult
13
monitor_filter_func(DBusConnection *connection, DBusMessage *message, void *user_data)
21
printf("message received\n");
23
message_type = dbus_message_get_type(message);
24
if(message_type == DBUS_MESSAGE_TYPE_METHOD_CALL) {
25
printf("received method_call\n");
27
dbus_message_iter_init(message, &iter);
29
arg_type = dbus_message_iter_get_arg_type(&iter);
32
case DBUS_TYPE_STRING:
34
dbus_message_iter_get_basic(&iter, &value);
38
printf("appname: %s\n", value);
41
printf("summary: %s\n", value);
44
printf("body: %s\n", value);
52
} while(dbus_message_iter_next(&iter));
55
printf("received invalid message type: %d\n", message_type);
58
if(dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected"))
61
return DBUS_HANDLER_RESULT_HANDLED;
65
main(int argc, char* argv[])
67
DBusConnection *connection;
69
DBusBusType type = DBUS_BUS_SESSION;
70
DBusHandleMessageFunction filter_func = monitor_filter_func;
72
dbus_error_init(&error);
74
connection = dbus_bus_get(type, &error);
75
if(connection == NULL) {
76
fprintf(stderr, "Failed to open connection to session bus: %s\n", error.message);
77
dbus_error_free(&error);
81
dbus_bus_add_match(connection, NOTIFY_FILTER, &error);
82
if(dbus_error_is_set(&error)) {
83
fprintf(stderr, "Failed to add match: %s\n", error.message);
84
dbus_error_free(&error);
88
if(!dbus_connection_add_filter(connection, filter_func, NULL, NULL)) {
89
fprintf(stderr, "Failed to add filter.\n");
93
while(dbus_connection_read_write_dispatch(connection, -1));