From d33c8039818d35763a12c7fecb17a3bc708f65dd Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Wed, 10 Nov 2021 16:42:08 +0000 Subject: [PATCH] Move v5 plugin load to own file. --- src/CMakeLists.txt | 2 +- src/Makefile | 8 +++- src/{plugin.c => plugin_callbacks.c} | 48 ------------------- src/plugin_v5.c | 72 ++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 51 deletions(-) rename src/{plugin.c => plugin_callbacks.c} (85%) create mode 100644 src/plugin_v5.c diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8285af50..b5e1a79c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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 diff --git a/src/Makefile b/src/Makefile index 30b33b0b..8166d1c5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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 $@ diff --git a/src/plugin.c b/src/plugin_callbacks.c similarity index 85% rename from src/plugin.c rename to src/plugin_callbacks.c index 5c24ee4c..337fcaca 100644 --- a/src/plugin.c +++ b/src/plugin_callbacks.c @@ -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, diff --git a/src/plugin_v5.c b/src/plugin_v5.c new file mode 100644 index 00000000..7e7dbbec --- /dev/null +++ b/src/plugin_v5.c @@ -0,0 +1,72 @@ +/* +Copyright (c) 2016-2021 Roger Light + +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; +}