chiark / gitweb /
tree-wide: remove Lennart's copyright lines
[elogind.git] / src / libelogind / sd-bus / bus-protocol.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 /***
5 ***/
6
7 #include <endian.h>
8
9 #include "macro.h"
10
11 /* Packet header */
12
13 struct _packed_ bus_header {
14         /* The first four fields are identical for dbus1, and dbus2 */
15         uint8_t endian;
16         uint8_t type;
17         uint8_t flags;
18         uint8_t version;
19
20         union _packed_ {
21                 /* dbus1: Used for SOCK_STREAM connections */
22                 struct _packed_ {
23                         uint32_t body_size;
24
25                         /* Note that what the bus spec calls "serial" we'll call
26                            "cookie" instead, because we don't want to imply that the
27                            cookie was in any way monotonically increasing. */
28                         uint32_t serial;
29                         uint32_t fields_size;
30                 } dbus1;
31
32                 /* dbus2: Used for kdbus connections */
33                 struct _packed_ {
34                         uint32_t _reserved;
35                         uint64_t cookie;
36                 } dbus2;
37
38                 /* Note that both header versions have the same size! */
39         };
40 };
41
42 /* Endianness */
43
44 enum {
45         _BUS_INVALID_ENDIAN = 0,
46         BUS_LITTLE_ENDIAN   = 'l',
47         BUS_BIG_ENDIAN      = 'B',
48 #if __BYTE_ORDER == __BIG_ENDIAN
49         BUS_NATIVE_ENDIAN   = BUS_BIG_ENDIAN,
50         BUS_REVERSE_ENDIAN  = BUS_LITTLE_ENDIAN
51 #else
52         BUS_NATIVE_ENDIAN   = BUS_LITTLE_ENDIAN,
53         BUS_REVERSE_ENDIAN  = BUS_BIG_ENDIAN
54 #endif
55 };
56
57 /* Flags */
58
59 enum {
60         BUS_MESSAGE_NO_REPLY_EXPECTED = 1,
61         BUS_MESSAGE_NO_AUTO_START = 2,
62         BUS_MESSAGE_ALLOW_INTERACTIVE_AUTHORIZATION = 4,
63 };
64
65 /* Header fields */
66
67 enum {
68         _BUS_MESSAGE_HEADER_INVALID = 0,
69         BUS_MESSAGE_HEADER_PATH,
70         BUS_MESSAGE_HEADER_INTERFACE,
71         BUS_MESSAGE_HEADER_MEMBER,
72         BUS_MESSAGE_HEADER_ERROR_NAME,
73         BUS_MESSAGE_HEADER_REPLY_SERIAL,
74         BUS_MESSAGE_HEADER_DESTINATION,
75         BUS_MESSAGE_HEADER_SENDER,
76         BUS_MESSAGE_HEADER_SIGNATURE,
77         BUS_MESSAGE_HEADER_UNIX_FDS,
78         _BUS_MESSAGE_HEADER_MAX
79 };
80
81 /* RequestName parameters */
82
83 enum  {
84         BUS_NAME_ALLOW_REPLACEMENT = 1,
85         BUS_NAME_REPLACE_EXISTING = 2,
86         BUS_NAME_DO_NOT_QUEUE = 4
87 };
88
89 /* RequestName returns */
90 enum  {
91         BUS_NAME_PRIMARY_OWNER = 1,
92         BUS_NAME_IN_QUEUE = 2,
93         BUS_NAME_EXISTS = 3,
94         BUS_NAME_ALREADY_OWNER = 4
95 };
96
97 /* ReleaseName returns */
98 enum {
99         BUS_NAME_RELEASED = 1,
100         BUS_NAME_NON_EXISTENT = 2,
101         BUS_NAME_NOT_OWNER = 3,
102 };
103
104 /* StartServiceByName returns */
105 enum {
106         BUS_START_REPLY_SUCCESS = 1,
107         BUS_START_REPLY_ALREADY_RUNNING = 2,
108 };
109
110 #define BUS_INTROSPECT_DOCTYPE                                       \
111         "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n" \
112         "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
113
114 #define BUS_INTROSPECT_INTERFACE_PEER                                \
115         " <interface name=\"org.freedesktop.DBus.Peer\">\n"             \
116         "  <method name=\"Ping\"/>\n"                                   \
117         "  <method name=\"GetMachineId\">\n"                            \
118         "   <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n" \
119         "  </method>\n"                                                 \
120         " </interface>\n"
121
122 #define BUS_INTROSPECT_INTERFACE_INTROSPECTABLE                      \
123         " <interface name=\"org.freedesktop.DBus.Introspectable\">\n"   \
124         "  <method name=\"Introspect\">\n"                              \
125         "   <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"        \
126         "  </method>\n"                                                 \
127         " </interface>\n"
128
129 #define BUS_INTROSPECT_INTERFACE_PROPERTIES                          \
130         " <interface name=\"org.freedesktop.DBus.Properties\">\n"       \
131         "  <method name=\"Get\">\n"                                     \
132         "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"    \
133         "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"     \
134         "   <arg name=\"value\" direction=\"out\" type=\"v\"/>\n"       \
135         "  </method>\n"                                                 \
136         "  <method name=\"GetAll\">\n"                                  \
137         "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"    \
138         "   <arg name=\"properties\" direction=\"out\" type=\"a{sv}\"/>\n" \
139         "  </method>\n"                                                 \
140         "  <method name=\"Set\">\n"                                     \
141         "   <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n"    \
142         "   <arg name=\"property\" direction=\"in\" type=\"s\"/>\n"     \
143         "   <arg name=\"value\" direction=\"in\" type=\"v\"/>\n"        \
144         "  </method>\n"                                                 \
145         "  <signal name=\"PropertiesChanged\">\n"                       \
146         "   <arg type=\"s\" name=\"interface\"/>\n"                     \
147         "   <arg type=\"a{sv}\" name=\"changed_properties\"/>\n"        \
148         "   <arg type=\"as\" name=\"invalidated_properties\"/>\n"       \
149         "  </signal>\n"                                                 \
150         " </interface>\n"
151
152 #define BUS_INTROSPECT_INTERFACE_OBJECT_MANAGER                      \
153         " <interface name=\"org.freedesktop.DBus.ObjectManager\">\n"    \
154         "  <method name=\"GetManagedObjects\">\n"                       \
155         "   <arg type=\"a{oa{sa{sv}}}\" name=\"object_paths_interfaces_and_properties\" direction=\"out\"/>\n" \
156         "  </method>\n"                                                 \
157         "  <signal name=\"InterfacesAdded\">\n"                         \
158         "   <arg type=\"o\" name=\"object_path\"/>\n"                   \
159         "   <arg type=\"a{sa{sv}}\" name=\"interfaces_and_properties\"/>\n" \
160         "  </signal>\n"                                                 \
161         "  <signal name=\"InterfacesRemoved\">\n"                       \
162         "   <arg type=\"o\" name=\"object_path\"/>\n"                   \
163         "   <arg type=\"as\" name=\"interfaces\"/>\n"                   \
164         "  </signal>\n"                                                 \
165         " </interface>\n"