diff options
| -rw-r--r-- | src/client.c | 18 | ||||
| -rw-r--r-- | src/private.h | 10 | ||||
| -rw-r--r-- | test/interop/testclient.h | 1 |
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; |
