Move v5 plugin load to own file.

This commit is contained in:
Roger A. Light
2021-11-10 16:42:08 +00:00
parent 786d468570
commit d33c803981
4 changed files with 79 additions and 51 deletions
+1 -1
View File
@@ -43,7 +43,7 @@ set (MOSQ_SRCS
persist_read_v234.c persist_read_v5.c persist_read.c
persist_write_v5.c persist_write.c
persist.h
plugin.c plugin_v4.c plugin_v3.c plugin_v2.c
plugin_callbacks.c plugin_v5.c plugin_v4.c plugin_v3.c plugin_v2.c
plugin_init.c plugin_cleanup.c
plugin_acl_check.c plugin_basic_auth.c plugin_connect.c plugin_disconnect.c
plugin_extended_auth.c plugin_message.c plugin_psk_key.c plugin_public.c
+6 -2
View File
@@ -55,10 +55,11 @@ OBJS= mosquitto.o \
persist_read_v5.o \
persist_write.o \
persist_write_v5.o \
plugin.o \
plugin_callbacks.o \
plugin_v2.o \
plugin_v3.o \
plugin_v4.o \
plugin_v5.o \
plugin_acl_check.o \
plugin_basic_auth.o \
plugin_cleanup.o \
@@ -263,7 +264,7 @@ property_broker.o : property_broker.c mosquitto_broker_internal.h
property_mosq.o : ../lib/property_mosq.c ../lib/property_mosq.h
${CROSS_COMPILE}${CC} $(BROKER_CPPFLAGS) $(BROKER_CFLAGS) -c $< -o $@
plugin.o : plugin.c ../include/mosquitto_plugin.h mosquitto_broker_internal.h
plugin_callbacks.o : plugin_callbacks.c ../include/mosquitto_plugin.h mosquitto_broker_internal.h
${CROSS_COMPILE}${CC} $(BROKER_CPPFLAGS) $(BROKER_CFLAGS) -c $< -o $@
plugin_v2.o : plugin_v2.c ../include/mosquitto_plugin.h mosquitto_broker_internal.h
@@ -275,6 +276,9 @@ plugin_v3.o : plugin_v3.c ../include/mosquitto_plugin.h mosquitto_broker_interna
plugin_v4.o : plugin_v4.c ../include/mosquitto_plugin.h mosquitto_broker_internal.h
${CROSS_COMPILE}${CC} $(BROKER_CPPFLAGS) $(BROKER_CFLAGS) -c $< -o $@
plugin_v5.o : plugin_v5.c ../include/mosquitto_plugin.h mosquitto_broker_internal.h
${CROSS_COMPILE}${CC} $(BROKER_CPPFLAGS) $(BROKER_CFLAGS) -c $< -o $@
plugin_acl_check.o : plugin_acl_check.c ../include/mosquitto_plugin.h mosquitto_broker_internal.h
${CROSS_COMPILE}${CC} $(BROKER_CPPFLAGS) $(BROKER_CFLAGS) -c $< -o $@
-48
View File
@@ -60,54 +60,6 @@ static int remove_callback(mosquitto_plugin_id_t *identifier, int event, struct
}
int plugin__load_v5(struct mosquitto__listener *listener, struct mosquitto__plugin *plugin, struct mosquitto_opt *options, int option_count, void *lib)
{
int rc;
mosquitto_plugin_id_t *pid;
if(!(plugin->plugin_init_v5 = (FUNC_plugin_init_v5)LIB_SYM(lib, "mosquitto_plugin_init"))){
log__printf(NULL, MOSQ_LOG_ERR,
"Error: Unable to load plugin function mosquitto_plugin_init().");
LIB_ERROR();
LIB_CLOSE(lib);
return MOSQ_ERR_UNKNOWN;
}
/* Optional function */
plugin->plugin_cleanup_v5 = (FUNC_plugin_cleanup_v5)LIB_SYM(lib, "mosquitto_plugin_cleanup");
pid = mosquitto__calloc(1, sizeof(mosquitto_plugin_id_t));
if(pid == NULL){
log__printf(NULL, MOSQ_LOG_ERR,
"Error: Out of memory.");
LIB_CLOSE(lib);
return MOSQ_ERR_NOMEM;
}
pid->listener = listener;
plugin->lib = lib;
plugin->user_data = NULL;
plugin->identifier = pid;
if(plugin->plugin_init_v5){
rc = plugin->plugin_init_v5(pid, &plugin->user_data, options, option_count);
if(rc){
log__printf(NULL, MOSQ_LOG_ERR,
"Error: Plugin returned %d when initialising.", rc);
return rc;
}
}
if(pid->plugin_name && pid->plugin_version){
log__printf(NULL, MOSQ_LOG_INFO,
"Plugin %s version %s loaded.", pid->plugin_name, pid->plugin_version);
}else if(pid->plugin_name){
log__printf(NULL, MOSQ_LOG_INFO,
"Plugin %s loaded.", pid->plugin_name);
}
return 0;
}
int mosquitto_callback_register(
mosquitto_plugin_id_t *identifier,
int event,
+72
View File
@@ -0,0 +1,72 @@
/*
Copyright (c) 2016-2021 Roger Light <roger@atchoo.org>
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
and Eclipse Distribution License v1.0 which accompany this distribution.
The Eclipse Public License is available at
https://www.eclipse.org/legal/epl-2.0/
and the Eclipse Distribution License is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
Contributors:
Roger Light - initial implementation and documentation.
*/
#include "config.h"
#include "mosquitto_broker_internal.h"
#include "memory_mosq.h"
#include "utlist.h"
#include "lib_load.h"
int plugin__load_v5(struct mosquitto__listener *listener, struct mosquitto__plugin *plugin, struct mosquitto_opt *options, int option_count, void *lib)
{
int rc;
mosquitto_plugin_id_t *pid;
if(!(plugin->plugin_init_v5 = (FUNC_plugin_init_v5)LIB_SYM(lib, "mosquitto_plugin_init"))){
log__printf(NULL, MOSQ_LOG_ERR,
"Error: Unable to load plugin function mosquitto_plugin_init().");
LIB_ERROR();
LIB_CLOSE(lib);
return MOSQ_ERR_UNKNOWN;
}
/* Optional function */
plugin->plugin_cleanup_v5 = (FUNC_plugin_cleanup_v5)LIB_SYM(lib, "mosquitto_plugin_cleanup");
pid = mosquitto__calloc(1, sizeof(mosquitto_plugin_id_t));
if(pid == NULL){
log__printf(NULL, MOSQ_LOG_ERR,
"Error: Out of memory.");
LIB_CLOSE(lib);
return MOSQ_ERR_NOMEM;
}
pid->listener = listener;
plugin->lib = lib;
plugin->user_data = NULL;
plugin->identifier = pid;
if(plugin->plugin_init_v5){
rc = plugin->plugin_init_v5(pid, &plugin->user_data, options, option_count);
if(rc){
log__printf(NULL, MOSQ_LOG_ERR,
"Error: Plugin returned %d when initialising.", rc);
return rc;
}
}
if(pid->plugin_name && pid->plugin_version){
log__printf(NULL, MOSQ_LOG_INFO,
"Plugin %s version %s loaded.", pid->plugin_name, pid->plugin_version);
}else if(pid->plugin_name){
log__printf(NULL, MOSQ_LOG_INFO,
"Plugin %s loaded.", pid->plugin_name);
}
return 0;
}