aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client.c18
-rw-r--r--src/private.h10
-rw-r--r--test/interop/testclient.h1
3 files changed, 29 insertions, 0 deletions
diff --git a/src/client.c b/src/client.c
index bdfaf2c..c4bd499 100644
--- a/src/client.c
+++ b/src/client.c
@@ -8,6 +8,7 @@
#include "serialize.h"
#include "deserialize.h"
#include "log.h"
+#include "private.h"
#include "queue.h"
@@ -75,6 +76,8 @@ struct MqttClient
bstring willMessage;
int willQos;
int willRetain;
+ /* 1 if client should ignore incoming PUBLISH messages, 0 handle them */
+ int paused;
};
enum MessageState
@@ -674,6 +677,9 @@ static void MqttClientHandleSubAck(MqttClient *client, MqttPacketSubAck *packet)
static void MqttClientHandlePublish(MqttClient *client, MqttPacketPublish *packet)
{
+ if (client->paused)
+ return;
+
if (MqttPacketPublishQos(packet) == 2)
{
/* Check if we have sent a PUBREC previously with the same id. If we
@@ -1115,3 +1121,15 @@ static void MqttClientClearQueues(MqttClient *client)
MqttPacketFree(packet);
}
}
+
+void MqttClientPause(MqttClient *client)
+{
+ assert(client != NULL);
+ client->paused = 1;
+}
+
+void MqttClientResume(MqttClient *client)
+{
+ assert(client != NULL);
+ client->paused = 0;
+}
diff --git a/src/private.h b/src/private.h
new file mode 100644
index 0000000..5a0f4d0
--- /dev/null
+++ b/src/private.h
@@ -0,0 +1,10 @@
+#ifndef MQTT_PRIVATE_H
+#define MQTT_PRIVATE_H
+
+#include "mqtt.h"
+
+void MqttClientPause(MqttClient *client);
+
+void MqttClientResume(MqttClient *client);
+
+#endif
diff --git a/test/interop/testclient.h b/test/interop/testclient.h
index 6f9bdb9..70805c6 100644
--- a/test/interop/testclient.h
+++ b/test/interop/testclient.h
@@ -2,6 +2,7 @@
#define TESTCLIENT_H
#include "mqtt.h"
+#include "private.h"
#include "queue.h"
typedef struct Message Message;