Search code examples
cdbus

Send a message using D-Bus


I want to send a message using D-Bus but I get an error:

process 30860: arguments to dbus_message_new_signal() were incorrect, assertion "_dbus_check_is_valid_path (path)" failed in file ../../../dbus/dbus-message.c line 1456.
This is normally a bug in some application using the D-Bus library.
Message is null!

My code:

#include <stdio.h>
#include <dbus/dbus.h>


int main(){
    DBusConnection *conn;
    DBusError err;
    dbus_error_init(&err);
    conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
    if(!conn){
        fprintf(stderr, "DBus error %s: %s\n", err.name, err.message);
        return(1);
    }
    dbus_bus_request_name(conn, "org.test", DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
    if(dbus_error_is_set(&err)){
        fprintf(stderr, "DBus error %s: %s\n", err.name, err.message);
        dbus_connection_close(conn);
        return(1);
    }
    DBusMessage *msg;
    msg = dbus_message_new_signal("org/test/mon/data", "org.test.mon.data", "Data");
    if(msg == NULL){
        fprintf(stderr, "Message is null!\n");
        return(1);
    }
    dbus_message_append_args(msg, DBUS_TYPE_STRING, "My message", DBUS_TYPE_INVALID);
    if(!dbus_connection_send(conn, msg, NULL)) fprintf(stderr, "Error sending message!\n");
    dbus_message_unref(msg);
    dbus_connection_flush(conn);
    dbus_connection_close(conn);
}

I tried to follow dozens of tutorials and examples but I think I missed something.

I just need to send a message with a text.


Solution

  • The first argument to dbus_message_new_signal() is a D-Bus path and the spec says this about paths:

    The path must begin with an ASCII '/' (integer 47) character