MQTT 5 publish topic alias support (#14067)
* mqtt_websockets bumps version * use the new topic alias support in netdata
Timotej S committed
Dec 13, 2022 at 12:32 UTC
a749ab00a63b229d99f6bc82a965206e5481db3e
5 files changed
+32
-3
Makefile.am
+5
-2
@@ -733,9 +733,12 @@ libmqttwebsockets_a_SOURCES = \
733
mqtt_websockets/c-rbuf/include/ringbuffer.h \
734
mqtt_websockets/c-rbuf/src/ringbuffer_internal.h \
735
mqtt_websockets/MQTT-C/src/mqtt.c \
736
- mqtt_websockets/MQTT-C/include/mqtt.h
736
+ mqtt_websockets/MQTT-C/include/mqtt.h \
737
+ mqtt_websockets/c_rhash/src/c_rhash.c \
738
+ mqtt_websockets/c_rhash/include/c_rhash.h \
739
+ mqtt_websockets/c_rhash/src/c_rhash_internal.h
740
738
-libmqttwebsockets_a_CFLAGS = $(CFLAGS) -DMQTT_WSS_CUSTOM_ALLOC -DRBUF_CUSTOM_MALLOC -I$(srcdir)/aclk/helpers
741
+libmqttwebsockets_a_CFLAGS = $(CFLAGS) -DMQTT_WSS_CUSTOM_ALLOC -DRBUF_CUSTOM_MALLOC -I$(srcdir)/aclk/helpers -I$(srcdir)/mqtt_websockets/c_rhash/include
742
743
mqtt_websockets/src/mqtt_wss_client.$(OBJEXT) : CFLAGS += -Wno-unused-result
744
aclk/aclk.c
+4
@@ -365,6 +365,10 @@ static inline void mqtt_connected_actions(mqtt_wss_client client)
365
aclk_rcvd_cloud_msgs = 0;
366
aclk_connection_counter++;
367
368
+ aclk_topic_cache_iter_t iter = ACLK_TOPIC_CACHE_ITER_T_INITIALIZER;
369
+ while ((topic = (char*)aclk_topic_cache_iterate(&iter)) != NULL)
370
+ mqtt_wss_set_topic_alias(client, topic);
371
+
372
aclk_send_agent_connection_update(client, 1);
373
}
374
aclk/aclk_util.c
+18
@@ -307,6 +307,24 @@ const char *aclk_get_topic(enum aclk_topics topic)
307
return NULL;
308
}
309
310
+/*
311
+ * Allows iterating all topics in topic cache without
312
+ * having to resort to callbacks.
313
+ */
314
+
315
+const char *aclk_topic_cache_iterate(aclk_topic_cache_iter_t *iter)
316
+{
317
+ if (!aclk_topic_cache) {
318
+ error("Topic cache not initialized when %s was called.", __FUNCTION__);
319
+ return NULL;
320
+ }
321
+
322
+ if (*iter >= aclk_topic_cache_items)
323
+ return NULL;
324
+
325
+ return aclk_topic_cache[(*iter)++]->topic;
326
+}
327
+
328
/*
329
* TBEB with randomness
330
*
aclk/aclk_util.h
+4
@@ -93,9 +93,13 @@ enum aclk_topics {
93
ACLK_TOPICID_CTXS_UPDATED = 20
94
};
95
96
+typedef size_t aclk_topic_cache_iter_t;
97
+#define ACLK_TOPIC_CACHE_ITER_T_INITIALIZER (0)
98
+
99
const char *aclk_get_topic(enum aclk_topics topic);
100
int aclk_generate_topic_cache(struct json_object *json);
101
void free_topic_cache(void);
102
+const char *aclk_topic_cache_iterate(aclk_topic_cache_iter_t *iter);
103
// TODO
104
// aclk_topics_reload //when claim id changes
105
mqtt_websockets
+1
-1
@@ -1 +1 @@
1
-Subproject commit d1e30f55e2c21e3c8982c76e6a969a1e65292d90
1
+Subproject commit 8869ab354d10c071c1e5e33602cc6b7940b4427c