瀏覽代碼

app_ruby: removed local implementation for KSR.pv sub-module

- switch to use the one from core
Daniel-Constantin Mierla 6 年之前
父節點
當前提交
fa0107dca5
共有 1 個文件被更改,包括 79 次插入354 次删除
  1. 79 354
      src/modules/app_ruby/app_ruby_api.c

+ 79 - 354
src/modules/app_ruby/app_ruby_api.c

@@ -245,333 +245,6 @@ int sr_kemi_ruby_return_int(sr_kemi_t *ket, int rc)
 	return Qfalse;
 	return Qfalse;
 }
 }
 
 
-/**
- *
- */
-static VALUE sr_kemi_ruby_return_none(int rmode)
-{
-	if(rmode==1) {
-		return rb_str_new_cstr("<<null>>");
-	} else if(rmode==2) {
-		return rb_str_new_cstr("");
-	}
-	return Qnil;
-}
-
-/**
- *
- */
-static VALUE app_ruby_pv_get_mode(int argc, VALUE* argv, VALUE self, int rmode)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	sr_ruby_env_t *env_R;
-	int pl;
-
-	env_R = app_ruby_sr_env_get();
-
-	if(env_R==NULL || env_R->msg==NULL || argc!=1) {
-		LM_ERR("invalid ruby environment attributes or parameters\n");
-		return sr_kemi_ruby_return_none(rmode);
-	}
-
-	if(!RB_TYPE_P(argv[0], T_STRING)) {
-		LM_ERR("invalid parameter type\n");
-		return sr_kemi_ruby_return_none(rmode);
-	}
-
-	pvn.s = StringValuePtr(argv[0]);
-	if(pvn.s==NULL)
-		return sr_kemi_ruby_return_none(rmode);
-	pvn.len = strlen(pvn.s);
-
-	LM_DBG("pv get: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return sr_kemi_ruby_return_none(rmode);
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return sr_kemi_ruby_return_none(rmode);
-	}
-	memset(&val, 0, sizeof(pv_value_t));
-	if(pv_get_spec_value(env_R->msg, pvs, &val) != 0) {
-		LM_ERR("unable to get pv value for [%s]\n", pvn.s);
-		return sr_kemi_ruby_return_none(rmode);
-	}
-	if(val.flags&PV_VAL_NULL) {
-		return sr_kemi_ruby_return_none(rmode);
-	}
-	if(val.flags&PV_TYPE_INT) {
-		return INT2NUM(val.ri);
-	}
-	return rb_str_new(val.rs.s, val.rs.len);
-}
-
-/**
- *
- */
-static VALUE app_ruby_pv_get(int argc, VALUE* argv, VALUE self)
-{
-	return app_ruby_pv_get_mode(argc, argv, self, 0);
-}
-
-/**
- *
- */
-static VALUE app_ruby_pv_getw(int argc, VALUE* argv, VALUE self)
-{
-	return app_ruby_pv_get_mode(argc, argv, self, 1);
-}
-
-/**
- *
- */
-static VALUE app_ruby_pv_gete(int argc, VALUE* argv, VALUE self)
-{
-	return app_ruby_pv_get_mode(argc, argv, self, 2);
-}
-
-/**
- *
- */
-static VALUE app_ruby_pv_seti(int argc, VALUE* argv, VALUE self)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	sr_ruby_env_t *env_R;
-	int pl;
-
-	env_R = app_ruby_sr_env_get();
-
-	if(env_R==NULL || env_R->msg==NULL || argc!=2) {
-		LM_ERR("invalid ruby environment attributes or parameters\n");
-		return Qfalse;
-	}
-
-	if(!RB_TYPE_P(argv[0], T_STRING)) {
-		LM_ERR("invalid pv name parameter type\n");
-		return Qfalse;
-	}
-
-	if(!RB_TYPE_P(argv[1], T_FIXNUM)) {
-		LM_ERR("invalid pv val parameter type\n");
-		return Qfalse;
-	}
-
-	pvn.s = StringValuePtr(argv[0]);
-	if(pvn.s==NULL)
-		return Qfalse;
-	pvn.len = strlen(pvn.s);
-
-	LM_DBG("pv get: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return Qfalse;
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return Qfalse;
-	}
-
-	memset(&val, 0, sizeof(pv_value_t));
-	val.ri = NUM2INT(argv[1]);
-	val.flags |= PV_TYPE_INT|PV_VAL_INT;
-
-	if(pv_set_spec_value(env_R->msg, pvs, 0, &val)<0) {
-		LM_ERR("unable to set pv [%s]\n", pvn.s);
-		return Qfalse;
-	}
-
-	return Qtrue;
-}
-
-/**
- *
- */
-static VALUE app_ruby_pv_sets(int argc, VALUE* argv, VALUE self)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	sr_ruby_env_t *env_R;
-	int pl;
-
-	env_R = app_ruby_sr_env_get();
-
-	if(env_R==NULL || env_R->msg==NULL || argc!=2) {
-		LM_ERR("invalid ruby environment attributes or parameters\n");
-		return Qfalse;
-	}
-
-	if(!RB_TYPE_P(argv[0], T_STRING)) {
-		LM_ERR("invalid pv name parameter type\n");
-		return Qfalse;
-	}
-
-	if(!RB_TYPE_P(argv[1], T_STRING)) {
-		LM_ERR("invalid pv val parameter type\n");
-		return Qfalse;
-	}
-
-	pvn.s = StringValuePtr(argv[0]);
-	if(pvn.s==NULL)
-		return Qfalse;
-	pvn.len = strlen(pvn.s);
-
-	LM_DBG("pv get: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return Qfalse;
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return Qfalse;
-	}
-
-	memset(&val, 0, sizeof(pv_value_t));
-	val.rs.s = StringValuePtr(argv[1]);
-	if(val.rs.s==NULL) {
-		LM_ERR("invalid str value\n");
-		return Qfalse;
-	}
-	val.rs.len = strlen(val.rs.s);
-	val.flags |= PV_VAL_STR;
-
-	if(pv_set_spec_value(env_R->msg, pvs, 0, &val)<0) {
-		LM_ERR("unable to set pv [%s]\n", pvn.s);
-		return Qfalse;
-	}
-
-	return Qtrue;
-}
-
-/**
- *
- */
-static VALUE app_ruby_pv_unset(int argc, VALUE* argv, VALUE self)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	sr_ruby_env_t *env_R;
-	int pl;
-
-	env_R = app_ruby_sr_env_get();
-
-	if(env_R==NULL || env_R->msg==NULL || argc!=1) {
-		LM_ERR("invalid ruby environment attributes or parameters\n");
-		return Qfalse;
-	}
-
-	if(!RB_TYPE_P(argv[0], T_STRING)) {
-		LM_ERR("invalid parameter type\n");
-		return Qfalse;
-	}
-
-	pvn.s = StringValuePtr(argv[0]);
-	if(pvn.s==NULL)
-		return Qfalse;
-	pvn.len = strlen(pvn.s);
-
-	LM_DBG("pv get: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return Qfalse;
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return Qfalse;
-	}
-
-	memset(&val, 0, sizeof(pv_value_t));
-	val.flags |= PV_VAL_NULL;
-	if(pv_set_spec_value(env_R->msg, pvs, 0, &val)<0)
-	{
-		LM_ERR("unable to unset pv [%s]\n", pvn.s);
-		return Qfalse;
-	}
-
-	return Qtrue;
-}
-
-/**
- *
- */
-static VALUE app_ruby_pv_is_null(int argc, VALUE* argv, VALUE self)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	sr_ruby_env_t *env_R;
-	int pl;
-
-	env_R = app_ruby_sr_env_get();
-
-	if(env_R==NULL || env_R->msg==NULL || argc!=1) {
-		LM_ERR("invalid ruby environment attributes or parameters\n");
-		return Qfalse;
-	}
-
-	if(!RB_TYPE_P(argv[0], T_STRING)) {
-		LM_ERR("invalid parameter type\n");
-		return Qfalse;
-	}
-
-	pvn.s = StringValuePtr(argv[0]);
-	if(pvn.s==NULL)
-		return Qfalse;
-	pvn.len = strlen(pvn.s);
-
-	LM_DBG("pv get: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return Qfalse;
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return Qfalse;
-	}
-
-	memset(&val, 0, sizeof(pv_value_t));
-	if(pv_get_spec_value(env_R->msg, pvs, &val) != 0) {
-		LM_NOTICE("unable to get pv value for [%s]\n", pvn.s);
-		return Qtrue;
-	}
-	if(val.flags&PV_VAL_NULL) {
-		return Qtrue;
-	} else {
-		pv_value_destroy(&val);
-		return Qfalse;
-	}
-}
-
-/**
- *
- */
-static ksr_ruby_export_t _sr_kemi_pv_R_Map[] = {
-	{"PV", "get", app_ruby_pv_get},
-	{"PV", "getw", app_ruby_pv_getw},
-	{"PV", "gete", app_ruby_pv_gete},
-	{"PV", "seti", app_ruby_pv_seti},
-	{"PV", "sets", app_ruby_pv_sets},
-	{"PV", "unset", app_ruby_pv_unset},
-	{"PV", "is_null", app_ruby_pv_is_null},
-	{0, 0, 0}
-};
-
 /**
 /**
  *
  *
  */
  */
