Esempio n. 1
0
void lua_sr_kemi_register_modules(lua_State *L)
{
	int n;
	int i;
	sr_kemi_module_t *kmods;

	n = sr_kemi_modules_size_get();
	kmods = sr_kemi_modules_get();

	for(i=1; i<n; i++) {
		lua_sr_kemi_register_module(L, &kmods[i].mname, i);
	}
}
Esempio n. 2
0
SQInteger sqlang_open_KSR(HSQUIRRELVM J)
{
	SQRegFunction *_sr_crt_J_KSRMethods = NULL;
	sr_kemi_module_t *emods = NULL;
	int emods_size = 0;
	int i;
	int k;
	int n;
	char mname[128];
	char malias[256];

	_sr_J_KSRMethods = malloc(SR_SQLANG_KSR_METHODS_SIZE * sizeof(SQRegFunction));
	if(_sr_J_KSRMethods==NULL) {
		LM_ERR("no more pkg memory\n");
		return 0;
	}
	memset(_sr_J_KSRMethods, 0, SR_SQLANG_KSR_METHODS_SIZE * sizeof(SQRegFunction));

	emods_size = sr_kemi_modules_size_get();
	emods = sr_kemi_modules_get();

	n = 0;
	_sr_crt_J_KSRMethods = _sr_J_KSRMethods;
	if(emods_size==0 || emods[0].kexp==NULL) {
		LM_ERR("no kemi exports registered\n");
		return 0;
	}

	sq_pushroottable(J); /* stack[1] */
	sq_pushstring(J, "KSR", -1);  /* stack[2] */
	sq_newtable(J);  /* stack[3] */

	for(i=0; emods[0].kexp[i].func!=NULL; i++) {
		LM_DBG("exporting KSR.%s(...)\n", emods[0].kexp[i].fname.s);
		_sr_crt_J_KSRMethods[i].name = emods[0].kexp[i].fname.s;
		_sr_crt_J_KSRMethods[i].f =
			sr_kemi_sqlang_export_associate(&emods[0].kexp[i]);
		if(_sr_crt_J_KSRMethods[i].f == NULL) {
			LM_ERR("failed to associate kemi function with sqlang export\n");
			free(_sr_J_KSRMethods);
			_sr_J_KSRMethods = NULL;
			goto error;
		}
		_sr_crt_J_KSRMethods[i].nparamscheck = 0;
		snprintf(malias, 254, "%s", emods[0].kexp[i].fname.s);
		sqlang_register_global_func(J, _sr_crt_J_KSRMethods[i].f, malias);
		n++;
	}

	/* special modules - pv.get(...) can return int or str */
	sq_pushstring(J, "pv", -1);  /* stack[4] */
	sq_newtable(J);  /* stack[5] */
	i=0;
	while(_sr_kemi_pv_J_Map[i].name!=0) {
		snprintf(malias, 254, "%s", _sr_kemi_pv_J_Map[i].name);
		sqlang_register_global_func(J, _sr_kemi_pv_J_Map[i].f, malias);
		i++;
	}
    sq_newslot(J, -3, SQFalse);
	sq_pushstring(J, "x", -1);  /* stack[4] */
	sq_newtable(J);  /* stack[5] */
	i=0;
	while(_sr_kemi_x_J_Map[i].name!=0) {
		snprintf(malias, 254, "%s", _sr_kemi_x_J_Map[i].name);
		sqlang_register_global_func(J, _sr_kemi_x_J_Map[i].f, malias);
		i++;
	}
    sq_newslot(J, -3, SQFalse);

	/* registered kemi modules */
	if(emods_size>1) {
		for(k=1; k<emods_size; k++) {
			n++;
			_sr_crt_J_KSRMethods = _sr_J_KSRMethods + n;
			snprintf(mname, 128, "%s", emods[k].kexp[0].mname.s);
			sq_pushstring(J, mname, -1);  /* stack[4] */
			sq_newtable(J);  /* stack[5] */
			for(i=0; emods[k].kexp[i].func!=NULL; i++) {
				LM_DBG("exporting %s.%s(...)\n", mname,
						emods[k].kexp[i].fname.s);
				_sr_crt_J_KSRMethods[i].name = emods[k].kexp[i].fname.s;
				_sr_crt_J_KSRMethods[i].f =
					sr_kemi_sqlang_export_associate(&emods[k].kexp[i]);
				if(_sr_crt_J_KSRMethods[i].f == NULL) {
					LM_ERR("failed to associate kemi function with func export\n");
					free(_sr_J_KSRMethods);
					_sr_J_KSRMethods = NULL;
					goto error;
				}
				_sr_crt_J_KSRMethods[i].nparamscheck = 0;
				snprintf(malias, 256, "%s", _sr_crt_J_KSRMethods[i].name);
				sqlang_register_global_func(J, _sr_crt_J_KSRMethods[i].f, malias);
				n++;
			}
			sq_newslot(J, -3, SQFalse);

			LM_DBG("initializing kemi sub-module: %s (%s)\n", mname,
					emods[k].kexp[0].mname.s);
		}
	}
    sq_newslot(J, -3, SQFalse);
    sq_pop(J ,1); /* pops the root table */
	LM_DBG("module 'KSR' has been initialized\n");
	return 1;
error:
    sq_pop(J ,1); /* pops the root table */
	return 0;
}
Esempio n. 3
0
void lua_sr_kemi_register_libs(lua_State *L)
{
	luaL_Reg *_sr_crt_KSRMethods = NULL;
	sr_kemi_module_t *emods = NULL;
	int emods_size = 0;
	int i;
	int k;
	int n;
	char mname[128];

#if 0
	/* dynamic lookup on function name */
	lua_sr_kemi_register_core(L);
	lua_sr_kemi_register_modules(L);
#endif

	_sr_KSRMethods = malloc(SR_LUA_KSR_METHODS_SIZE * sizeof(luaL_Reg));
	if(_sr_KSRMethods==NULL) {
		LM_ERR("no more pkg memory\n");
		return;
	}
	memset(_sr_KSRMethods, 0, SR_LUA_KSR_METHODS_SIZE * sizeof(luaL_Reg));

	emods_size = sr_kemi_modules_size_get();
	emods = sr_kemi_modules_get();

	n = 0;
	_sr_crt_KSRMethods = _sr_KSRMethods;
	if(emods_size==0 || emods[0].kexp==NULL) {
		LM_ERR("no kemi exports registered\n");
		return;
	}

	for(i=0; emods[0].kexp[i].func!=NULL; i++) {
		LM_DBG("exporting KSR.%s(...)\n", emods[0].kexp[i].fname.s);
		_sr_crt_KSRMethods[i].name = emods[0].kexp[i].fname.s;
		_sr_crt_KSRMethods[i].func =
			sr_kemi_lua_export_associate(&emods[0].kexp[i]);
		if(_sr_crt_KSRMethods[i].func == NULL) {
			LM_ERR("failed to associate kemi function with lua export\n");
			free(_sr_KSRMethods);
			_sr_KSRMethods = NULL;
			return;
		}
		n++;
	}

	luaL_openlib(L, "KSR", _sr_crt_KSRMethods, 0);

	/* special modules - pv.get(...) can return int or str */
	luaL_openlib(L, "KSR.pv", _sr_pv_Map,     0);
	luaL_openlib(L, "KSR.x",  _sr_kemi_x_Map, 0);

	/* registered kemi modules */
	if(emods_size>1) {
		for(k=1; k<emods_size; k++) {
			n++;
			_sr_crt_KSRMethods += n;
			snprintf(mname, 128, "KSR.%s", emods[k].kexp[0].mname.s);
			for(i=0; emods[k].kexp[i].func!=NULL; i++) {
				LM_DBG("exporting %s.%s(...)\n", mname,
						emods[k].kexp[i].fname.s);
				_sr_crt_KSRMethods[i].name = emods[k].kexp[i].fname.s;
				_sr_crt_KSRMethods[i].func =
					sr_kemi_lua_export_associate(&emods[k].kexp[i]);
				if(_sr_crt_KSRMethods[i].func == NULL) {
					LM_ERR("failed to associate kemi function with func export\n");
					free(_sr_KSRMethods);
					_sr_KSRMethods = NULL;
					return;
				}
				n++;
			}
			luaL_openlib(L, mname, _sr_crt_KSRMethods, 0);
			LM_DBG("initializing kemi sub-module: %s (%s)\n", mname,
					emods[k].kexp[0].mname.s);
		}
	}
	LM_DBG("module 'KSR' has been initialized\n");
}