Add kdbus transport
[platform/upstream/dbus.git] / dbus / kdbus-common.h
1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2 /* kdbus-common.h  kdbus related utils for daemon and libdbus
3  *
4  * Copyright (C) 2013  Samsung Electronics
5  *
6  * Licensed under the Academic Free License version 2.1
7  *
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.
15  *
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.
20  *
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
24  *
25  */
26
27 #ifndef KDBUS_COMMON_H_
28 #define KDBUS_COMMON_H_
29
30 #include <dbus/dbus-types.h>
31 #include <dbus/dbus-transport.h>
32 #include "dbus-signals.h"
33 #include "kdbus.h"
34
35 #define KDBUS_ALIGN8(l) (((l) + 7) & ~7)
36
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))
45
46 #define KDBUS_MSG_MAX_PAYLOAD_VEC_SIZE  0x00200000              /* maximum size of message header and items */
47
48 struct nameInfo
49 {
50   __u64 uniqueId;
51   __u64 flags;
52   __u64 userId;
53   __u64 processId;
54   __u32 sec_label_len;
55   char *sec_label;
56 };
57
58 typedef struct kdbus_t kdbus_t;
59
60 kdbus_t *   _kdbus_new                             (void);
61 void        _kdbus_free                            (kdbus_t *kdbus);
62
63 int         _kdbus_open                            (kdbus_t *kdbus, const char *path);
64 int         _kdbus_close                           (kdbus_t *kdbus);
65
66 int         _kdbus_hello                           (kdbus_t       *kdbus,
67                                                     dbus_uint64_t  flags,
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);
73
74 int         _kdbus_send                            (kdbus_t           *kdbus,
75                                                     dbus_uint64_t      flags,
76                                                     struct kdbus_msg  *msg,
77                                                     struct kdbus_msg **msg_reply);
78
79 int         _kdbus_recv                            (kdbus_t           *kdbus,
80                                                     dbus_uint64_t      flags,
81                                                     dbus_int64_t       priority,
82                                                     struct kdbus_msg **msg);
83
84 int         _kdbus_list                            (kdbus_t            *kdbus,
85                                                     dbus_uint64_t       flags,
86                                                     struct kdbus_info **name_list,
87                                                     dbus_uint64_t      *list_size);
88
89 int         _kdbus_add_match_name_change           (kdbus_t *kdbus,
90                                                     dbus_uint64_t flags,
91                                                     dbus_uint64_t cookie,
92                                                     dbus_uint64_t old_id,
93                                                     dbus_uint64_t old_id_flags,
94                                                     dbus_uint64_t new_id,
95                                                     dbus_uint64_t new_id_flags);
96
97 int         _kdbus_add_match_id_change             (kdbus_t *kdbus,
98                                                     dbus_uint64_t flags,
99                                                     dbus_uint64_t cookie,
100                                                     dbus_uint64_t id,
101                                                     dbus_uint64_t id_flags);
102
103 int         _kdbus_add_match                      (kdbus_t *kdbus,
104                                                    struct kdbus_cmd_match *cmd);
105
106 int         _kdbus_connection_info_by_name         (kdbus_t         *kdbus,
107                                                     const char      *name,
108                                                     dbus_bool_t      get_sec_label,
109                                                     struct nameInfo *pInfo);
110
111 int         _kdbus_connection_info_by_id           (kdbus_t         *kdbus,
112                                                     dbus_uint64_t    id,
113                                                     dbus_bool_t      get_sec_label,
114                                                     struct nameInfo *pInfo);
115
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,
121                                                     int            fds_count);
122
123 struct kdbus_msg * _kdbus_new_msg                  (kdbus_t                *kdbus,
124                                                     dbus_uint64_t           size_for_items,
125                                                     dbus_uint64_t           flags,
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);
132
133 void               _kdbus_free_msg                 (struct kdbus_msg *msg);
134
135 struct kdbus_cmd_match *_kdbus_new_cmd_match       (kdbus_t       *kdbus,
136                                                     dbus_uint64_t  items_size,
137                                                     dbus_uint64_t  flags,
138                                                     dbus_uint64_t  cookie);
139
140 void               _kdbus_free_cmd_match           (struct kdbus_cmd_match *cmd);
141
142 int                _kdbus_free_mem                 (kdbus_t *kdbus, void *mem);
143
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);
148
149 struct kdbus_item * _kdbus_item_add_payload_memfd  (struct kdbus_item *item,
150                                                     dbus_uint64_t      start,
151                                                     dbus_uint64_t      size,
152                                                     int                fd);
153
154 struct kdbus_item * _kdbus_item_add_payload_vec    (struct kdbus_item *item,
155                                                     dbus_uint64_t      size,
156                                                     dbus_uint64_t      address_or_offset);
157
158 struct kdbus_item * _kdbus_item_add_fds            (struct kdbus_item *item,
159                                                     const int         *fds,
160                                                     int                fds_count);
161
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);
165
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);
171
172 struct kdbus_item * _kdbus_item_add_id_add         (struct kdbus_item *item,
173                                                     dbus_uint64_t      id,
174                                                     dbus_uint64_t      id_flags);
175
176 struct kdbus_item * _kdbus_item_add_id             (struct kdbus_item *item,
177                                                     dbus_uint64_t      id);
178
179 struct kdbus_item * _kdbus_item_add_bloom_mask     (struct kdbus_item *item,
180                                                     dbus_uint64_t     *bloom,
181                                                     dbus_uint64_t      bloom_size);
182
183 int         request_kdbus_name                     (DBusTransport* transport, const char *name, const __u64 flags);
184 int         release_kdbus_name                     (DBusTransport* transport, const char *name);
185
186 dbus_bool_t kdbus_remove_match          (DBusTransport *transport, DBusList *rules, const char *sender,
187                                              MatchRule *rule_to_remove, DBusError *error);
188
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);
196
197 #endif /* KDBUS_COMMON_H_ */