diff --git a/src/database.c b/src/database.c index 0faf998e..2ba131c5 100644 --- a/src/database.c +++ b/src/database.c @@ -895,29 +895,24 @@ int db__message_reconnect_reset(struct mosquitto *context) int db__message_remove_incoming(struct mosquitto* context, uint16_t mid) { - struct mosquitto_client_msg* tail, * tmp; - bool deleted = false; + struct mosquitto_client_msg *tail, *tmp; - if (!context) return MOSQ_ERR_INVAL; + if(!context) return MOSQ_ERR_INVAL; - DL_FOREACH_SAFE(context->msgs_in.inflight, tail, tmp) { - if (tail->mid == mid) { - if (tail->store->qos != 2) { + DL_FOREACH_SAFE(context->msgs_in.inflight, tail, tmp){ + if(tail->mid == mid) { + if(tail->store->qos != 2){ return MOSQ_ERR_PROTOCOL; } db__message_remove(&context->msgs_in, tail); - deleted = true; + return MOSQ_ERR_SUCCESS; } } - if (deleted) { - return MOSQ_ERR_SUCCESS; - } - else { - return MOSQ_ERR_NOT_FOUND; - } + return MOSQ_ERR_NOT_FOUND; } + int db__message_release_incoming(struct mosquitto *context, uint16_t mid) { struct mosquitto_client_msg *tail, *tmp; diff --git a/src/handle_publish.c b/src/handle_publish.c index 75bc8f23..4686d350 100644 --- a/src/handle_publish.c +++ b/src/handle_publish.c @@ -286,7 +286,12 @@ int handle__publish(struct mosquitto *context) db__message_store_find(context, msg->source_mid, &stored); } - if (stored && msg->source_mid != 0 && (stored->qos != msg->qos || stored->payloadlen != msg->payloadlen || strcmp(stored->topic, msg->topic) || memcmp(stored->payload, msg->payload, msg->payloadlen) )){ + if(stored && msg->source_mid != 0 && + (stored->qos != msg->qos + || stored->payloadlen != msg->payloadlen + || strcmp(stored->topic, msg->topic) + || memcmp(stored->payload, msg->payload, msg->payloadlen) )){ + log__printf(NULL, MOSQ_LOG_WARNING, "Reused message ID %u from %s detected. Clearing from storage.", msg->source_mid, context->id); db__message_remove_incoming(context, msg->source_mid); stored = NULL;