@@ -744,6 +417,35 @@ static VALUE ksr_ruby_exec_callback(VALUE ptr)
 	return rb_funcall2(data->robj, data->metid, data->nargs, data->vargs);
 	return rb_funcall2(data->robj, data->metid, data->nargs, data->vargs);
 }
 }
 
 
+/**
+ *
+ */
+VALUE sr_kemi_ruby_return_xval(sr_kemi_t *ket, sr_kemi_xval_t *rx)
+{
+	switch(rx->vtype) {
+		case SR_KEMIP_NONE:
+			return Qnil;
+		case SR_KEMIP_INT:
+			return sr_kemi_ruby_return_int(ket, rx->v.n);
+		case SR_KEMIP_STR:
+			return rb_str_new(rx->v.s.s, rx->v.s.len);
+		case SR_KEMIP_BOOL:
+			if(rx->v.n!=SR_KEMI_FALSE) {
+				return Qtrue;
+			} else {
+				return Qfalse;
+			}
+		case SR_KEMIP_XVAL:
+			/* unknown content - return false */
+			return Qfalse;
+		case SR_KEMIP_NULL:
+			return Qnil;
+		default:
+			/* unknown type - return false */
+			return Qfalse;
+	}
+}
+
 /**
 /**
  *
  *
  */
  */
