Discussion:
Sending complex structures over sd-bus
(too old to reply)
guhan balasubramanian
2018-10-25 10:06:32 UTC
Permalink
Hi,

I am trying to use the sd-bus to send structures that are a bit complex in
nature.

For example, consider the following:

struct complex_struct {
int some_integers[10];
char *str;
} cs;

cs property_to_send[10];

This d-bus property would be something like "a(ais)".

Assuming I want to send the above array, I am trying to right the
property's function handler in the sd_bus_server for the same.

I know the open and close container can be used for simple arrays. I am
finding it hard to make it work for the nested array case. Can some one
please help point me to any example or references for the same?

Thanks,
Guhan
Lennart Poettering
2018-10-25 12:14:06 UTC
Permalink
Post by guhan balasubramanian
Hi,
I am trying to use the sd-bus to send structures that are a bit complex in
nature.
struct complex_struct {
int some_integers[10];
char *str;
} cs;
cs property_to_send[10];
This d-bus property would be something like "a(ais)".
Assuming I want to send the above array, I am trying to right the
property's function handler in the sd_bus_server for the same.
I know the open and close container can be used for simple arrays. I am
finding it hard to make it work for the nested array case. Can some one
please help point me to any example or references for the same?
You open the outer container first, and then the inner one.

When creating the message:

sd_bus_message_open_container(m, 'a', "(ais)"); /* open outer array */
for (i = 0; i < 10; i++) {
sd_bus_message_open_container(m, 'r', "ais"); /* open array item structure */
sd_bus_message_open_container(m, 'a', "i"); /* open inner array */
for (j = 0; j < 10; j++)
sd_bus_message_append(m, "i", 4711);
sd_bus_message_close_container(m); /* close inner array */
sd_bus_message_append(m, "s", "test string");
sd_bus_message_close_container(m); /* close array item structre */
}
sd_bus_message_close_container(m); /* close outer array */

And when processing a message it's kinda the same, you just use
enter/exit rather than open/close for the containers...

Lennart
--
Lennart Poettering, Red Hat
Continue reading on narkive:
Loading...