|
|
@ -195,6 +195,9 @@ void mosquitto__db_msg_store_deref(struct mosquitto_db *db, struct mosquitto_msg
|
|
|
|
|
|
|
|
|
|
|
|
static void _message_remove(struct mosquitto_db *db, struct mosquitto *context, struct mosquitto_client_msg **msg, struct mosquitto_client_msg *last)
|
|
|
|
static void _message_remove(struct mosquitto_db *db, struct mosquitto *context, struct mosquitto_client_msg **msg, struct mosquitto_client_msg *last)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
struct mosquitto_client_msg *tail;
|
|
|
|
|
|
|
|
|
|
|
|
if(!context || !msg || !(*msg)){
|
|
|
|
if(!context || !msg || !(*msg)){
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -223,6 +226,29 @@ static void _message_remove(struct mosquitto_db *db, struct mosquitto *context,
|
|
|
|
}else{
|
|
|
|
}else{
|
|
|
|
*msg = context->msgs;
|
|
|
|
*msg = context->msgs;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
tail = context->msgs;
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
|
|
|
|
while(tail && tail->state == mosq_ms_queued && i<max_inflight){
|
|
|
|
|
|
|
|
if(tail->direction == mosq_md_out){
|
|
|
|
|
|
|
|
switch(tail->qos){
|
|
|
|
|
|
|
|
case 0:
|
|
|
|
|
|
|
|
tail->state = mosq_ms_publish_qos0;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
|
|
tail->state = mosq_ms_publish_qos1;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
|
|
tail->state = mosq_ms_publish_qos2;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
if(tail->qos == 2){
|
|
|
|
|
|
|
|
tail->state = mosq_ms_send_pubrec;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tail = tail->next;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int mqtt3_db_message_delete(struct mosquitto_db *db, struct mosquitto *context, uint16_t mid, enum mosquitto_msg_direction dir)
|
|
|
|
int mqtt3_db_message_delete(struct mosquitto_db *db, struct mosquitto *context, uint16_t mid, enum mosquitto_msg_direction dir)
|
|
|
|