Add tick event to plugin interface.

This commit is contained in:
Roger A. Light 2020-10-23 22:49:16 +01:00
parent 3eb39b38da
commit 06b933c3ba
4 changed files with 42 additions and 1 deletions

View File

@ -55,6 +55,7 @@ enum mosquitto_plugin_event {
MOSQ_EVT_CONTROL = 6,
MOSQ_EVT_MESSAGE = 7,
MOSQ_EVT_PSK_KEY = 8,
MOSQ_EVT_TICK = 9,
};
/* Data for the MOSQ_EVT_RELOAD event */
@ -141,6 +142,17 @@ struct mosquitto_evt_message {
};
/* Data for the MOSQ_EVT_TICK event */
struct mosquitto_evt_tick {
void *future;
long now_ns;
long next_ns;
int now_s;
int next_s;
void *future2[4];
};
/* Callback definition */
typedef int (*MOSQ_FUNC_generic_callback)(int, void *, void *);

View File

@ -229,6 +229,7 @@ int mosquitto_main_loop(struct mosquitto_db *db, mosq_sock_t *listensock, int li
}
}
#endif
plugin__handle_tick(db);
}
mux__cleanup(db);

View File

@ -230,11 +230,12 @@ struct plugin__callbacks{
struct mosquitto__callback *reload;
struct mosquitto__callback *acl_check;
struct mosquitto__callback *basic_auth;
struct mosquitto__callback *psk_key;
struct mosquitto__callback *ext_auth_start;
struct mosquitto__callback *ext_auth_continue;
struct mosquitto__callback *control;
struct mosquitto__callback *message;
struct mosquitto__callback *tick;
struct mosquitto__callback *psk_key;
};
struct mosquitto__security_options {
@ -797,6 +798,7 @@ void listener__set_defaults(struct mosquitto__listener *listener);
int plugin__load_v5(struct mosquitto__listener *listener, struct mosquitto__auth_plugin *plugin, struct mosquitto_opt *auth_options, int auth_option_count, void *lib);
int plugin__handle_message(struct mosquitto_db *db, struct mosquitto *context, struct mosquitto_msg_store *stored);
void LIB_ERROR(void);
void plugin__handle_tick(struct mosquitto_db *db);
/* ============================================================
* Property related functions

View File

@ -155,6 +155,26 @@ int plugin__handle_message(struct mosquitto_db *db, struct mosquitto *context, s
}
void plugin__handle_tick(struct mosquitto_db *db)
{
struct mosquitto_evt_tick event_data;
struct mosquitto__callback *cb_base;
struct mosquitto__security_options *opts;
// FIXME - set now_s and now_ns to avoid need for multiple time lookups
if(db->config->per_listener_settings){
// FIXME - iterate over all listeners
}else{
opts = &db->config->security_options;
memset(&event_data, 0, sizeof(event_data));
DL_FOREACH(opts->plugin_callbacks.message, cb_base){
cb_base->cb(MOSQ_EVT_TICK, &event_data, cb_base->userdata);
}
}
}
int mosquitto_callback_register(
mosquitto_plugin_id_t *identifier,
int event,
@ -200,6 +220,9 @@ int mosquitto_callback_register(
case MOSQ_EVT_MESSAGE:
cb_base = &security_options->plugin_callbacks.message;
break;
case MOSQ_EVT_TICK:
cb_base = &security_options->plugin_callbacks.tick;
break;
default:
return MOSQ_ERR_INVAL;
break;
@ -264,6 +287,9 @@ int mosquitto_callback_unregister(
case MOSQ_EVT_MESSAGE:
cb_base = &security_options->plugin_callbacks.message;
break;
case MOSQ_EVT_TICK:
cb_base = &security_options->plugin_callbacks.tick;
break;
default:
return MOSQ_ERR_INVAL;
break;