XROAD
xroad_node.h
Go to the documentation of this file.
1 
6 #pragma once
7 
8 #include "xroad_system.h"
9 #include "xroad_node_types.h"
10 #include <cache/xroad_cache.h>
11 #include <cache/xroad_objects.h>
12 #include <cache/xroad_cache.h>
14 #include <common/xroad_xml.h>
15 #include <common/xroad_string.h>
16 #include <common/xroad_aux.h>
17 #include <stdint.h>
18 #include <stdbool.h>
19 #include <sys/epoll.h>
20 
21 #define xroad_node_is_offline() \
22  (xroad_node_get_data()->status == xroad_node_status_offline || \
23  xroad_node_get_data()->status == xroad_node_status_sleep)
24 
25 #ifdef __cplusplus
26 extern "C"
27 {
28 #endif
29 
33 typedef struct
34 {
35  void* ctx;
39  void (*on_object)(void*, xroad_node_id_t, void*);
41 
45 typedef struct
46 {
47  void* ctx;
48  int32_t fd;
52  void (*on_event)(const struct epoll_event*);
54 
55 
59 typedef struct
60 {
61  tsc_t wake;
62  tsc_t before_event_cb;
64 
74 xroad_errno_t xroad_node_create(
75  xroad_str_t node_name,
76  uint32_t major_version,
77  uint32_t minor_version,
78  xroad_str_t git_hash,
79  xroad_node_callback_t callback);
80 
84 void xroad_node_destroy(void);
85 
90 xroad_errno_t xroad_node_reconfig(void);
91 
96 xroad_xml_doc_t* xroad_node_get_config(void);
97 
103 
108 int32_t xroad_node_receive(void);
109 
115 int32_t xroad_node_receive_ex(int32_t timeout);
122 xroad_errno_t xroad_node_add_epoll(uint32_t events, xroad_node_epoll_callback_t* cback);
123 
130 xroad_errno_t xroad_node_mod_epoll(uint32_t events, xroad_node_epoll_callback_t* cback);
131 
138 
143 
149 void* xroad_node_create_object(xroad_object_type_t type);
150 
156 void* xroad_node_clone_object(const void* obj);
157 
164 xroad_errno_t xroad_node_send_object(void* obj, xroad_node_id_t id);
165 
171 xroad_errno_t xroad_node_route_object(void* obj, ...);
172 
179 xroad_errno_t xroad_node_route_object_va(void* obj, va_list ap);
180 
187 
194 void* xroad_node_get_object(xroad_object_type_t type, xroad_object_id_t id);
195 
199 xroad_lock_by_pid_t* xroad_node_get_used_lock(void);
200 
205 
210 
216 
221 void xroad_node_set_flags(uint32_t flags);
222 
228 
234 xroad_cursor_t* xroad_node_create_cursor(xroad_object_type_t type);
235 
240 void xroad_node_destroy_cursor(xroad_cursor_t* cursor);
241 
247 void* xroad_node_cursor_get_next(xroad_cursor_t* cursor);
248 
254 void* xroad_node_cursor_get_prev(xroad_cursor_t* cursor);
255 
261 void* xroad_node_cursor_get_first(xroad_cursor_t* cursor);
262 
268 void* xroad_node_cursor_get_last(xroad_cursor_t* cursor);
269 
276 void* xroad_node_cursor_offset(xroad_cursor_t* cursor, int64_t offset);
277 
284 xroad_errno_t xroad_node_clear_cache(xroad_object_type_t type, bool force);
285 
290 xroad_cache_t* xroad_node_get_cache();
291 
297 size_t xroad_node_get_object_count(xroad_object_type_t type);
298 
304 
310 
317 xroad_errno_t xroad_node_subscribe(xroad_domain_t group, xroad_node_callback_t cback);
318 
325 xroad_errno_t xroad_node_unsubscribe(xroad_domain_t group, xroad_node_callback_t cback);
326 
333 
338 
346 #define xroad_node_find_object(type, fun, ...) \
347 ({ \
348  xroad_cursor_t* cur __xroad_cursor_dtor__ = xroad_node_create_cursor(type); \
349  void* obj = xroad_node_cursor_get_first(cur); \
350  while(obj) \
351  { \
352  if (fun(obj, __VA_ARGS__)) \
353  { \
354  break; \
355  } \
356  obj = xroad_node_cursor_get_next(cur); \
357  } \
358  obj; \
359 })
360 
361 #ifdef __cplusplus
362 }
363 #endif
Definition: xroad_node.h:60
Definition: xroad_node.h:34
Definition: xroad_system.h:132
Definition: xroad_node.h:46
Definition: xroad_string.h:29
Definition: xroad_system.h:119
void xroad_node_destroy_cursor(xroad_cursor_t *cursor)
xroad_errno_t xroad_node_clear_cache(xroad_object_type_t type, bool force)
int32_t xroad_node_receive(void)
void * xroad_node_cursor_get_prev(xroad_cursor_t *cursor)
xroad_errno_t xroad_node_unsubscribe(xroad_domain_t group, xroad_node_callback_t cback)
xroad_errno_t xroad_node_del_epoll(xroad_node_epoll_callback_t *cback)
void * xroad_node_get_fun(xroad_str_t fname)
void xroad_node_renamed()
xroad_str_t xroad_node_get_env_param(xroad_str_t param)
xroad_cache_t * xroad_node_get_cache()
void xroad_node_set_flags(uint32_t flags)
const xroad_epoll_timestamps * xroad_node_get_epoll_timestamps(void)
xroad_errno_t xroad_node_send_object(void *obj, xroad_node_id_t id)
int32_t xroad_node_get_epoll_fd(void)
xroad_errno_t xroad_node_mod_epoll(uint32_t events, xroad_node_epoll_callback_t *cback)
void * xroad_node_cursor_get_last(xroad_cursor_t *cursor)
void * xroad_node_create_object(xroad_object_type_t type)
void * xroad_node_cursor_get_next(xroad_cursor_t *cursor)
const xroad_version_t * xroad_node_get_version(void)
xroad_node_data_t * xroad_node_get_data(void)
int32_t xroad_node_get_link_descriptor(void)
int32_t xroad_node_receive_ex(int32_t timeout)
size_t xroad_node_get_object_count(xroad_object_type_t type)
void * xroad_node_cursor_get_first(xroad_cursor_t *cursor)
xroad_lock_by_pid_t * xroad_node_get_used_lock(void)
bool xroad_node_is_initialized(void)
xroad_errno_t xroad_node_create(xroad_str_t node_name, uint32_t major_version, uint32_t minor_version, xroad_str_t git_hash, xroad_node_callback_t callback)
void * xroad_node_clone_object(const void *obj)
xroad_xml_doc_t * xroad_node_get_config(void)
xroad_errno_t xroad_node_reconfig(void)
void * xroad_node_cursor_offset(xroad_cursor_t *cursor, int64_t offset)
xroad_errno_t xroad_node_route_object_va(void *obj, va_list ap)
xroad_str_t xroad_node_get_working_dir(void)
void * xroad_node_get_object(xroad_object_type_t type, xroad_object_id_t id)
xroad_errno_t xroad_node_subscribe(xroad_domain_t group, xroad_node_callback_t cback)
xroad_errno_t xroad_node_add_epoll(uint32_t events, xroad_node_epoll_callback_t *cback)
void xroad_node_reset_statistic(void)
void xroad_node_destroy(void)
xroad_errno_t xroad_node_route_object(void *obj,...)
xroad_cursor_t * xroad_node_create_cursor(xroad_object_type_t type)
CAUTION: do not change this file - it is autogenerated.