int _mosquitto_handle_pubackcomp(struct mosquitto *mosq, const char *type) #endif { uint16_t mid; int rc; assert(mosq); rc = _mosquitto_read_uint16(&mosq->in_packet, &mid); if(rc) return rc; #ifdef WITH_BROKER _mosquitto_log_printf(NULL, MOSQ_LOG_DEBUG, "Received %s from %s (Mid: %d)", type, mosq->id, mid); if(mid){ rc = mqtt3_db_message_delete(db, mosq, mid, mosq_md_out); if(rc) return rc; } #else _mosquitto_log_printf(mosq, MOSQ_LOG_DEBUG, "Client %s received %s (Mid: %d)", mosq->id, type, mid); if(!_mosquitto_message_delete(mosq, mid, mosq_md_out)){ /* Only inform the client the message has been sent once. */ pthread_mutex_lock(&mosq->callback_mutex); if(mosq->on_publish){ mosq->in_callback = true; mosq->on_publish(mosq, mosq->userdata, mid); mosq->in_callback = false; } pthread_mutex_unlock(&mosq->callback_mutex); } #endif return MOSQ_ERR_SUCCESS; }
int _mosquitto_handle_pubackcomp(struct mosquitto *mosq, const char *type) { uint16_t mid; int rc; assert(mosq); if(mosq->core.in_packet.remaining_length != 2){ return MOSQ_ERR_PROTOCOL; } rc = _mosquitto_read_uint16(&mosq->core.in_packet, &mid); if(rc) return rc; _mosquitto_log_printf(mosq, MOSQ_LOG_DEBUG, "Received %s (Mid: %d)", type, mid); if(!_mosquitto_message_delete(mosq, mid, mosq_md_out)){ /* Only inform the client the message has been sent once. */ if(mosq->on_publish){ mosq->on_publish(mosq->obj, mid); } } return MOSQ_ERR_SUCCESS; }