master
h 119 lines 4.12 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2 #ifndef ACLK_UTIL_H
3 #define ACLK_UTIL_H
4
5 #include "libnetdata/libnetdata.h"
6 #include "mqtt_websockets/mqtt_wss_client.h"
7
8 #define CLOUD_EC_MALFORMED_NODE_ID 1
9 #define CLOUD_EMSG_MALFORMED_NODE_ID "URL requests node_id but there is not enough chars following (for it to be valid uuid)."
10 #define CLOUD_EC_NODE_NOT_FOUND 2
11 #define CLOUD_EMSG_NODE_NOT_FOUND "Node with requested node_id not found"
12 #define CLOUD_EC_ZLIB_ERROR 3
13 #define CLOUD_EMSG_ZLIB_ERROR "Error during zlib compression"
14 #define CLOUD_EC_REQ_REPLY_TOO_BIG 4
15 #define CLOUD_EMSG_REQ_REPLY_TOO_BIG "Request reply produces message bigger than allowed maximum"
16 #define CLOUD_EC_FAIL_TOPIC 5
17 #define CLOUD_EMSG_FAIL_TOPIC "Internal Topic Error"
18 #define CLOUD_EC_SND_TIMEOUT 6
19 #define CLOUD_EMSG_SND_TIMEOUT "Timeout sending binpacked message"
20
21 // Helper stuff which should not have any further inside ACLK dependency
22 // and are supposed not to be needed outside of ACLK
23 extern usec_t aclk_session_newarch;
24
25 extern int chart_batch_id;
26
27 typedef enum {
28 ACLK_ENC_UNKNOWN = 0,
29 ACLK_ENC_JSON,
30 ACLK_ENC_PROTO
31 } aclk_encoding_type_t;
32
33 typedef enum {
34 ACLK_TRP_UNKNOWN = 0,
35 ACLK_TRP_MQTT_3_1_1,
36 ACLK_TRP_MQTT_5
37 } aclk_transport_type_t;
38
39 typedef struct {
40 char *endpoint;
41 aclk_transport_type_t type;
42 } aclk_transport_desc_t;
43
44 typedef struct {
45 int base;
46 int max_s;
47 int min_s;
48 } aclk_backoff_t;
49
50 typedef struct {
51 char *auth_endpoint;
52 aclk_encoding_type_t encoding;
53
54 aclk_transport_desc_t **transports;
55 size_t transport_count;
56
57 char **capabilities;
58 size_t capability_count;
59
60 aclk_backoff_t backoff;
61 } aclk_env_t;
62
63 extern aclk_env_t *aclk_env;
64
65 aclk_encoding_type_t aclk_encoding_type_t_from_str(const char *str);
66 aclk_transport_type_t aclk_transport_type_t_from_str(const char *str);
67
68 void aclk_transport_desc_t_destroy(aclk_transport_desc_t *trp_desc);
69 void aclk_env_t_destroy(aclk_env_t *env);
70 int aclk_env_has_capa(const char *capa);
71
72 enum aclk_topics {
73 ACLK_TOPICID_UNKNOWN = 0,
74 ACLK_TOPICID_CHART = 1,
75 ACLK_TOPICID_ALARMS = 2,
76 ACLK_TOPICID_METADATA = 3,
77 ACLK_TOPICID_COMMAND = 4,
78 ACLK_TOPICID_AGENT_CONN = 5,
79 ACLK_TOPICID_CMD_NG_V1 = 6,
80 ACLK_TOPICID_CREATE_NODE = 7,
81 ACLK_TOPICID_NODE_CONN = 8,
82 ACLK_TOPICID_CHART_DIMS = 9,
83 ACLK_TOPICID_CHART_CONFIGS_UPDATED = 10,
84 ACLK_TOPICID_CHART_RESET = 11,
85 ACLK_TOPICID_RETENTION_UPDATED = 12,
86 ACLK_TOPICID_NODE_INFO = 13,
87 ACLK_TOPICID_ALARM_LOG = 14,
88 ACLK_TOPICID_ALARM_CHECKPOINT = 15,
89 ACLK_TOPICID_ALARM_CONFIG = 16,
90 ACLK_TOPICID_ALARM_SNAPSHOT = 17,
91 ACLK_TOPICID_NODE_COLLECTORS = 18,
92 ACLK_TOPICID_CTXS_SNAPSHOT = 19,
93 ACLK_TOPICID_CTXS_UPDATED = 20
94 };
95
96 const char *aclk_get_topic(enum aclk_topics topic);
97 int aclk_generate_topic_cache(json_object *json);
98 void free_topic_cache(void);
99 const char *aclk_topic_cache_iterate(size_t *iter);
100
101 #ifdef ACLK_LOG_CONVERSATION_DIR
102 extern volatile int aclk_conversation_log_counter;
103 #define ACLK_GET_CONV_LOG_NEXT() __atomic_fetch_add(&aclk_conversation_log_counter, 1, __ATOMIC_SEQ_CST)
104 #endif
105
106 unsigned long int aclk_tbeb_delay(int reset, int base, unsigned long int mins_ms, unsigned long int min_ms);
107 #define aclk_tbeb_reset(x) aclk_tbeb_delay(1, 0, 0, 0)
108
109 void aclk_set_proxy(char **ohost, int *port, char **uname, char **pwd,
110 char **log_proxy, enum mqtt_wss_proxy_type *type);
111 enum mqtt_wss_proxy_type aclk_proxy_type_from_scheme(const char *proxy_url);
112 const char *aclk_mqtt_proxy_type_to_scheme(enum mqtt_wss_proxy_type type);
113 int aclk_proxy_negotiation_connect(int sockfd, enum mqtt_wss_proxy_type proxy_type,
114 const char *proxy_username, const char *proxy_password,
115 const char *target_host, int target_port, int timeout_ms);
116 void aclk_sensitive_memzero(void *ptr, size_t len);
117 void aclk_sensitive_free(char **ptr);
118
119 #endif /* ACLK_UTIL_H */