summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am7
-rw-r--r--aclk/aclk.c4
-rw-r--r--aclk/aclk_util.c18
-rw-r--r--aclk/aclk_util.h4
m---------mqtt_websockets33
5 files changed, 51 insertions, 15 deletions
diff --git a/Makefile.am b/Makefile.am
index 5e16052374..32b30b1a4c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -733,9 +733,12 @@ libmqttwebsockets_a_SOURCES = \
mqtt_websockets/c-rbuf/include/ringbuffer.h \
mqtt_websockets/c-rbuf/src/ringbuffer_internal.h \
mqtt_websockets/MQTT-C/src/mqtt.c \
- mqtt_websockets/MQTT-C/include/mqtt.h
+ mqtt_websockets/MQTT-C/include/mqtt.h \
+ mqtt_websockets/c_rhash/src/c_rhash.c \
+ mqtt_websockets/c_rhash/include/c_rhash.h \
+ mqtt_websockets/c_rhash/src/c_rhash_internal.h
-libmqttwebsockets_a_CFLAGS = $(CFLAGS) -DMQTT_WSS_CUSTOM_ALLOC -DRBUF_CUSTOM_MALLOC -I$(srcdir)/aclk/helpers
+libmqttwebsockets_a_CFLAGS = $(CFLAGS) -DMQTT_WSS_CUSTOM_ALLOC -DRBUF_CUSTOM_MALLOC -I$(srcdir)/aclk/helpers -I$(srcdir)/mqtt_websockets/c_rhash/include
mqtt_websockets/src/mqtt_wss_client.$(OBJEXT) : CFLAGS += -Wno-unused-result
diff --git a/aclk/aclk.c b/aclk/aclk.c
index fb47f2347b..8822fa816c 100644
--- a/aclk/aclk.c
+++ b/aclk/aclk.c
@@ -365,6 +365,10 @@ static inline void mqtt_connected_actions(mqtt_wss_client client)
aclk_rcvd_cloud_msgs = 0;
aclk_connection_counter++;
+ aclk_topic_cache_iter_t iter = ACLK_TOPIC_CACHE_ITER_T_INITIALIZER;
+ while ((topic = (char*)aclk_topic_cache_iterate(&iter)) != NULL)
+ mqtt_wss_set_topic_alias(client, topic);
+
aclk_send_agent_connection_update(client, 1);
}
diff --git a/aclk/aclk_util.c b/aclk/aclk_util.c
index 01eaedc8e0..b6eea87c16 100644
--- a/aclk/aclk_util.c
+++ b/aclk/aclk_util.c
@@ -308,6 +308,24 @@ const char *aclk_get_topic(enum aclk_topics topic)
}
/*
+ * Allows iterating all topics in topic cache without
+ * having to resort to callbacks.
+ */
+
+const char *aclk_topic_cache_iterate(aclk_topic_cache_iter_t *iter)
+{
+ if (!aclk_topic_cache) {
+ error("Topic cache not initialized when %s was called.", __FUNCTION__);
+ return NULL;
+ }
+
+ if (*iter >= aclk_topic_cache_items)
+ return NULL;
+
+ return aclk_topic_cache[(*iter)++]->topic;
+}
+
+/*
* TBEB with randomness
*
* @param reset 1 - to reset the delay,
diff --git a/aclk/aclk_util.h b/aclk/aclk_util.h
index ed715e0466..b858fe7383 100644
--- a/aclk/aclk_util.h
+++ b/aclk/aclk_util.h
@@ -93,9 +93,13 @@ enum aclk_topics {
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
diff --git a/mqtt_websockets b/mqtt_websockets
-Subproject d1e30f55e2c21e3c8982c76e6a969a1e65292d9
+Subproject 8869ab354d10c071c1e5e33602cc6b7940b4427