MQTT5 Topic Alias (#14148)
* bump websockets * add new files to makefile * set topic aliases for used topics
Timotej S committed
Jan 9, 2023 at 08:51 UTC
967208aa05307a04cf70e544a4e353899f347fb6
5 files changed
+32
-3
Makefile.am
+5
-2
@@ -731,9 +731,12 @@ libmqttwebsockets_a_SOURCES = \
731
mqtt_websockets/c-rbuf/include/ringbuffer.h \
732
mqtt_websockets/c-rbuf/src/ringbuffer_internal.h \
733
mqtt_websockets/MQTT-C/src/mqtt.c \
734
- mqtt_websockets/MQTT-C/include/mqtt.h
734
+ mqtt_websockets/MQTT-C/include/mqtt.h \
735
+ mqtt_websockets/c_rhash/src/c_rhash.c \
736
+ mqtt_websockets/c_rhash/include/c_rhash.h \
737
+ mqtt_websockets/c_rhash/src/c_rhash_internal.h
738
736
-libmqttwebsockets_a_CFLAGS = $(CFLAGS) -DMQTT_WSS_CUSTOM_ALLOC -DRBUF_CUSTOM_MALLOC -I$(srcdir)/aclk/helpers
739
+libmqttwebsockets_a_CFLAGS = $(CFLAGS) -DMQTT_WSS_CUSTOM_ALLOC -DRBUF_CUSTOM_MALLOC -I$(srcdir)/aclk/helpers -I$(srcdir)/mqtt_websockets/c_rhash/include
740
741
if MQTT_WSS_DEBUG
742
libmqttwebsockets_a_CFLAGS += -DMQTT_WSS_DEBUG
aclk/aclk.c
+4
@@ -385,6 +385,10 @@ static inline void mqtt_connected_actions(mqtt_wss_client client)
385
aclk_rcvd_cloud_msgs = 0;
386
aclk_connection_counter++;
387
388
+ aclk_topic_cache_iter_t iter = ACLK_TOPIC_CACHE_ITER_T_INITIALIZER;
389
+ while ((topic = (char*)aclk_topic_cache_iterate(&iter)) != NULL)
390
+ mqtt_wss_set_topic_alias(client, topic);
391
+
392
aclk_send_agent_connection_update(client, 1);
393
}
394
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 ee2eca38eb34609a8fabe99108e4c53cd0da7869