1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-23 21:35:11 +03:00

bus: internalize a lot of protocol definitions

We shouldn export what isn't necessary or useful to clients, so let's
add the protocol definitions we only need internally into a private
header.
This commit is contained in:
Lennart Poettering 2013-12-03 18:13:48 +01:00
parent 6c045c0b4c
commit 0461f8cdc1
12 changed files with 208 additions and 179 deletions

View File

@ -2004,7 +2004,8 @@ libsystemd_bus_la_SOURCES = \
src/libsystemd-bus/bus-util.h \ src/libsystemd-bus/bus-util.h \
src/libsystemd-bus/sd-utf8.c \ src/libsystemd-bus/sd-utf8.c \
src/libsystemd-bus/sd-event.c \ src/libsystemd-bus/sd-event.c \
src/libsystemd-bus/event-util.h src/libsystemd-bus/event-util.h \
src/libsystemd-bus/bus-protocol.h
libsystemd_bus_la_LIBADD = \ libsystemd_bus_la_LIBADD = \
libsystemd-id128-internal.la \ libsystemd-id128-internal.la \

View File

@ -104,11 +104,11 @@ static int bus_request_name_dbus1(sd_bus *bus, const char *name, unsigned flags)
if (r < 0) if (r < 0)
return r; return r;
if (ret == SD_BUS_NAME_ALREADY_OWNER) if (ret == BUS_NAME_ALREADY_OWNER)
return -EALREADY; return -EALREADY;
else if (ret == SD_BUS_NAME_EXISTS) else if (ret == BUS_NAME_EXISTS)
return -EEXIST; return -EEXIST;
else if (ret == SD_BUS_NAME_IN_QUEUE) else if (ret == BUS_NAME_IN_QUEUE)
return 0; return 0;
else else
return -EIO; return -EIO;
@ -177,11 +177,11 @@ static int bus_release_name_dbus1(sd_bus *bus, const char *name) {
r = sd_bus_message_read(reply, "u", &ret); r = sd_bus_message_read(reply, "u", &ret);
if (r < 0) if (r < 0)
return r; return r;
if (ret == SD_BUS_NAME_NON_EXISTENT) if (ret == BUS_NAME_NON_EXISTENT)
return -ENOENT; return -ENOENT;
if (ret == SD_BUS_NAME_NOT_OWNER) if (ret == BUS_NAME_NOT_OWNER)
return -EADDRNOTAVAIL; return -EADDRNOTAVAIL;
if (ret == SD_BUS_NAME_RELEASED) if (ret == BUS_NAME_RELEASED)
return 0; return 0;
return -EINVAL; return -EINVAL;

View File

@ -103,7 +103,7 @@ _public_ int sd_bus_reply_method_return(
assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN); assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN);
assert_return(!bus_pid_changed(call->bus), -ECHILD); assert_return(!bus_pid_changed(call->bus), -ECHILD);
if (call->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED) if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0; return 0;
r = sd_bus_message_new_method_return(call, &m); r = sd_bus_message_new_method_return(call, &m);
@ -137,7 +137,7 @@ _public_ int sd_bus_reply_method_error(
assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN); assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN);
assert_return(!bus_pid_changed(call->bus), -ECHILD); assert_return(!bus_pid_changed(call->bus), -ECHILD);
if (call->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED) if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0; return 0;
r = sd_bus_message_new_method_error(call, e, &m); r = sd_bus_message_new_method_error(call, e, &m);
@ -162,7 +162,7 @@ _public_ int sd_bus_reply_method_errorf(
assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN); assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN);
assert_return(!bus_pid_changed(call->bus), -ECHILD); assert_return(!bus_pid_changed(call->bus), -ECHILD);
if (call->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED) if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0; return 0;
va_start(ap, format); va_start(ap, format);
@ -185,7 +185,7 @@ _public_ int sd_bus_reply_method_errno(
assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN); assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN);
assert_return(!bus_pid_changed(call->bus), -ECHILD); assert_return(!bus_pid_changed(call->bus), -ECHILD);
if (call->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED) if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0; return 0;
if (sd_bus_error_is_set(p)) if (sd_bus_error_is_set(p))
@ -211,7 +211,7 @@ _public_ int sd_bus_reply_method_errnof(
assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN); assert_return(call->bus && BUS_IS_OPEN(call->bus->state), -ENOTCONN);
assert_return(!bus_pid_changed(call->bus), -ECHILD); assert_return(!bus_pid_changed(call->bus), -ECHILD);
if (call->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED) if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0; return 0;
va_start(ap, format); va_start(ap, format);

View File

