From a8233d97936eeed545ea763c0ace1eb4f87219f9 Mon Sep 17 00:00:00 2001 From: cbdev Date: Sun, 26 May 2019 16:02:29 +0200 Subject: Basic plugin loading --- plugin.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 plugin.c (limited to 'plugin.c') diff --git a/plugin.c b/plugin.c new file mode 100644 index 0000000..8b61ec3 --- /dev/null +++ b/plugin.c @@ -0,0 +1,77 @@ +#include +#include + +#include "websocksy.h" +#include "plugin.h" + +static size_t framing_functions = 0; +static ws_framing* framing_function = NULL; +static char** framing_function_name = NULL; + +int plugin_framing_load(char* path){ + //TODO load plugins + return 1; +} + +int plugin_backend_load(char* backend_requested, ws_backend* backend){ + //TODO load backend + return 1; +} + +int plugin_register_framing(char* name, ws_framing func){ + size_t u; + + for(u = 0; u < framing_functions; u++){ + if(!strcmp(framing_function_name[u], name)){ + fprintf(stderr, "Replacing framing %s\n", name); + break; + } + } + + if(u == framing_functions){ + framing_function = realloc(framing_function, (framing_functions + 1) * sizeof(ws_framing)); + framing_function_name = realloc(framing_function_name, (framing_functions + 1) * sizeof(char*)); + if(!framing_function || !framing_function_name){ + fprintf(stderr, "Failed to allocate memory for framing function\n"); + return 1; + } + + framing_function_name[u] = strdup(name); + framing_functions++; + } + + framing_function[u] = func; + return 0; +} + +ws_framing plugin_framing(char* name){ + size_t u; + + if(!name){ + return plugin_framing("auto"); + } + + for(u = 0; u < framing_functions; u++){ + if(!strcmp(framing_function_name[u], name)){ + return framing_function[u]; + } + } + + //if unknown framing, return the default + return plugin_framing("auto"); +} + +void plugin_cleanup(){ + size_t u; + //TODO dlclose all plugins + + for(u = 0; u < framing_functions; u++){ + free(framing_function_name[u]); + } + free(framing_function); + framing_function = NULL; + free(framing_function_name); + framing_function_name = 0; + framing_function = NULL; + framing_functions = 0; +} -- cgit v1.2.3