/** * This function zero-es out all the blocks allocated for plugins and * NULL-s the plugin_list pointer. */ void proxenet_free_all_plugins() { plugin_t *p = plugins_list; plugin_t *next; while (p != NULL) { next = p->next; proxenet_free_plugin(p); p = next; } plugins_list = NULL; #ifdef DEBUG xlog(LOG_DEBUG, "%s\n", "Plugins list is free-ed"); #endif return; }
void proxenet_initialize_plugins() { plugin_t *plugin = plugins_list; plugin_t *prec_plugin = NULL; plugin_t *next_plugin = NULL; while(plugin) { /* plugin already loaded, move on */ if(plugin->state == ACTIVE){ plugin = plugin->next; continue; } switch (plugin->type) { #ifdef _PYTHON_PLUGIN case _PYTHON_: if (!proxenet_python_initialize_vm(plugin) && !proxenet_python_load_file(plugin)) proxenet_plugin_set_state(plugin, ACTIVE); break; #endif #ifdef _C_PLUGIN case _C_: if (!proxenet_c_initialize_vm(plugin) && !proxenet_c_load_file(plugin)) proxenet_plugin_set_state(plugin, ACTIVE); break; #endif #ifdef _RUBY_PLUGIN case _RUBY_: if (!proxenet_ruby_initialize_vm(plugin) && !proxenet_ruby_load_file(plugin)) proxenet_plugin_set_state(plugin, ACTIVE); break; #endif #ifdef _PERL_PLUGIN case _PERL_: if (!proxenet_perl_initialize_vm(plugin) && !proxenet_perl_load_file(plugin)) proxenet_plugin_set_state(plugin, ACTIVE); break; #endif #ifdef _LUA_PLUGIN case _LUA_: if (!proxenet_lua_initialize_vm(plugin) && !proxenet_lua_load_file(plugin)) proxenet_plugin_set_state(plugin, ACTIVE); break; #endif #ifdef _TCL_PLUGIN case _TCL_: if (!proxenet_tcl_initialize_vm(plugin) && !proxenet_tcl_load_file(plugin)) proxenet_plugin_set_state(plugin, ACTIVE); break; #endif #ifdef _JAVA_PLUGIN case _JAVA_: if (!proxenet_java_initialize_vm(plugin) && !proxenet_java_load_file(plugin)) proxenet_plugin_set_state(plugin, ACTIVE); break; #endif default: break; } if (plugin->state == ACTIVE){ if (cfg->verbose > 1) xlog(LOG_INFO, "Successfully initialized '%s'\n", plugin->filename); prec_plugin = plugin; plugin = plugin->next; continue; } proxenet_plugin_set_state(plugin, INACTIVE); if(prec_plugin) prec_plugin->next = plugin->next; else plugins_list = plugin->next; if (cfg->verbose > 1) xlog(LOG_ERROR, "Removing '%s' from plugin list\n", plugin->filename); next_plugin = plugin->next; proxenet_free_plugin(plugin); plugin = next_plugin; } }