diff --git a/lib/cpp/mosquittopp.cpp b/lib/cpp/mosquittopp.cpp index eb053fae..5ff4796f 100644 --- a/lib/cpp/mosquittopp.cpp +++ b/lib/cpp/mosquittopp.cpp @@ -257,18 +257,30 @@ mosqpp_EXPORT int subscribe_callback( will, tls); } +namespace { +void mosquitto_callbacks_set(struct mosquitto *mosq) { + mosquitto_pre_connect_callback_set(mosq, on_pre_connect_wrapper); + mosquitto_connect_callback_set(mosq, on_connect_wrapper); + mosquitto_connect_with_flags_callback_set(mosq, on_connect_with_flags_wrapper); + mosquitto_connect_v5_callback_set(mosq, on_connect_v5_wrapper); + mosquitto_disconnect_callback_set(mosq, on_disconnect_wrapper); + mosquitto_disconnect_v5_callback_set(mosq, on_disconnect_v5_wrapper); + mosquitto_publish_callback_set(mosq, on_publish_wrapper); + mosquitto_publish_v5_callback_set(mosq, on_publish_v5_wrapper); + mosquitto_message_callback_set(mosq, on_message_wrapper); + mosquitto_message_v5_callback_set(mosq, on_message_v5_wrapper); + mosquitto_subscribe_callback_set(mosq, on_subscribe_wrapper); + mosquitto_subscribe_v5_callback_set(mosq, on_subscribe_v5_wrapper); + mosquitto_unsubscribe_callback_set(mosq, on_unsubscribe_wrapper); + mosquitto_unsubscribe_v5_callback_set(mosq, on_unsubscribe_v5_wrapper); + mosquitto_log_callback_set(mosq, on_log_wrapper); +} +} mosquittopp::mosquittopp(const char *id, bool clean_session) { m_mosq = mosquitto_new(id, clean_session, this); - mosquitto_connect_callback_set(m_mosq, on_connect_wrapper); - mosquitto_connect_with_flags_callback_set(m_mosq, on_connect_with_flags_wrapper); - mosquitto_disconnect_callback_set(m_mosq, on_disconnect_wrapper); - mosquitto_publish_callback_set(m_mosq, on_publish_wrapper); - mosquitto_message_callback_set(m_mosq, on_message_wrapper); - mosquitto_subscribe_callback_set(m_mosq, on_subscribe_wrapper); - mosquitto_unsubscribe_callback_set(m_mosq, on_unsubscribe_wrapper); - mosquitto_log_callback_set(m_mosq, on_log_wrapper); + mosquitto_callbacks_set(m_mosq); } mosquittopp::~mosquittopp() @@ -281,14 +293,7 @@ int mosquittopp::reinitialise(const char *id, bool clean_session) int rc; rc = mosquitto_reinitialise(m_mosq, id, clean_session, this); if(rc == MOSQ_ERR_SUCCESS){ - mosquitto_connect_callback_set(m_mosq, on_connect_wrapper); - mosquitto_connect_with_flags_callback_set(m_mosq, on_connect_with_flags_wrapper); - mosquitto_disconnect_callback_set(m_mosq, on_disconnect_wrapper); - mosquitto_publish_callback_set(m_mosq, on_publish_wrapper); - mosquitto_message_callback_set(m_mosq, on_message_wrapper); - mosquitto_subscribe_callback_set(m_mosq, on_subscribe_wrapper); - mosquitto_unsubscribe_callback_set(m_mosq, on_unsubscribe_wrapper); - mosquitto_log_callback_set(m_mosq, on_log_wrapper); + mosquitto_callbacks_set(m_mosq); } return rc; } diff --git a/src/plugin_persist.c b/src/plugin_persist.c index 0966464f..0b5ffc00 100644 --- a/src/plugin_persist.c +++ b/src/plugin_persist.c @@ -28,6 +28,7 @@ Contributors: #include "utlist.h" #include "lib_load.h" #include "will_mosq.h" +#include void plugin_persist__handle_restore(void) @@ -204,8 +205,8 @@ void plugin_persist__handle_client_msg_add(struct mosquitto *context, const stru event_data.qos = cmsg->qos; event_data.retain = cmsg->retain; event_data.dup = cmsg->dup; - event_data.direction = cmsg->direction; - event_data.state = cmsg->state; + event_data.direction = (uint8_t)cmsg->direction; + event_data.state = (uint8_t)cmsg->state; DL_FOREACH(opts->plugin_callbacks.persist_client_msg_add, cb_base){ cb_base->cb(MOSQ_EVT_PERSIST_CLIENT_MSG_ADD, &event_data, cb_base->userdata); @@ -232,10 +233,10 @@ void plugin_persist__handle_client_msg_delete(struct mosquitto *context, const s event_data.client_id = context->id; event_data.cmsg_id = cmsg->cmsg_id; event_data.mid = cmsg->mid; - event_data.state = cmsg->state; + event_data.state = (uint8_t)cmsg->state; event_data.qos = cmsg->qos; event_data.store_id = cmsg->base_msg->db_id; - event_data.direction = cmsg->direction; + event_data.direction = (uint8_t)cmsg->direction; DL_FOREACH(opts->plugin_callbacks.persist_client_msg_delete, cb_base){ cb_base->cb(MOSQ_EVT_PERSIST_CLIENT_MSG_DELETE, &event_data, cb_base->userdata); @@ -263,9 +264,9 @@ void plugin_persist__handle_client_msg_update(struct mosquitto *context, const s event_data.cmsg_id = cmsg->cmsg_id; event_data.mid = cmsg->mid; event_data.store_id = cmsg->base_msg->db_id; - event_data.state = cmsg->state; + event_data.state = (uint8_t)cmsg->state; event_data.dup = cmsg->dup; - event_data.direction = cmsg->direction; + event_data.direction = (uint8_t)cmsg->direction; event_data.qos = cmsg->qos; DL_FOREACH(opts->plugin_callbacks.persist_client_msg_update, cb_base){