Пример #1
0
int muxia_init(char *in_addr, int port)
{
	journal_ftrace(__func__);
	
	int ret;

	/* 
	 * s_tk: current token
	 * a_tk: begin a token
	 * z_tk: end a token
	 */
	char *s_tk, *z_tk, *a_tk = in_addr;

	event_register(EVENT_EXIT, "muxia:muxia_fini()", muxia_fini, PRIO_AGNOSTIC);

	while ((s_tk = x_strtok(&a_tk, &z_tk, ','))) {

		ret = netbus_newserv(trim(s_tk), port,  NULL, NULL, muxia);
		if (ret < 0) {
			journal_notice("netbus_newserv failed :: %s:%i\n", __FILE__, __LINE__);
			return -1;
		}
	}
	
	return 0;
}
Пример #2
0
extern int hooklet_init(char *hooklet_list, const char *hooklet_path)
{
	hooklet_t *hk = NULL;
	char fullname[PATHLEN];
	/*
	 * s_tk: current token
	 * a_tk: begin a token
	 * z_tk: end a token
	 */
	char *s_tk, *z_tk, *a_tk = hooklet_list;

	if (hooklet_list == NULL) {
		jlog(L_NOTICE, "hooklet]> The hooklet list is empty. :: %s:%i", __FILE__, __LINE__);
		return -1;
	}

	if (hooklet_path == NULL) {
		jlog(L_NOTICE, "hooklet]> The hooklet path is empty. :: %s:%i", __FILE__, __LINE__);
		return -1;
	}

	while ((s_tk = x_strtok(&a_tk, &z_tk, ','))) {

		if (hk == NULL)
			hk = calloc(1, sizeof(hooklet_t));

		if (hk == NULL) {
			jlog(L_NOTICE, "hooklet]> calloc() %s :: %s:%i", strerror(errno), __FILE__, __LINE__);
			return -1;
		}

		hk->name = strdup(trim(s_tk));

		snprintf(fullname, PATHLEN, "%s/%s.so", hooklet_path, hk->name);
		jlog(L_DEBUG, "hooklet]> opening %s", fullname);

		hk->handle = dlopen(fullname, RTLD_GLOBAL|RTLD_NOW);

		if (hk->handle == NULL) {
			jlog(L_NOTICE, "hooklet]> Can't load `%s` from `%s`, dlopen() : %s :: %s:%i", \
					hk->name, fullname, dlerror(), __FILE__, __LINE__);
			continue;
		}

		hk->hookin = dlsym(hk->handle, "hookin");
		if (hk->hookin == NULL) {
			jlog(L_NOTICE, "hooklet]> `%s` failed to return any hookin callback. %s :: %s:%i", \
					hk->name, dlerror(), __FILE__, __LINE__);

			continue;
		}

		hooklets[hk->hookin()] = hk;
		hk = NULL;
	}

	if (hk != NULL) {

		free(hk->name);
		free(hk);
	}

	return 0;
}