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