@@ -756,6 +458,7 @@ VALUE sr_kemi_ruby_exec_func_ex(ksr_ruby_context_t *R, sr_kemi_t *ket, int argc,
 	str *mname;
 	str *mname;
 	int i;
 	int i;
 	int ret = -1;
 	int ret = -1;
+	sr_kemi_xval_t *xret;
 
 
 	env_R = app_ruby_sr_env_get();
 	env_R = app_ruby_sr_env_get();
 	if(env_R==NULL || env_R->msg==NULL || ket==NULL) {
 	if(env_R==NULL || env_R->msg==NULL || ket==NULL) {
@@ -764,8 +467,13 @@ VALUE sr_kemi_ruby_exec_func_ex(ksr_ruby_context_t *R, sr_kemi_t *ket, int argc,
 	}
 	}
 
 
 	if(argc==0 && ket->ptypes[0]==SR_KEMIP_NONE) {
 	if(argc==0 && ket->ptypes[0]==SR_KEMIP_NONE) {
-		ret = ((sr_kemi_fm_f)(ket->func))(env_R->msg);
-		return sr_kemi_ruby_return_int(ket, ret);
+		if(ket->rtype==SR_KEMIP_XVAL) {
+			xret = ((sr_kemi_xfm_f)(ket->func))(env_R->msg);
+			return sr_kemi_ruby_return_xval(ket, xret);
+		} else {
+			ret = ((sr_kemi_fm_f)(ket->func))(env_R->msg);
+			return sr_kemi_ruby_return_int(ket, ret);
+		}
 	}
 	}
 	fname = &ket->fname;
 	fname = &ket->fname;
 	mname = &ket->mname;
 	mname = &ket->mname;
@@ -811,11 +519,21 @@ VALUE sr_kemi_ruby_exec_func_ex(ksr_ruby_context_t *R, sr_kemi_t *ket, int argc,
 	switch(i) {
 	switch(i) {
 		case 1:
 		case 1:
 			if(ket->ptypes[0]==SR_KEMIP_INT) {
 			if(ket->ptypes[0]==SR_KEMIP_INT) {
-				ret = ((sr_kemi_fmn_f)(ket->func))(env_R->msg, vps[0].n);
-				return sr_kemi_ruby_return_int(ket, ret);
+				if(ket->rtype==SR_KEMIP_XVAL) {
+					xret = ((sr_kemi_xfmn_f)(ket->func))(env_R->msg, vps[0].n);
+					return sr_kemi_ruby_return_xval(ket, xret);
+				} else {
+					ret = ((sr_kemi_fmn_f)(ket->func))(env_R->msg, vps[0].n);
+					return sr_kemi_ruby_return_int(ket, ret);
+				}
 			} else if(ket->ptypes[0]==SR_KEMIP_STR) {
 			} else if(ket->ptypes[0]==SR_KEMIP_STR) {
-				ret = ((sr_kemi_fms_f)(ket->func))(env_R->msg, &vps[0].s);
-				return sr_kemi_ruby_return_int(ket, ret);
+				if(ket->rtype==SR_KEMIP_XVAL) {
+					xret = ((sr_kemi_xfms_f)(ket->func))(env_R->msg, &vps[0].s);
+					return sr_kemi_ruby_return_xval(ket, xret);
+				} else {
+					ret = ((sr_kemi_fms_f)(ket->func))(env_R->msg, &vps[0].s);
+					return sr_kemi_ruby_return_int(ket, ret);
+				}
 			} else {
 			} else {
 				LM_ERR("invalid parameters for: %.*s\n",
 				LM_ERR("invalid parameters for: %.*s\n",
 						fname->len, fname->s);
 						fname->len, fname->s);
@@ -825,11 +543,21 @@ VALUE sr_kemi_ruby_exec_func_ex(ksr_ruby_context_t *R, sr_kemi_t *ket, int argc,
 		case 2:
 		case 2:
 			if(ket->ptypes[0]==SR_KEMIP_INT) {
 			if(ket->ptypes[0]==SR_KEMIP_INT) {
 				if(ket->ptypes[1]==SR_KEMIP_INT) {
 				if(ket->ptypes[1]==SR_KEMIP_INT) {
-					ret = ((sr_kemi_fmnn_f)(ket->func))(env_R->msg, vps[0].n, vps[1].n);
-					return sr_kemi_ruby_return_int(ket, ret);
+					if(ket->rtype==SR_KEMIP_XVAL) {
+						xret = ((sr_kemi_xfmnn_f)(ket->func))(env_R->msg, vps[0].n, vps[1].n);
+						return sr_kemi_ruby_return_xval(ket, xret);
+					} else {
+						ret = ((sr_kemi_fmnn_f)(ket->func))(env_R->msg, vps[0].n, vps[1].n);
+						return sr_kemi_ruby_return_int(ket, ret);
+					}
 				} else if(ket->ptypes[1]==SR_KEMIP_STR) {
 				} else if(ket->ptypes[1]==SR_KEMIP_STR) {
-					ret = ((sr_kemi_fmns_f)(ket->func))(env_R->msg, vps[0].n, &vps[1].s);
-					return sr_kemi_ruby_return_int(ket, ret);
+					if(ket->rtype==SR_KEMIP_XVAL) {
+						xret = ((sr_kemi_xfmns_f)(ket->func))(env_R->msg, vps[0].n, &vps[1].s);
+						return sr_kemi_ruby_return_xval(ket, xret);
+					} else {
+						ret = ((sr_kemi_fmns_f)(ket->func))(env_R->msg, vps[0].n, &vps[1].s);
+						return sr_kemi_ruby_return_int(ket, ret);
+					}
 				} else {
 				} else {
 					LM_ERR("invalid parameters for: %.*s\n",
 					LM_ERR("invalid parameters for: %.*s\n",
 							fname->len, fname->s);
 							fname->len, fname->s);
@@ -837,11 +565,21 @@ VALUE sr_kemi_ruby_exec_func_ex(ksr_ruby_context_t *R, sr_kemi_t *ket, int argc,
 				}
 				}
 			} else if(ket->ptypes[0]==SR_KEMIP_STR) {
 			} else if(ket->ptypes[0]==SR_KEMIP_STR) {
 				if(ket->ptypes[1]==SR_KEMIP_INT) {
 				if(ket->ptypes[1]==SR_KEMIP_INT) {
-					ret = ((sr_kemi_fmsn_f)(ket->func))(env_R->msg, &vps[0].s, vps[1].n);
-					return sr_kemi_ruby_return_int(ket, ret);
+					if(ket->rtype==SR_KEMIP_XVAL) {
+						xret = ((sr_kemi_xfmsn_f)(ket->func))(env_R->msg, &vps[0].s, vps[1].n);
+						return sr_kemi_ruby_return_xval(ket, xret);
+					} else {
+						ret = ((sr_kemi_fmsn_f)(ket->func))(env_R->msg, &vps[0].s, vps[1].n);
+						return sr_kemi_ruby_return_int(ket, ret);
+					}
 				} else if(ket->ptypes[1]==SR_KEMIP_STR) {
 				} else if(ket->ptypes[1]==SR_KEMIP_STR) {
-					ret = ((sr_kemi_fmss_f)(ket->func))(env_R->msg, &vps[0].s, &vps[1].s);
-					return sr_kemi_ruby_return_int(ket, ret);
+					if(ket->rtype==SR_KEMIP_XVAL) {
+						xret = ((sr_kemi_xfmss_f)(ket->func))(env_R->msg, &vps[0].s, &vps[1].s);
+						return sr_kemi_ruby_return_xval(ket, xret);
+					} else {
+						ret = ((sr_kemi_fmss_f)(ket->func))(env_R->msg, &vps[0].s, &vps[1].s);
+						return sr_kemi_ruby_return_int(ket, ret);
+					}
 				} else {
 				} else {
 					LM_ERR("invalid parameters for: %.*s\n",
 					LM_ERR("invalid parameters for: %.*s\n",
 							fname->len, fname->s);
 							fname->len, fname->s);
@@ -1534,15 +1272,6 @@ int app_ruby_kemi_export_libs(void)
 	}
 	}
 
 
 	m = 0;
 	m = 0;
-	/* pv submodule */
-	_ksr_mSMD[m] = rb_define_module_under(_ksr_mKSR, "PV");
-	for(i=0; _sr_kemi_pv_R_Map[i].fname!=0; i++) {
-		LM_DBG("exporting KSR.PV.%s(...)\n", _sr_kemi_pv_R_Map[i].fname);
-		rb_define_singleton_method(_ksr_mSMD[m], _sr_kemi_pv_R_Map[i].fname,
-				_sr_kemi_pv_R_Map[i].func, -1);
-	}
-	LM_DBG("initialized kemi sub-module: KSR.PV\n");
-	m++;
 
 
 	/* x submodule */
 	/* x submodule */
 	_ksr_mSMD[m] = rb_define_module_under(_ksr_mKSR, "X");
 	_ksr_mSMD[m] = rb_define_module_under(_ksr_mKSR, "X");
@@ -1557,10 +1286,6 @@ int app_ruby_kemi_export_libs(void)
 	/* registered kemi modules */
 	/* registered kemi modules */
 	if(emods_size>1) {
 	if(emods_size>1) {
 		for(k=1; k<emods_size; k++) {
 		for(k=1; k<emods_size; k++) {
-			if(emods[k].kexp == sr_kemi_exports_get_pv()) {
-				LM_DBG("skip registering the core KSR.pv module\n");
-				continue;
-			}
 			n++;
 			n++;
 			_sr_crt_R_KSRMethods = _sr_R_KSRMethods + n;
 			_sr_crt_R_KSRMethods = _sr_R_KSRMethods + n;
 			ksr_app_ruby_toupper(emods[k].kexp[0].mname.s, rmname);
 			ksr_app_ruby_toupper(emods[k].kexp[0].mname.s, rmname);