コード例 #1
0
ファイル: framework.c プロジェクト: cloudcache/tsar
/* 
 * load module from dir 
 */
void load_modules()
{
    char	buff[LEN_128] = {0};
    char	mod_path[LEN_128] = {0};
    struct	module *mod = NULL;
    int	(*mod_register)(struct module *);
    int	i;

    /* get the full path of modules */
    sprintf(buff, "/usr/local/tsar/modules");

    for (i = 0; i < statis.total_mod_num; i++) {
        mod = &mods[i];
        if (!mod->lib) {
            memset(mod_path, '\0', LEN_128);
            snprintf(mod_path, LEN_128, "%s/%s.so", buff, mod->name);
            if (!(mod->lib = dlopen(mod_path, RTLD_NOW|RTLD_GLOBAL))) {
                do_debug(LOG_ERR, "load_modules: dlopen module %s err %s\n", mod->name, dlerror());
            }
            else {
                mod_register = dlsym(mod->lib, "mod_register");
                if (dlerror()) {
                    do_debug(LOG_ERR, "load_modules: dlsym module %s err %s\n", mod->name, dlerror());
                    break;
                }
                else {
                    mod_register(mod);
                    mod->enable = 1;
                    mod->spec = 0;
                    do_debug(LOG_INFO, "load_modules: load new module '%s' to mods\n", mod_path);
                }
            }
        }
    }
}
コード例 #2
0
ファイル: mod_applocate.c プロジェクト: wsngw/gateway
/**
 * @brief Initialize this module.
 *
 * Call this function when loading this module.
 *
 * @param gw	pointer to gateway context
 * @param lib	pointer to dynamic library generated by this module
 *
 * @return TRUE on success, FALSE on failure
 */
bool_t init(gw_t *gw, gw_dlib_t lib)
{
	bool_t ret = TRUE;
	gw_thread_t net_handle_thread = NULL;

	/* initialize module data */
	memset(&applocate_conf, 0, sizeof(applocate_conf));
	applocate_conf.plat_ip = bfromcstr(serv_ip);
	applocate_conf.serv_port = SERV_PORT;
	applocate_conf.client_port = CLIENT_PORT;
	memset(&applocate_stats, 0, sizeof(applocate_stats));
	memset(&applocate_data, 0, sizeof(applocate_data));
	applocate_data.config = (void *)&applocate_conf;
	applocate_data.stats = (void *)&applocate_stats;

	/* read config infromation */
	//load_config("/etc/gw/modules/applocate.conf");

	/* initialize module structure */
	memset(&mod_applocate, 0, sizeof(mod_applocate));
	mod_applocate.name = "mod_applocate";
	mod_applocate.desc = "mod locate application";
	mod_applocate.vendor = "WSN";
	mod_applocate.modver.major = 1;
	mod_applocate.modver.minor = 0;
	mod_applocate.sysver.major = 1;
	mod_applocate.sysver.minor = 0;
	mod_applocate.init = init;
	mod_applocate.cleanup = cleanup;
	mod_applocate.serialize = serialize;
	mod_applocate.lib = lib;
	mod_applocate.data = &applocate_data;
	mod_applocate.lock = gw_mutex_create();
	INIT_LIST_HEAD(&mod_applocate.services);

	applocate_msgq = gw_msgq_create();
	memset(&applocate_svc, 0, sizeof(applocate_svc));
	applocate_svc.id = GW_LOCATE_APP;
	applocate_svc.name = "applocate_service";
	applocate_svc.mod = &mod_applocate;
	applocate_svc.mq = applocate_msgq;

	//TODO: initialize another stuff
	if (mod_applocate.lock != NULL)
	{
		ret = mod_register(gw, &mod_applocate);
		if (ret)
		{
			ret = mod_register_service(gw, &mod_applocate, &applocate_svc);
			if (ret != TRUE)
			{
				mod_unregister(gw, &mod_applocate);
				gw_mutex_destroy(mod_applocate.lock);
				gw_log_print(GW_LOG_LEVEL_ERROR, "module %s initialization failed\n", mod_applocate.name);
			}
			else
			{
				gw_log_print(GW_LOG_LEVEL_INFO, "module %s initialized\n", mod_applocate.name);
			}
		}
	}

	msg_handle_thread = gw_thread_create(applocate_msg_handler, (void *)gw);
	net_handle_thread = gw_thread_create(applocate_net_handler, (void *)gw);
	if(net_handle_thread == NULL)
	{
		gw_log_print(GW_LOG_LEVEL_WARNING, "Thread create error!\n");
		ret = FALSE;
	}
	else
	{
		gw_thread_close(net_handle_thread);
	}
	return ret;
}
コード例 #3
0
ファイル: mod_devmanage.c プロジェクト: wsngw/gateway
bool_t init(gw_t *gw, gw_dlib_t lib)
{
	bool_t ret = TRUE;

	/* initialize module data */
	memset(&devman_data, 0, sizeof(devman_data));
	memset(&devman_conf, 0, sizeof(devman_conf));
	memset(&devman_stats, 0, sizeof(devman_stats));

	/* read config infromation */
	//devman_config("/home/makui/projects/gw/i386-linux-gcc-debug-mod-skeleton/devman.conf");

	devman_data.config = &devman_conf;
	devman_data.stats = &devman_stats;
	/* initialize module structure */
	memset(&mod_devman, 0, sizeof(mod_devman));
	mod_devman.name = "mod_devmanage";
	mod_devman.desc = "mod device management";
	mod_devman.vendor = "WSN";
	mod_devman.modver.major = 1;
	mod_devman.modver.minor = 0;
	mod_devman.sysver.major = 1;
	mod_devman.sysver.minor = 0;
	mod_devman.init = init;
	mod_devman.cleanup = cleanup;
	mod_devman.serialize = serialize;
	mod_devman.lib = lib;
	mod_devman.data = &devman_data;
	mod_devman.lock = gw_mutex_create();
	INIT_LIST_HEAD(&mod_devman.services);

	devman_msgq = gw_msgq_create();
	memset(&devman_svc, 0, sizeof(devman_svc));
	devman_svc.id = DEV_MAN_SVC;
	devman_svc.name = "devman_service";
	devman_svc.mod = &mod_devman;
	devman_svc.mq = devman_msgq;

	devman_thread = gw_thread_create(devman_svc_handler, (void *) gw);

	//TODO: initialize another stuff
	if (mod_devman.lock != NULL)
	{
		ret = mod_register(gw, &mod_devman);
		if (ret)
		{
			ret = mod_register_service(gw, &mod_devman, &devman_svc);
			if (ret != TRUE)
			{
				mod_unregister(gw, &mod_devman);
				gw_mutex_destroy(mod_devman.lock);
				gw_log_print(GW_LOG_LEVEL_ERROR, "module %s initialization failed\n", mod_devman.name);
			}
			else
			{
				gw_log_print(GW_LOG_LEVEL_INFO, "module %s initialized\n", mod_devman.name);
			}
		}
	}

	return ret;
}
コード例 #4
0
ファイル: init.c プロジェクト: Nwazette/Zappy
void	init_(void)
{
  mod_register(get_module());
}