Hi Lennart, Do you have any suggestions on where to look to see a good example
of how to have a process emit a signal to a different DBus listening process
using sd-bus? If matching against ":1.x" is not advised I am assuming I should
request a name? My initial attempt is:
/* Sender */
r = sd_bus_add_match(
bus,
slot,
"type='signal',"
"sender=Test.Blaster,"
"interface='Japan.Reset',"
"member='Test',"
"path='/Japan'",
my_signal_callback,
my_user_data);
fd = sd_bus_get_fd(bus);
if (fd < 0)
assert(0);
FD_ZERO(&rd_fdset);
FD_SET(fd, &rd_fdset);
for (;;) {
printf("enter select\n");
select(fd +1, &rd_fdset, NULL, NULL,NULL);
/* End sender excerpt */
/* Transmitter code: */
r = sd_bus_open_system(&bus);
if (r < 0) {
fprintf(stderr, "Failed to connect to bus: %s\n", strerror(-r));
goto finish;
}
r = sd_bus_request_name(bus, "Test.Blaster", 0);
if (r < 0) {
fprintf(stderr, "Failed to get service name\n");
goto finish;
}
sd_bus_emit_signal(bus,
"/Japan",
"/Japan.Reset.Test",
"Testing",
"Testing2");
/* End Transmitter excerpt */
It seems like the main problem here from looking at busctl is that no signal is
getting emitted towards "Japan". Perhaps this is a problem with my
/etc/dbus-1/system.d/*.conf file for my sender program?
Thanks and regards,
Brian
-----Original Message-----
From: Lennart Poettering [mailto:[email protected]]
Sent: Tuesday, January 12, 2016 12:17 PM
To: Gorman, Brian (Vancouver)
Cc: Mantas Mikulėnas; [email protected]
Subject: Re: [systemd-devel] Multicast signaling with sd-bus questions
On Tue, 12.01.16 20:13, Gorman, Brian (Vancouver) ([email protected]) wrote:
> Hi Mantas
>
> >>You really seem to be intent on using select() rather than an existing
> >>event loop or, at least, standard poll(); curious why.
>
> There is existing code blocking on select, so it seems like the easiest way
> to crowbar DBus into my code.
>
> >>Also, the 'sender' field is always a bus name (not sure but I think it's
> >>always the unique ":1.x" name), so "sender='testsignal'," would never match
> >>dbus-send (or anything at all).
>
> Is there a way to “match” against “:1.x” with sd-bus i.e. instead of
> “testsignal”? Is it advised to match against this, or should I have
> the emitting program request a name?
Hmm? ":1.x" are so called "unique names, they are assigned automatically, and
each peer on the bus has exactly one of these.
Since they are assigned automatically and effectively non-predictable it only
makes to match against them if the peer in question first contacted you to let
you know the unique name it has.
Lennart
--
Lennart Poettering, Red Hat
_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel