1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2 /* kdbus-common.h kdbus related utils for daemon and libdbus
4 * Copyright (C) 2013 Samsung Electronics
6 * Licensed under the Academic Free License version 2.1
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version and under the terms of the GNU
12 * Lesser General Public License as published by the
13 * Free Software Foundation; either version 2.1 of the License, or (at
14 * your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27 #ifndef KDBUS_COMMON_H_
28 #define KDBUS_COMMON_H_
30 #include <dbus/dbus-types.h>
31 #include <dbus/dbus-transport.h>
32 #include "dbus-signals.h"
35 #define KDBUS_ALIGN8(l) (((l) + 7) & ~7)
37 #define KDBUS_ITEM_HEADER_SIZE offsetof(struct kdbus_item, data)
38 #define KDBUS_ITEM_SIZE(s) KDBUS_ALIGN8(KDBUS_ITEM_HEADER_SIZE + (s))
39 #define KDBUS_ITEM_NEXT(item) \
40 (typeof(item))(((uint8_t *)item) + KDBUS_ALIGN8((item)->size))
41 #define KDBUS_ITEM_FOREACH(item, head, first) \
42 for (item = (head)->first; \
43 (uint8_t *)(item) < (uint8_t *)(head) + (head)->size; \
44 item = KDBUS_ITEM_NEXT(item))
46 #define KDBUS_MSG_MAX_PAYLOAD_VEC_SIZE 0x00200000 /* maximum size of message header and items */
58 typedef struct kdbus_t kdbus_t;
60 kdbus_t * _kdbus_new (void);
61 void _kdbus_free (kdbus_t *kdbus);
63 int _kdbus_open (kdbus_t *kdbus, const char *path);
64 int _kdbus_close (kdbus_t *kdbus);
66 int _kdbus_hello (kdbus_t *kdbus,
68 dbus_uint64_t attach_flags_send,
69 dbus_uint64_t attach_flags_recv,
70 dbus_uint64_t pool_size,
71 const char *activator_name,
72 const char *connection_name);
74 int _kdbus_send (kdbus_t *kdbus,
76 struct kdbus_msg *msg,
77 struct kdbus_msg **msg_reply);
79 int _kdbus_recv (kdbus_t *kdbus,
81 dbus_int64_t priority,
82 struct kdbus_msg **msg);
84 int _kdbus_list (kdbus_t *kdbus,
86 struct kdbus_info **name_list,
87 dbus_uint64_t *list_size);
89 int _kdbus_add_match_name_change (kdbus_t *kdbus,
93 dbus_uint64_t old_id_flags,
95 dbus_uint64_t new_id_flags);
97 int _kdbus_add_match_id_change (kdbus_t *kdbus,
101 dbus_uint64_t id_flags);
103 int _kdbus_add_match (kdbus_t *kdbus,
104 struct kdbus_cmd_match *cmd);
106 int _kdbus_connection_info_by_name (kdbus_t *kdbus,
108 dbus_bool_t get_sec_label,
109 struct nameInfo *pInfo);
111 int _kdbus_connection_info_by_id (kdbus_t *kdbus,
113 dbus_bool_t get_sec_label,
114 struct nameInfo *pInfo);
116 dbus_uint64_t _kdbus_compute_msg_items_size (kdbus_t *kdbus,
117 const char *destination,
118 dbus_uint64_t dst_id,
119 dbus_uint64_t body_size,
120 dbus_bool_t use_memfd,
123 struct kdbus_msg * _kdbus_new_msg (kdbus_t *kdbus,
124 dbus_uint64_t size_for_items,
126 dbus_int64_t priority,
127 dbus_uint64_t dst_id,
128 dbus_uint64_t src_id,
129 enum kdbus_payload_type payload_type,
130 dbus_uint64_t cookie,
131 dbus_uint64_t timeout_ns_or_cookie_reply);
133 void _kdbus_free_msg (struct kdbus_msg *msg);
135 struct kdbus_cmd_match *_kdbus_new_cmd_match (kdbus_t *kdbus,
136 dbus_uint64_t items_size,
138 dbus_uint64_t cookie);
140 void _kdbus_free_cmd_match (struct kdbus_cmd_match *cmd);
142 int _kdbus_free_mem (kdbus_t *kdbus, void *mem);
144 struct kdbus_item * _kdbus_item_add_string (struct kdbus_item *item,
145 dbus_uint64_t item_type,
146 const char *item_string,
147 dbus_uint64_t item_string_size);
149 struct kdbus_item * _kdbus_item_add_payload_memfd (struct kdbus_item *item,
154 struct kdbus_item * _kdbus_item_add_payload_vec (struct kdbus_item *item,
156 dbus_uint64_t address_or_offset);
158 struct kdbus_item * _kdbus_item_add_fds (struct kdbus_item *item,
162 struct kdbus_item * _kdbus_item_add_bloom_filter (struct kdbus_item *item,
163 dbus_uint64_t data_size,
164 struct kdbus_bloom_filter **out_ptr);
166 struct kdbus_item * _kdbus_item_add_name_change (struct kdbus_item *item,
167 dbus_uint64_t old_id,
168 dbus_uint64_t old_id_flags,
169 dbus_uint64_t new_id,
170 dbus_uint64_t new_id_flags);
172 struct kdbus_item * _kdbus_item_add_id_add (struct kdbus_item *item,
174 dbus_uint64_t id_flags);
176 struct kdbus_item * _kdbus_item_add_id (struct kdbus_item *item,
179 struct kdbus_item * _kdbus_item_add_bloom_mask (struct kdbus_item *item,
180 dbus_uint64_t *bloom,
181 dbus_uint64_t bloom_size);
183 int request_kdbus_name (DBusTransport* transport, const char *name, const __u64 flags);
184 int release_kdbus_name (DBusTransport* transport, const char *name);
186 dbus_bool_t kdbus_remove_match (DBusTransport *transport, DBusList *rules, const char *sender,
187 MatchRule *rule_to_remove, DBusError *error);
189 /** temporary accessors - to delete soon */
190 int _kdbus_fd (kdbus_t *kdbus);
191 void *_kdbus_mmap_ptr (kdbus_t *kdbus);
192 dbus_uint64_t _kdbus_id (kdbus_t *kdbus);
193 char *_kdbus_bus_id (kdbus_t *kdbus);
194 dbus_uint64_t _kdbus_bus_id_size (void);
195 struct kdbus_bloom_parameter *_kdbus_bloom (kdbus_t *kdbus);
197 #endif /* KDBUS_COMMON_H_ */