diff --git a/Makefile.am b/Makefile.am index 4ecabf2..3e6c22c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,15 +3,16 @@ AUTOMAKE_OPTIONS = foreign # check for system -if LINUX - AM_CPPFLAGS = -Wl,--no-as-needed -else - AM_CPPFLAGS = -Wl,-undefined,dynamic_lookup -endif +#if LINUX +# AM_CPPFLAGS = -Wl,--no-as-needed +#else +# AM_CPPFLAGS = -Wl,-undefined,dynamic_lookup +#endif -AM_CPPFLAGS += -W -Wall -g -std=c99 -DCONFIG_FILE=\"$(sysconfdir)/antd-config.ini\" +AM_CPPFLAGS = -W -Wall -g -std=c99 -DCONFIG_FILE=\"$(sysconfdir)/antd-config.ini\" +# dynamic library lib_LTLIBRARIES = libantd.la libantd_la_SOURCES = lib/ini.c \ lib/handle.c \ @@ -21,8 +22,8 @@ libantd_la_SOURCES = lib/ini.c \ lib/ws.c \ lib/sha1.c \ lib/list.c \ - lib/scheduler.c\ - lib/plugin.c + lib/scheduler.c + pkginclude_HEADERS = lib/ini.h \ lib/handle.h \ lib/dictionary.h \ @@ -34,6 +35,7 @@ pkginclude_HEADERS = lib/ini.h \ lib/scheduler.h \ lib/plugin.h + EXTRA_DIST = plugin_manager.h http_server.h README.md LICENSE antd-config.ini # check for db if DB diff --git a/lib/plugin.h b/lib/plugin.h index 1b0d8c6..eb5acc7 100644 --- a/lib/plugin.h +++ b/lib/plugin.h @@ -25,9 +25,103 @@ char* htdocs(const char*); char* config_dir(); /*Default function for plugin*/ // init the plugin -void __attribute__((weak)) init(); -void __attribute__((weak)) destroy(); +void init(); +void destroy(); void* handle(void*); plugin_header_t* meta(); void use_raw_body(); + +/* +STATIC PART, should be included in any plugin +*/ +static plugin_header_t __plugin__; +// private function +void __init_plugin__(const char* pl,config_t* conf){ + __plugin__.name = strdup(pl); + __plugin__.dbpath= strdup(conf->db_path); + __plugin__.htdocs = strdup(conf->htdocs); + __plugin__.pdir = strdup(conf->plugins_dir); + __plugin__.sport = conf->port; +#ifdef USE_OPENSSL + __plugin__.usessl = conf->usessl; +#endif + __plugin__.raw_body = 0; + init(); +}; +void use_raw_body() +{ + __plugin__.raw_body = 1; +} +#ifdef USE_DB +sqldb __getdb(char *name) +{ + int plen = strlen(name)+strlen(__plugin__.dbpath)+4; + char* path = (char*) malloc(plen*sizeof(char)); + strcpy(path,__plugin__.dbpath); + strcat(path,name); + strcat(path,".db"); + //LOG("database: %s\n", path); + sqldb ret = (sqldb)database(path); + free(path); + return ret; +} +sqldb getdb() +{ + return __getdb(__plugin__.name); +} +#endif + +/*#ifdef USE_OPENSSL +int usessl() + { + LOG("CALLED from plugin \n"); + return __plugin__.usessl; + } + #endif*/ +plugin_header_t* meta() +{ + return &__plugin__; +} +char* route(const char* repath) +{ + int len = strlen(__plugin__.name) + 2; + if(repath != NULL) + len += strlen(repath)+1; + char * path = (char*) malloc(len*sizeof(char)); + strcpy(path,"/"); + strcat(path,__plugin__.name); + if(repath != NULL) + { + strcat(path,"/"); + strcat(path,repath); + } + return path; +} + +char* htdocs(const char* repath) +{ + if(repath != NULL) + return __s("%s/%s",__plugin__.htdocs,repath); + else + return __s("%s",__plugin__.htdocs); +} + +char* config_dir() +{ + struct stat st; + char* path = __s("%s%s%s", __plugin__.pdir,DIR_SEP, __plugin__.name); + if (stat(path, &st) == -1) + mkdir(path, 0755); + return path; +} + +void __release__() +{ + destroy(); + LOG("Releasing plugin\n"); + if(__plugin__.name) free(__plugin__.name); + if(__plugin__.dbpath) free(__plugin__.dbpath); + if(__plugin__.htdocs) free(__plugin__.htdocs); + if(__plugin__.pdir) free(__plugin__.pdir); +} #endif