@ -24,6 +24,7 @@
#include "bus-introspect.h" #include "bus-introspect.h"
#include "bus-signature.h" #include "bus-signature.h"
#include "bus-internal.h" #include "bus-internal.h"
#include "bus-protocol.h"
int introspect_begin(struct introspect *i) { int introspect_begin(struct introspect *i) {
assert(i); assert(i);
@ -34,7 +35,7 @@ int introspect_begin(struct introspect *i) {
if (!i->f) if (!i->f)
return -ENOMEM; return -ENOMEM;
fputs(SD_BUS_INTROSPECT_DOCTYPE fputs(BUS_INTROSPECT_DOCTYPE
"<node>\n", i->f); "<node>\n", i->f);
return 0; return 0;
@ -43,12 +44,12 @@ int introspect_begin(struct introspect *i) {
int introspect_write_default_interfaces(struct introspect *i, bool object_manager) { int introspect_write_default_interfaces(struct introspect *i, bool object_manager) {
assert(i); assert(i);
fputs(SD_BUS_INTROSPECT_INTERFACE_PEER fputs(BUS_INTROSPECT_INTERFACE_PEER
SD_BUS_INTROSPECT_INTERFACE_INTROSPECTABLE BUS_INTROSPECT_INTERFACE_INTROSPECTABLE
SD_BUS_INTROSPECT_INTERFACE_PROPERTIES, i->f); BUS_INTROSPECT_INTERFACE_PROPERTIES, i->f);
if (object_manager) if (object_manager)
fputs(SD_BUS_INTROSPECT_INTERFACE_OBJECT_MANAGER, i->f); fputs(BUS_INTROSPECT_INTERFACE_OBJECT_MANAGER, i->f);
return 0; return 0;
} }

View File

@ -248,8 +248,8 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
memset(m->kdbus, 0, sz); memset(m->kdbus, 0, sz);
m->kdbus->flags = m->kdbus->flags =
((m->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED) ? 0 : KDBUS_MSG_FLAGS_EXPECT_REPLY) | ((m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED) ? 0 : KDBUS_MSG_FLAGS_EXPECT_REPLY) |
((m->header->flags & SD_BUS_MESSAGE_NO_AUTO_START) ? KDBUS_MSG_FLAGS_NO_AUTO_START : 0); ((m->header->flags & BUS_MESSAGE_NO_AUTO_START) ? KDBUS_MSG_FLAGS_NO_AUTO_START : 0);
m->kdbus->dst_id = m->kdbus->dst_id =
well_known ? 0 : well_known ? 0 :
m->destination ? unique : KDBUS_DST_ID_BROADCAST; m->destination ? unique : KDBUS_DST_ID_BROADCAST;

View File

@ -332,8 +332,8 @@ int bus_message_from_header(
if (h->type == _SD_BUS_MESSAGE_TYPE_INVALID) if (h->type == _SD_BUS_MESSAGE_TYPE_INVALID)
return -EBADMSG; return -EBADMSG;
if (h->endian != SD_BUS_LITTLE_ENDIAN && if (h->endian != BUS_LITTLE_ENDIAN &&
h->endian != SD_BUS_BIG_ENDIAN) h->endian != BUS_BIG_ENDIAN)
return -EBADMSG; return -EBADMSG;
a = ALIGN(sizeof(sd_bus_message)) + ALIGN(extra); a = ALIGN(sizeof(sd_bus_message)) + ALIGN(extra);
@ -436,7 +436,7 @@ static sd_bus_message *message_new(sd_bus *bus, uint8_t type) {
m->n_ref = 1; m->n_ref = 1;
m->header = (struct bus_header*) ((uint8_t*) m + ALIGN(sizeof(struct sd_bus_message))); m->header = (struct bus_header*) ((uint8_t*) m + ALIGN(sizeof(struct sd_bus_message)));
m->header->endian = SD_BUS_NATIVE_ENDIAN; m->header->endian = BUS_NATIVE_ENDIAN;
m->header->type = type; m->header->type = type;
m->header->version = bus ? bus->message_version : 1; m->header->version = bus ? bus->message_version : 1;
m->allow_fds = !bus || bus->can_fds || (bus->state != BUS_HELLO && bus->state != BUS_RUNNING); m->allow_fds = !bus || bus->can_fds || (bus->state != BUS_HELLO && bus->state != BUS_RUNNING);
@ -467,15 +467,15 @@ _public_ int sd_bus_message_new_signal(
if (!t) if (!t)
return -ENOMEM; return -ENOMEM;
t->header->flags |= SD_BUS_MESSAGE_NO_REPLY_EXPECTED; t->header->flags |= BUS_MESSAGE_NO_REPLY_EXPECTED;
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_PATH, SD_BUS_TYPE_OBJECT_PATH, path, &t->path); r = message_append_field_string(t, BUS_MESSAGE_HEADER_PATH, SD_BUS_TYPE_OBJECT_PATH, path, &t->path);
if (r < 0) if (r < 0)
goto fail; goto fail;
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_INTERFACE, SD_BUS_TYPE_STRING, interface, &t->interface); r = message_append_field_string(t, BUS_MESSAGE_HEADER_INTERFACE, SD_BUS_TYPE_STRING, interface, &t->interface);
if (r < 0) if (r < 0)
goto fail; goto fail;
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_MEMBER, SD_BUS_TYPE_STRING, member, &t->member); r = message_append_field_string(t, BUS_MESSAGE_HEADER_MEMBER, SD_BUS_TYPE_STRING, member, &t->member);
if (r < 0) if (r < 0)
goto fail; goto fail;
@ -509,21 +509,21 @@ _public_ int sd_bus_message_new_method_call(
if (!t) if (!t)
return -ENOMEM; return -ENOMEM;
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_PATH, SD_BUS_TYPE_OBJECT_PATH, path, &t->path); r = message_append_field_string(t, BUS_MESSAGE_HEADER_PATH, SD_BUS_TYPE_OBJECT_PATH, path, &t->path);
if (r < 0) if (r < 0)
goto fail; goto fail;
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_MEMBER, SD_BUS_TYPE_STRING, member, &t->member); r = message_append_field_string(t, BUS_MESSAGE_HEADER_MEMBER, SD_BUS_TYPE_STRING, member, &t->member);
if (r < 0) if (r < 0)
goto fail; goto fail;
if (interface) { if (interface) {
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_INTERFACE, SD_BUS_TYPE_STRING, interface, &t->interface); r = message_append_field_string(t, BUS_MESSAGE_HEADER_INTERFACE, SD_BUS_TYPE_STRING, interface, &t->interface);
if (r < 0) if (r < 0)
goto fail; goto fail;
} }
if (destination) { if (destination) {
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, destination, &t->destination); r = message_append_field_string(t, BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, destination, &t->destination);
if (r < 0) if (r < 0)
goto fail; goto fail;
} }
@ -554,20 +554,20 @@ static int message_new_reply(
if (!t) if (!t)
return -ENOMEM; return -ENOMEM;
t->header->flags |= SD_BUS_MESSAGE_NO_REPLY_EXPECTED; t->header->flags |= BUS_MESSAGE_NO_REPLY_EXPECTED;
t->reply_serial = BUS_MESSAGE_SERIAL(call); t->reply_serial = BUS_MESSAGE_SERIAL(call);
r = message_append_field_uint32(t, SD_BUS_MESSAGE_HEADER_REPLY_SERIAL, t->reply_serial); r = message_append_field_uint32(t, BUS_MESSAGE_HEADER_REPLY_SERIAL, t->reply_serial);
if (r < 0) if (r < 0)
goto fail; goto fail;
if (call->sender) { if (call->sender) {
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, call->sender, &t->destination); r = message_append_field_string(t, BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, call->sender, &t->destination);
if (r < 0) if (r < 0)
goto fail; goto fail;
} }
t->dont_send = !!(call->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED); t->dont_send = !!(call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED);
t->enforced_reply_signature = call->enforced_reply_signature; t->enforced_reply_signature = call->enforced_reply_signature;
*m = t; *m = t;
@ -600,7 +600,7 @@ _public_ int sd_bus_message_new_method_error(
if (r < 0) if (r < 0)
return r; return r;
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_ERROR_NAME, SD_BUS_TYPE_STRING, e->name, &t->error.name); r = message_append_field_string(t, BUS_MESSAGE_HEADER_ERROR_NAME, SD_BUS_TYPE_STRING, e->name, &t->error.name);
if (r < 0) if (r < 0)
goto fail; goto fail;
@ -689,20 +689,20 @@ int bus_message_new_synthetic_error(
if (!t) if (!t)
return -ENOMEM; return -ENOMEM;
t->header->flags |= SD_BUS_MESSAGE_NO_REPLY_EXPECTED; t->header->flags |= BUS_MESSAGE_NO_REPLY_EXPECTED;
t->reply_serial = serial; t->reply_serial = serial;
r = message_append_field_uint32(t, SD_BUS_MESSAGE_HEADER_REPLY_SERIAL, t->reply_serial); r = message_append_field_uint32(t, BUS_MESSAGE_HEADER_REPLY_SERIAL, t->reply_serial);
if (r < 0) if (r < 0)
goto fail; goto fail;
if (bus && bus->unique_name) { if (bus && bus->unique_name) {
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, bus->unique_name, &t->destination); r = message_append_field_string(t, BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, bus->unique_name, &t->destination);
if (r < 0) if (r < 0)
goto fail; goto fail;
} }
r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_ERROR_NAME, SD_BUS_TYPE_STRING, e->name, &t->error.name); r = message_append_field_string(t, BUS_MESSAGE_HEADER_ERROR_NAME, SD_BUS_TYPE_STRING, e->name, &t->error.name);
if (r < 0) if (r < 0)
goto fail; goto fail;
@ -772,13 +772,13 @@ _public_ int sd_bus_message_get_reply_serial(sd_bus_message *m, uint64_t *serial
_public_ int sd_bus_message_get_no_reply(sd_bus_message *m) { _public_ int sd_bus_message_get_no_reply(sd_bus_message *m) {
assert_return(m, -EINVAL); assert_return(m, -EINVAL);
return m->header->type == SD_BUS_MESSAGE_METHOD_CALL ? !!(m->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED) : 0; return m->header->type == SD_BUS_MESSAGE_METHOD_CALL ? !!(m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED) : 0;
} }
_public_ int sd_bus_message_get_no_auto_start(sd_bus_message *m) { _public_ int sd_bus_message_get_no_auto_start(sd_bus_message *m) {
assert_return(m, -EINVAL); assert_return(m, -EINVAL);
return !!(m->header->flags & SD_BUS_MESSAGE_NO_AUTO_START); return !!(m->header->flags & BUS_MESSAGE_NO_AUTO_START);
} }
_public_ const char *sd_bus_message_get_path(sd_bus_message *m) { _public_ const char *sd_bus_message_get_path(sd_bus_message *m) {
@ -897,9 +897,9 @@ _public_ int sd_bus_message_set_no_reply(sd_bus_message *m, int b) {
assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EPERM); assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EPERM);
if (b) if (b)
m->header->flags |= SD_BUS_MESSAGE_NO_REPLY_EXPECTED; m->header->flags |= BUS_MESSAGE_NO_REPLY_EXPECTED;
else else
m->header->flags &= ~SD_BUS_MESSAGE_NO_REPLY_EXPECTED; m->header->flags &= ~BUS_MESSAGE_NO_REPLY_EXPECTED;
return 0; return 0;
} }
@ -909,9 +909,9 @@ _public_ int sd_bus_message_set_no_auto_start(sd_bus_message *m, int b) {
assert_return(!m->sealed, -EPERM); assert_return(!m->sealed, -EPERM);
if (b) if (b)
m->header->flags |= SD_BUS_MESSAGE_NO_AUTO_START; m->header->flags |= BUS_MESSAGE_NO_AUTO_START;
else else
m->header->flags &= ~SD_BUS_MESSAGE_NO_AUTO_START; m->header->flags &= ~BUS_MESSAGE_NO_AUTO_START;
return 0; return 0;
} }
@ -3764,10 +3764,10 @@ int bus_message_parse_fields(sd_bus_message *m) {
return r; return r;
switch (*header) { switch (*header) {
case _SD_BUS_MESSAGE_HEADER_INVALID: case _BUS_MESSAGE_HEADER_INVALID:
return -EBADMSG; return -EBADMSG;
case SD_BUS_MESSAGE_HEADER_PATH: case BUS_MESSAGE_HEADER_PATH:
if (m->path) if (m->path)
return -EBADMSG; return -EBADMSG;
@ -3778,7 +3778,7 @@ int bus_message_parse_fields(sd_bus_message *m) {
r = message_peek_field_string(m, object_path_is_valid, &ri, &m->path); r = message_peek_field_string(m, object_path_is_valid, &ri, &m->path);
break; break;
case SD_BUS_MESSAGE_HEADER_INTERFACE: case BUS_MESSAGE_HEADER_INTERFACE:
if (m->interface) if (m->interface)
return -EBADMSG; return -EBADMSG;
@ -3789,7 +3789,7 @@ int bus_message_parse_fields(sd_bus_message *m) {
r = message_peek_field_string(m, interface_name_is_valid, &ri, &m->interface); r = message_peek_field_string(m, interface_name_is_valid, &ri, &m->interface);
break; break;
case SD_BUS_MESSAGE_HEADER_MEMBER: case BUS_MESSAGE_HEADER_MEMBER:
if (m->member) if (m->member)
return -EBADMSG; return -EBADMSG;
@ -3800,7 +3800,7 @@ int bus_message_parse_fields(sd_bus_message *m) {
r = message_peek_field_string(m, member_name_is_valid, &ri, &m->member); r = message_peek_field_string(m, member_name_is_valid, &ri, &m->member);
break; break;
case SD_BUS_MESSAGE_HEADER_ERROR_NAME: case BUS_MESSAGE_HEADER_ERROR_NAME:
if (m->error.name) if (m->error.name)
return -EBADMSG; return -EBADMSG;
@ -3814,7 +3814,7 @@ int bus_message_parse_fields(sd_bus_message *m) {
break; break;
case SD_BUS_MESSAGE_HEADER_DESTINATION: case BUS_MESSAGE_HEADER_DESTINATION:
if (m->destination) if (m->destination)
return -EBADMSG; return -EBADMSG;
@ -3825,7 +3825,7 @@ int bus_message_parse_fields(sd_bus_message *m) {
r = message_peek_field_string(m, service_name_is_valid, &ri, &m->destination); r = message_peek_field_string(m, service_name_is_valid, &ri, &m->destination);
break; break;
case SD_BUS_MESSAGE_HEADER_SENDER: case BUS_MESSAGE_HEADER_SENDER:
if (m->sender) if (m->sender)
return -EBADMSG; return -EBADMSG;
@ -3843,7 +3843,7 @@ int bus_message_parse_fields(sd_bus_message *m) {
break; break;
case SD_BUS_MESSAGE_HEADER_SIGNATURE: { case BUS_MESSAGE_HEADER_SIGNATURE: {
const char *s; const char *s;
char *c; char *c;
@ -3866,7 +3866,7 @@ int bus_message_parse_fields(sd_bus_message *m) {
break; break;
} }
case SD_BUS_MESSAGE_HEADER_REPLY_SERIAL: case BUS_MESSAGE_HEADER_REPLY_SERIAL:
if (m->reply_serial != 0) if (m->reply_serial != 0)
return -EBADMSG; return -EBADMSG;
@ -3882,7 +3882,7 @@ int bus_message_parse_fields(sd_bus_message *m) {
break; break;
case SD_BUS_MESSAGE_HEADER_UNIX_FDS: case BUS_MESSAGE_HEADER_UNIX_FDS:
if (unix_fds != 0) if (unix_fds != 0)
return -EBADMSG; return -EBADMSG;
@ -3972,13 +3972,13 @@ int bus_message_seal(sd_bus_message *m, uint64_t serial) {
/* If there's a non-trivial signature set, then add it in here */ /* If there's a non-trivial signature set, then add it in here */
if (!isempty(m->root_container.signature)) { if (!isempty(m->root_container.signature)) {
r = message_append_field_signature(m, SD_BUS_MESSAGE_HEADER_SIGNATURE, m->root_container.signature, NULL); r = message_append_field_signature(m, BUS_MESSAGE_HEADER_SIGNATURE, m->root_container.signature, NULL);
if (r < 0) if (r < 0)
return r; return r;
} }
if (m->n_fds > 0) { if (m->n_fds > 0) {
r = message_append_field_uint32(m, SD_BUS_MESSAGE_HEADER_UNIX_FDS, m->n_fds); r = message_append_field_uint32(m, BUS_MESSAGE_HEADER_UNIX_FDS, m->n_fds);
if (r < 0) if (r < 0)
return r; return r;
} }
@ -4017,7 +4017,7 @@ _public_ int sd_bus_message_set_destination(sd_bus_message *m, const char *desti
assert_return(!m->sealed, -EPERM); assert_return(!m->sealed, -EPERM);
assert_return(!m->destination, -EEXIST); assert_return(!m->destination, -EEXIST);
return message_append_field_string(m, SD_BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, destination, &m->destination); return message_append_field_string(m, BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, destination, &m->destination);
} }
int bus_message_get_blob(sd_bus_message *m, void **buffer, size_t *sz) { int bus_message_get_blob(sd_bus_message *m, void **buffer, size_t *sz) {
@ -4138,7 +4138,7 @@ bool bus_header_is_complete(struct bus_header *h, size_t size) {
return false; return false;
full = sizeof(struct bus_header) + full = sizeof(struct bus_header) +
(h->endian == SD_BUS_NATIVE_ENDIAN ? h->fields_size : bswap_32(h->fields_size)); (h->endian == BUS_NATIVE_ENDIAN ? h->fields_size : bswap_32(h->fields_size));
return size >= full; return size >= full;
} }
@ -4149,10 +4149,10 @@ int bus_header_message_size(struct bus_header *h, size_t *sum) {
assert(h); assert(h);
assert(sum); assert(sum);
if (h->endian == SD_BUS_NATIVE_ENDIAN) { if (h->endian == BUS_NATIVE_ENDIAN) {
fs = h->fields_size; fs = h->fields_size;
bs = h->body_size; bs = h->body_size;
} else if (h->endian == SD_BUS_REVERSE_ENDIAN) { } else if (h->endian == BUS_REVERSE_ENDIAN) {
fs = bswap_32(h->fields_size); fs = bswap_32(h->fields_size);
bs = bswap_32(h->body_size); bs = bswap_32(h->body_size);
} else } else

View File

@ -30,6 +30,7 @@
#include "kdbus.h" #include "kdbus.h"
#include "time-util.h" #include "time-util.h"
#include "bus-creds.h" #include "bus-creds.h"
#include "bus-protocol.h"
struct bus_container { struct bus_container {
char enclosing; char enclosing;
@ -127,7 +128,7 @@ struct sd_bus_message {
char destination_buffer[3 + DECIMAL_STR_MAX(uint64_t) + 1]; char destination_buffer[3 + DECIMAL_STR_MAX(uint64_t) + 1];
}; };
#define BUS_MESSAGE_NEED_BSWAP(m) ((m)->header->endian != SD_BUS_NATIVE_ENDIAN) #define BUS_MESSAGE_NEED_BSWAP(m) ((m)->header->endian != BUS_NATIVE_ENDIAN)
static inline uint16_t BUS_MESSAGE_BSWAP16(sd_bus_message *m, uint16_t u) { static inline uint16_t BUS_MESSAGE_BSWAP16(sd_bus_message *m, uint16_t u) {
return BUS_MESSAGE_NEED_BSWAP(m) ? bswap_16(u) : u; return BUS_MESSAGE_NEED_BSWAP(m) ? bswap_16(u) : u;

View File

@ -0,0 +1,133 @@
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
#pragma once
/***
This file is part of systemd.
Copyright 2013 Lennart Poettering
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
systemd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
/* Endianness */
enum {
_BUS_INVALID_ENDIAN = 0,
BUS_LITTLE_ENDIAN = 'l',
BUS_BIG_ENDIAN = 'B',
#if __BYTE_ORDER == __BIG_ENDIAN
BUS_NATIVE_ENDIAN = BUS_BIG_ENDIAN,
BUS_REVERSE_ENDIAN = BUS_LITTLE_ENDIAN
#else
BUS_NATIVE_ENDIAN = BUS_LITTLE_ENDIAN,
BUS_REVERSE_ENDIAN = BUS_BIG_ENDIAN
#endif
};
/* Flags */
enum {
BUS_MESSAGE_NO_REPLY_EXPECTED = 1,
BUS_MESSAGE_NO_AUTO_START = 2
};
/* Header fields */
enum {
_BUS_MESSAGE_HEADER_INVALID = 0,
BUS_MESSAGE_HEADER_PATH,
BUS_MESSAGE_HEADER_INTERFACE,
BUS_MESSAGE_HEADER_MEMBER,
BUS_MESSAGE_HEADER_ERROR_NAME,
BUS_MESSAGE_HEADER_REPLY_SERIAL,
BUS_MESSAGE_HEADER_DESTINATION,
BUS_MESSAGE_HEADER_SENDER,
BUS_MESSAGE_HEADER_SIGNATURE,
BUS_MESSAGE_HEADER_UNIX_FDS,
_BUS_MESSAGE_HEADER_MAX
};
/* RequestName returns */
enum {
BUS_NAME_PRIMARY_OWNER = 1,
BUS_NAME_IN_QUEUE = 2,
BUS_NAME_EXISTS = 3,
BUS_NAME_ALREADY_OWNER = 4
};
/* ReleaseName returns */
enum {
BUS_NAME_RELEASED = 1,
BUS_NAME_NON_EXISTENT = 2,
BUS_NAME_NOT_OWNER = 3,
};
#define BUS_INTROSPECT_DOCTYPE \
"<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n" \
"\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
#define BUS_INTROSPECT_INTERFACE_PEER \
" <interface name=\"org.freedesktop.DBus.Peer\">\n" \
" <method name=\"Ping\"/>\n" \
" <method name=\"GetMachineId\">\n" \
" <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n" \
" </method>\n" \
" </interface>\n"
#define BUS_INTROSPECT_INTERFACE_INTROSPECTABLE \
" <interface name=\"org.freedesktop.DBus.Introspectable\">\n" \
" <method name=\"Introspect\">\n" \
" <arg name=\"data\" type=\"s\" direction=\"out\"/>\n" \
" </method>\n" \
" </interface>\n"
#define BUS_INTROSPECT_INTERFACE_PROPERTIES \
" <interface name=\"org.freedesktop.DBus.Properties\">\n" \
" <method name=\"Get\">\n" \
" <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"property\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"value\" direction=\"out\" type=\"v\"/>\n" \
" </method>\n" \
" <method name=\"GetAll\">\n" \
" <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n" \
" </method>\n" \
" <method name=\"Set\">\n" \
" <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"property\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"value\" direction=\"in\" type=\"v\"/>\n" \
" </method>\n" \
" <signal name=\"PropertiesChanged\">\n" \
" <arg type=\"s\" name=\"interface\"/>\n" \
" <arg type=\"a{sv}\" name=\"changed_properties\"/>\n" \
" <arg type=\"as\" name=\"invalidated_properties\"/>\n" \
" </signal>\n" \
" </interface>\n"
#define BUS_INTROSPECT_INTERFACE_OBJECT_MANAGER \
" <interface name=\"org.freedesktop.DBus.ObjectManager\">\n" \
" <method name=\"GetManagedObjects\">\n" \
" <arg type=\"a{oa{sa{sv}}}\" name=\"object_paths_interfaces_and_properties\" direction=\"out\"/>\n" \
" </method>\n" \
" <signal name=\"InterfacesAdded\">\n" \
" <arg type=\"o\" name=\"object_path\"/>\n" \
" <arg type=\"a{sa{sv}}\" name=\"interfaces_and_properties\"/>\n" \
" </signal>\n" \
" <signal name=\"InterfacesRemoved\">\n" \
" <arg type=\"o\" name=\"object_path\"/>\n" \
" <arg type=\"as\" name=\"interfaces\"/>\n" \
" </signal>\n" \
" </interface>\n"

View File

@ -874,10 +874,10 @@ static int bus_socket_read_message_need(sd_bus *bus, size_t *need) {
b = ((const uint32_t*) bus->rbuffer)[3]; b = ((const uint32_t*) bus->rbuffer)[3];
e = ((const uint8_t*) bus->rbuffer)[0]; e = ((const uint8_t*) bus->rbuffer)[0];
if (e == SD_BUS_LITTLE_ENDIAN) { if (e == BUS_LITTLE_ENDIAN) {
a = le32toh(a); a = le32toh(a);
b = le32toh(b); b = le32toh(b);
} else if (e == SD_BUS_BIG_ENDIAN) { } else if (e == BUS_BIG_ENDIAN) {
a = be32toh(a); a = be32toh(a);
b = be32toh(b); b = be32toh(b);
} else } else

View File

@ -66,7 +66,7 @@ int bus_async_unregister_and_quit(sd_event *e, sd_bus *bus, const char *name) {
if (r < 0) if (r < 0)
return r; return r;
if (r != SD_BUS_NAME_RELEASED) if (r != BUS_NAME_RELEASED)
return -EIO; return -EIO;
return 0; return 0;

View File

@ -47,6 +47,7 @@
#include "bus-objects.h" #include "bus-objects.h"
#include "bus-util.h" #include "bus-util.h"
#include "bus-container.h" #include "bus-container.h"
#include "bus-protocol.h"
static int bus_poll(sd_bus *bus, bool need_more, uint64_t timeout_usec); static int bus_poll(sd_bus *bus, bool need_more, uint64_t timeout_usec);
@ -1408,7 +1409,7 @@ _public_ int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *serial) {
/* If the serial number isn't kept, then we know that no reply /* If the serial number isn't kept, then we know that no reply
* is expected */ * is expected */
if (!serial && !m->sealed) if (!serial && !m->sealed)
m->header->flags |= SD_BUS_MESSAGE_NO_REPLY_EXPECTED; m->header->flags |= BUS_MESSAGE_NO_REPLY_EXPECTED;
r = bus_seal_message(bus, m); r = bus_seal_message(bus, m);
if (r < 0) if (r < 0)
@ -1524,7 +1525,7 @@ _public_ int sd_bus_call_async(
assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN); assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
assert_return(m, -EINVAL); assert_return(m, -EINVAL);
assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EINVAL); assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EINVAL);
assert_return(!(m->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED), -EINVAL); assert_return(!(m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED), -EINVAL);
assert_return(callback, -EINVAL); assert_return(callback, -EINVAL);
assert_return(!bus_pid_changed(bus), -ECHILD); assert_return(!bus_pid_changed(bus), -ECHILD);
@ -1634,7 +1635,7 @@ _public_ int sd_bus_call(
assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN); assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
assert_return(m, -EINVAL); assert_return(m, -EINVAL);
assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EINVAL); assert_return(m->header->type == SD_BUS_MESSAGE_METHOD_CALL, -EINVAL);
assert_return(!(m->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED), -EINVAL); assert_return(!(m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED), -EINVAL);
assert_return(!bus_error_is_dirty(error), -EINVAL); assert_return(!bus_error_is_dirty(error), -EINVAL);
assert_return(!bus_pid_changed(bus), -ECHILD); assert_return(!bus_pid_changed(bus), -ECHILD);
@ -1976,7 +1977,7 @@ static int process_builtin(sd_bus *bus, sd_bus_message *m) {
if (!streq_ptr(m->interface, "org.freedesktop.DBus.Peer")) if (!streq_ptr(m->interface, "org.freedesktop.DBus.Peer"))
return 0; return 0;
if (m->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED) if (m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
return 1; return 1;
if (streq_ptr(m->member, "Ping")) if (streq_ptr(m->member, "Ping"))

View File

@ -66,125 +66,17 @@ enum {
SD_BUS_TYPE_DICT_ENTRY_END = '}', SD_BUS_TYPE_DICT_ENTRY_END = '}',
}; };
/* Endianness */
enum {
_SD_BUS_INVALID_ENDIAN = 0,
SD_BUS_LITTLE_ENDIAN = 'l',
SD_BUS_BIG_ENDIAN = 'B',
#if __BYTE_ORDER == __BIG_ENDIAN
SD_BUS_NATIVE_ENDIAN = SD_BUS_BIG_ENDIAN,
SD_BUS_REVERSE_ENDIAN = SD_BUS_LITTLE_ENDIAN
#else
SD_BUS_NATIVE_ENDIAN = SD_BUS_LITTLE_ENDIAN,
SD_BUS_REVERSE_ENDIAN = SD_BUS_BIG_ENDIAN
#endif
};
/* Flags */
enum {
SD_BUS_MESSAGE_NO_REPLY_EXPECTED = 1,
SD_BUS_MESSAGE_NO_AUTO_START = 2
};
/* Header fields */
enum {
_SD_BUS_MESSAGE_HEADER_INVALID = 0,
SD_BUS_MESSAGE_HEADER_PATH,
SD_BUS_MESSAGE_HEADER_INTERFACE,
SD_BUS_MESSAGE_HEADER_MEMBER,
SD_BUS_MESSAGE_HEADER_ERROR_NAME,
SD_BUS_MESSAGE_HEADER_REPLY_SERIAL,
SD_BUS_MESSAGE_HEADER_DESTINATION,
SD_BUS_MESSAGE_HEADER_SENDER,
SD_BUS_MESSAGE_HEADER_SIGNATURE,
SD_BUS_MESSAGE_HEADER_UNIX_FDS,
_SD_BUS_MESSAGE_HEADER_MAX
};
/* RequestName parameters */ /* RequestName parameters */
enum { enum {
SD_BUS_NAME_ALLOW_REPLACEMENT = 1, SD_BUS_NAME_ALLOW_REPLACEMENT = 1,
SD_BUS_NAME_REPLACE_EXISTING = 2, SD_BUS_NAME_REPLACE_EXISTING = 2,
SD_BUS_NAME_DO_NOT_QUEUE = 4 SD_BUS_NAME_DO_NOT_QUEUE = 4
}; };
/* RequestName returns */
enum {
SD_BUS_NAME_PRIMARY_OWNER = 1,
SD_BUS_NAME_IN_QUEUE = 2,
SD_BUS_NAME_EXISTS = 3,
SD_BUS_NAME_ALREADY_OWNER = 4
};
/* ReleaseName returns */
enum {
SD_BUS_NAME_RELEASED = 1,
SD_BUS_NAME_NON_EXISTENT = 2,
SD_BUS_NAME_NOT_OWNER = 3,
};
#define SD_BUS_INTROSPECT_DOCTYPE \
"<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n" \
"\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
#define SD_BUS_INTROSPECT_INTERFACE_PEER \
" <interface name=\"org.freedesktop.DBus.Peer\">\n" \
" <method name=\"Ping\"/>\n" \
" <method name=\"GetMachineId\">\n" \
" <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n" \
" </method>\n" \
" </interface>\n"
#define SD_BUS_INTROSPECT_INTERFACE_INTROSPECTABLE \
" <interface name=\"org.freedesktop.DBus.Introspectable\">\n" \
" <method name=\"Introspect\">\n" \
" <arg name=\"data\" type=\"s\" direction=\"out\"/>\n" \
" </method>\n" \
" </interface>\n"
#define SD_BUS_INTROSPECT_INTERFACE_PROPERTIES \
" <interface name=\"org.freedesktop.DBus.Properties\">\n" \
" <method name=\"Get\">\n" \
" <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"property\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"value\" direction=\"out\" type=\"v\"/>\n" \
" </method>\n" \
" <method name=\"GetAll\">\n" \
" <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n" \
" </method>\n" \
" <method name=\"Set\">\n" \
" <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"property\" direction=\"in\" type=\"s\"/>\n" \
" <arg name=\"value\" direction=\"in\" type=\"v\"/>\n" \
" </method>\n" \
" <signal name=\"PropertiesChanged\">\n" \
" <arg type=\"s\" name=\"interface\"/>\n" \
" <arg type=\"a{sv}\" name=\"changed_properties\"/>\n" \
" <arg type=\"as\" name=\"invalidated_properties\"/>\n" \
" </signal>\n" \
" </interface>\n"
#define SD_BUS_INTROSPECT_INTERFACE_OBJECT_MANAGER \
" <interface name=\"org.freedesktop.DBus.ObjectManager\">\n" \
" <method name=\"GetManagedObjects\">\n" \
" <arg type=\"a{oa{sa{sv}}}\" name=\"object_paths_interfaces_and_properties\" direction=\"out\"/>\n" \
" </method>\n" \
" <signal name=\"InterfacesAdded\">\n" \
" <arg type=\"o\" name=\"object_path\"/>\n" \
" <arg type=\"a{sa{sv}}\" name=\"interfaces_and_properties\"/>\n" \
" </signal>\n" \
" <signal name=\"InterfacesRemoved\">\n" \
" <arg type=\"o\" name=\"object_path\"/>\n" \
" <arg type=\"as\" name=\"interfaces\"/>\n" \
" </signal>\n" \
" </interface>\n"
/* Well-known errors. Note that this is only a sanitized subset of the /* Well-known errors. Note that this is only a sanitized subset of the
* errors that the reference implementation generates. */ * errors that the reference implementation generates. */
#define SD_BUS_ERROR_FAILED "org.freedesktop.DBus.Error.Failed" #define SD_BUS_ERROR_FAILED "org.freedesktop.DBus.Error.Failed"
#define SD_BUS_ERROR_NO_MEMORY "org.freedesktop.DBus.Error.NoMemory" #define SD_BUS_ERROR_NO_MEMORY "org.freedesktop.DBus.Error.NoMemory"
#define SD_BUS_ERROR_SERVICE_UNKNOWN "org.freedesktop.DBus.Error.ServiceUnknown" #define SD_BUS_ERROR_SERVICE_UNKNOWN "org.freedesktop.DBus.Error.ServiceUnknown"