Skip to content

Commit

Permalink
Merge branch 'vidarino-master' into fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
ralight committed Mar 11, 2021
2 parents f4d088b + 720ce01 commit 1109f53
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/database.c
Original file line number Diff line number Diff line change
Expand Up @@ -893,6 +893,26 @@ 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;

if(!context) return MOSQ_ERR_INVAL;

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);
return MOSQ_ERR_SUCCESS;
}
}

return MOSQ_ERR_NOT_FOUND;
}


int db__message_release_incoming(struct mosquitto *context, uint16_t mid)
{
struct mosquitto_client_msg *tail, *tmp;
Expand Down
12 changes: 12 additions & 0 deletions src/handle_publish.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,18 @@ int handle__publish(struct mosquitto *context)
if(msg->qos > 0){
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) )){

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;
}

if(!stored){
if(msg->qos == 0
|| db__ready_for_flight(&context->msgs_in, msg->qos)
Expand Down
1 change: 1 addition & 0 deletions src/mosquitto_broker_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -642,6 +642,7 @@ int persist__restore(void);
int db__message_count(int *count);
int db__message_delete_outgoing(struct mosquitto *context, uint16_t mid, enum mosquitto_msg_state expect_state, int qos);
int db__message_insert(struct mosquitto *context, uint16_t mid, enum mosquitto_msg_direction dir, uint8_t qos, bool retain, struct mosquitto_msg_store *stored, mosquitto_property *properties, bool update);
int db__message_remove_incoming(struct mosquitto* context, uint16_t mid);
int db__message_release_incoming(struct mosquitto *context, uint16_t mid);
int db__message_update_outgoing(struct mosquitto *context, uint16_t mid, enum mosquitto_msg_state state, int qos);
void db__message_dequeue_first(struct mosquitto *context, struct mosquitto_msg_data *msg_data);
Expand Down

0 comments on commit 1109f53

Please sign in to comment.