コード例 #1
0
ファイル: mod_accesslog.c プロジェクト: Sciumo/lighttpd2
LI_API gboolean mod_accesslog_free(liModules *mods, liModule *mod) {
	UNUSED(mods); UNUSED(mod);

	if (mod->config)
		li_plugin_free(mods->main, mod->config);

	return TRUE;
}
コード例 #2
0
ファイル: angel_plugin.c プロジェクト: AlexShiLucky/lighttpd2
static void _server_module_release(gpointer d) {
	server_module *sm = d;
	guint i;

	g_assert(sm->refcount > 0);
	if (0 != --sm->refcount) return;

	for (i = sm->plugins->len; i-- > 0; ) {
		liPlugin *p = g_ptr_array_index(sm->plugins, i);
		li_plugin_free(sm->srv, p);
	}
	g_ptr_array_free(sm->plugins, TRUE);
	if (sm->mod) li_module_release(sm->srv->plugins.modules, sm->mod);
	g_free(sm->name);
	g_slice_free(server_module, sm);
}
コード例 #3
0
ファイル: angel_plugin.c プロジェクト: AlexShiLucky/lighttpd2
liPlugin *li_angel_plugin_register(liServer *srv, liModule *mod, const gchar *name, liPluginInitCB init) {
	liPlugins *ps = &srv->plugins;
	server_module *sm;
	liPlugin *p;
	const gchar* modname = mod ? mod->name->str : "core";

	sm = g_hash_table_lookup(ps->load_module_refs, modname);
	if (!sm) {
		ERROR(srv, "Module '%s' not loaded; cannot load plugin '%s'", modname, name);
		return NULL;
	}

	p = plugin_new(name);
	if (!init(srv, p)) {
		ERROR(srv, "Couldn't load plugin '%s' for module '%s': init failed", name, modname);
		li_plugin_free(srv, p);
		return NULL;
	}

	g_ptr_array_add(sm->plugins, p);

	return p;
}
コード例 #4
0
ファイル: mod_expire.c プロジェクト: AlexShiLucky/lighttpd2
gboolean mod_expire_free(liModules *mods, liModule *mod) {
	if (mod->config)
		li_plugin_free(mods->main, mod->config);

	return TRUE;
}
コード例 #5
0
ファイル: plugin.c プロジェクト: AlexShiLucky/lighttpd2
liPlugin *li_plugin_register(liServer *srv, const gchar *name, liPluginInitCB init, gpointer userdata) {
	liPlugin *p;
	liServerState s;

	if (!init) {
		ERROR(srv, "Plugin '%s' needs an init function", name);
		return NULL;
	}

	s = g_atomic_int_get(&srv->state);
	if (LI_SERVER_INIT != s) {
		ERROR(srv, "Cannot register plugin '%s' after server was started", name);
		return NULL;
	}

	if (g_hash_table_lookup(srv->plugins, name)) {
		ERROR(srv, "Plugin '%s' already registered", name);
		return NULL;
	}

	p = plugin_new(name);
	p->id = g_hash_table_size(srv->plugins);
	g_hash_table_insert(srv->plugins, (gchar*) p->name, p);

	init(srv, p, userdata);
	p->opt_base_index = g_hash_table_size(srv->options);
	p->optptr_base_index = g_hash_table_size(srv->optionptrs);

	if (p->options) {
		size_t i;
		liServerOption *so;
		const liPluginOption *po;

		for (i = 0; (po = &p->options[i])->name; i++) {
			if (!check_name_free(srv, p, po->name, TRUE, TRUE)) goto fail;
			so = g_slice_new0(liServerOption);
			so->type = po->type;
			so->parse_option = po->parse_option;
			so->index = g_hash_table_size(srv->options);
			so->module_index = i;
			so->p = p;
			so->default_value = po->default_value;
			g_hash_table_insert(srv->options, (gchar*) po->name, so);
			plugin_load_default_option(srv, so, po->name);
		}
	}

	if (p->optionptrs) {
		size_t i;
		liServerOptionPtr *so;
		const liPluginOptionPtr *po;

		for (i = 0; (po = &p->optionptrs[i])->name; i++) {
			if (!check_name_free(srv, p, po->name, TRUE, TRUE)) goto fail;
			so = g_slice_new0(liServerOptionPtr);
			so->type = po->type;
			so->parse_option = po->parse_option;
			so->free_option = po->free_option;
			so->index = g_hash_table_size(srv->optionptrs);
			so->module_index = i;
			so->p = p;
			so->default_value = po->default_value;
			g_hash_table_insert(srv->optionptrs, (gchar*) po->name, so);
			plugin_load_default_optionptr(srv, so, po->name);
		}
	}

	if (p->actions) {
		size_t i;
		liServerAction *sa;
		const liPluginAction *pa;

		for (i = 0; (pa = &p->actions[i])->name; i++) {
			if (!check_name_free(srv, p, pa->name, FALSE, TRUE)) goto fail;
			sa = g_slice_new0(liServerAction);
			sa->create_action = pa->create_action;
			sa->p = p;
			sa->userdata = pa->userdata;
			g_hash_table_insert(srv->actions, (gchar*) pa->name, sa);
		}
	}

	if (p->setups) {
		size_t i;
		liServerSetup *ss;
		const liPluginSetup *ps;

		for (i = 0; (ps = &p->setups[i])->name; i++) {
			if (!check_name_free(srv, p, ps->name, TRUE, FALSE)) goto fail;
			ss = g_slice_new0(liServerSetup);
			ss->setup = ps->setup;
			ss->p = p;
			ss->userdata = ps->userdata;
			g_hash_table_insert(srv->setups, (gchar*) ps->name, ss);
		}
	}

	return p;

fail:
	li_plugin_free(srv, p);
	return NULL;
}
コード例 #6
0
gboolean mod_cache_disk_etag_free(liModules *mods, liModule *mod) {
	if (mod->config)
		li_plugin_free(mods->main, mod->config);

	return TRUE;
}