|
@@ -155,21 +155,6 @@ int sr_kemi_jsdt_return_int(duk_context *J, sr_kemi_t *ket, int rc)
|
|
|
return app_jsdt_return_false(J);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_return_pv_null(duk_context *J, int rmode)
|
|
|
-{
|
|
|
- if(rmode==1) {
|
|
|
- duk_push_lstring(J, "<<null>>", 8);
|
|
|
- } else if(rmode==2) {
|
|
|
- duk_push_lstring(J, "", 0);
|
|
|
- } else {
|
|
|
- duk_push_string(J, NULL);
|
|
|
- }
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
*
|
|
|
*/
|
|
@@ -205,371 +190,6 @@ int sr_kemi_jsdt_return_xval(duk_context *J, sr_kemi_t *ket, sr_kemi_xval_t *rx)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_get_mode(duk_context *J, int rmode)
|
|
|
-{
|
|
|
- str pvn;
|
|
|
- pv_spec_t *pvs;
|
|
|
- pv_value_t val;
|
|
|
- sr_jsdt_env_t *env_J;
|
|
|
- int pl;
|
|
|
-
|
|
|
- env_J = jsdt_sr_env_get();
|
|
|
-
|
|
|
- pvn.s = (char*)duk_to_string(J, 0);
|
|
|
- if(pvn.s==NULL || env_J->msg==NULL)
|
|
|
- return jsdt_sr_return_pv_null(J, 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 jsdt_sr_return_pv_null(J, rmode);
|
|
|
- }
|
|
|
- pvs = pv_cache_get(&pvn);
|
|
|
- if(pvs==NULL) {
|
|
|
- LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
|
|
|
- return jsdt_sr_return_pv_null(J, rmode);
|
|
|
- }
|
|
|
- memset(&val, 0, sizeof(pv_value_t));
|
|
|
- if(pv_get_spec_value(env_J->msg, pvs, &val) != 0) {
|
|
|
- LM_ERR("unable to get pv value for [%s]\n", pvn.s);
|
|
|
- return jsdt_sr_return_pv_null(J, rmode);
|
|
|
- }
|
|
|
- if(val.flags&PV_VAL_NULL) {
|
|
|
- return jsdt_sr_return_pv_null(J, rmode);
|
|
|
- }
|
|
|
- if(val.flags&PV_TYPE_INT) {
|
|
|
- duk_push_int(J, val.ri);
|
|
|
- return 1;
|
|
|
- }
|
|
|
- duk_push_lstring(J, val.rs.s, val.rs.len);
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_get(duk_context *J)
|
|
|
-{
|
|
|
- return jsdt_sr_pv_get_mode(J, 0);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_getw(duk_context *J)
|
|
|
-{
|
|
|
- return jsdt_sr_pv_get_mode(J, 1);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_gete(duk_context *J)
|
|
|
-{
|
|
|
- return jsdt_sr_pv_get_mode(J, 2);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_push_valx (duk_context *J, int rmode, int vi, str *vs)
|
|
|
-{
|
|
|
- if(rmode==1) {
|
|
|
- duk_push_int(J, vi);
|
|
|
- } else {
|
|
|
- duk_push_lstring(J, vs->s, vs->len);
|
|
|
- }
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_get_valx (duk_context *J, int rmode)
|
|
|
-{
|
|
|
- str pvn;
|
|
|
- pv_spec_t *pvs;
|
|
|
- pv_value_t val;
|
|
|
- sr_jsdt_env_t *env_J;
|
|
|
- int pl;
|
|
|
- int xival = 0;
|
|
|
- str xsval = str_init("");
|
|
|
- env_J = jsdt_sr_env_get();
|
|
|
-
|
|
|
- if(duk_get_top(J)<2) {
|
|
|
- LM_ERR("too few parameters [%d]\n", duk_get_top(J));
|
|
|
- return jsdt_sr_return_pv_null(J, 0);
|
|
|
- }
|
|
|
- if(rmode==1) {
|
|
|
- if(!duk_is_number(J, 1)) {
|
|
|
- LM_ERR("invalid int parameter\n");
|
|
|
- return jsdt_sr_return_pv_null(J, 0);
|
|
|
- }
|
|
|
- xival = duk_to_int(J, 1);
|
|
|
- } else {
|
|
|
- if(!duk_is_string(J, 1)) {
|
|
|
- LM_ERR("invalid str parameter\n");
|
|
|
- return jsdt_sr_return_pv_null(J, 0);
|
|
|
- }
|
|
|
- xsval.s = (char*)duk_to_string(J, 1);
|
|
|
- xsval.len = strlen(val.rs.s);
|
|
|
- }
|
|
|
-
|
|
|
- pvn.s = (char*)duk_to_string(J, 0);
|
|
|
- if(pvn.s==NULL || env_J->msg==NULL) {
|
|
|
- return jsdt_sr_pv_push_valx(J, rmode, xival, &xsval);
|
|
|
- }
|
|
|
-
|
|
|
- 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 jsdt_sr_pv_push_valx(J, rmode, xival, &xsval);
|
|
|
- }
|
|
|
- pvs = pv_cache_get(&pvn);
|
|
|
- if(pvs==NULL) {
|
|
|
- LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
|
|
|
- return jsdt_sr_pv_push_valx(J, rmode, xival, &xsval);
|
|
|
- }
|
|
|
-
|
|
|
- memset(&val, 0, sizeof(pv_value_t));
|
|
|
- if(pv_get_spec_value(env_J->msg, pvs, &val) != 0) {
|
|
|
- LM_ERR("unable to get pv value for [%s]\n", pvn.s);
|
|
|
- return jsdt_sr_pv_push_valx(J, rmode, xival, &xsval);
|
|
|
- }
|
|
|
- if(val.flags&PV_VAL_NULL) {
|
|
|
- return jsdt_sr_pv_push_valx(J, rmode, xival, &xsval);
|
|
|
- }
|
|
|
- if(val.flags&PV_TYPE_INT) {
|
|
|
- duk_push_int(J, val.ri);
|
|
|
- return 1;
|
|
|
- }
|
|
|
- duk_push_lstring(J, val.rs.s, val.rs.len);
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_getvs (duk_context *J)
|
|
|
-{
|
|
|
- return jsdt_sr_pv_get_valx(J, 0);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_getvn (duk_context *J)
|
|
|
-{
|
|
|
- return jsdt_sr_pv_get_valx(J, 1);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_seti (duk_context *J)
|
|
|
-{
|
|
|
- str pvn;
|
|
|
- pv_spec_t *pvs;
|
|
|
- pv_value_t val;
|
|
|
- sr_jsdt_env_t *env_J;
|
|
|
- int pl;
|
|
|
-
|
|
|
- env_J = jsdt_sr_env_get();
|
|
|
-
|
|
|
- if(duk_get_top(J)<2) {
|
|
|
- LM_ERR("too few parameters [%d]\n", duk_get_top(J));
|
|
|
- return 0;
|
|
|
- }
|
|
|
- if(!duk_is_number(J, 1)) {
|
|
|
- LM_ERR("invalid int parameter\n");
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- pvn.s = (char*)duk_to_string(J, 0);
|
|
|
- if(pvn.s==NULL || env_J->msg==NULL)
|
|
|
- return 0;
|
|
|
-
|
|
|
- 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 0;
|
|
|
- }
|
|
|
- pvs = pv_cache_get(&pvn);
|
|
|
- if(pvs==NULL) {
|
|
|
- LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- memset(&val, 0, sizeof(pv_value_t));
|
|
|
- val.ri = duk_to_int(J, 1);
|
|
|
- val.flags |= PV_TYPE_INT|PV_VAL_INT;
|
|
|
-
|
|
|
- if(pv_set_spec_value(env_J->msg, pvs, 0, &val)<0) {
|
|
|
- LM_ERR("unable to set pv [%s]\n", pvn.s);
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_sets (duk_context *J)
|
|
|
-{
|
|
|
- str pvn;
|
|
|
- pv_spec_t *pvs;
|
|
|
- pv_value_t val;
|
|
|
- sr_jsdt_env_t *env_J;
|
|
|
- int pl;
|
|
|
-
|
|
|
- env_J = jsdt_sr_env_get();
|
|
|
-
|
|
|
- if(duk_get_top(J)<2) {
|
|
|
- LM_ERR("too few parameters [%d]\n", duk_get_top(J));
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- if(!duk_is_string(J, 1)) {
|
|
|
- LM_ERR("invalid str parameter\n");
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- pvn.s = (char*)duk_to_string(J, 0);
|
|
|
- if(pvn.s==NULL || env_J->msg==NULL)
|
|
|
- return 0;
|
|
|
-
|
|
|
- memset(&val, 0, sizeof(pv_value_t));
|
|
|
- val.rs.s = (char*)duk_to_string(J, 1);
|
|
|
- val.rs.len = strlen(val.rs.s);
|
|
|
- val.flags |= PV_VAL_STR;
|
|
|
-
|
|
|
- pvn.len = strlen(pvn.s);
|
|
|
- LM_DBG("pv set: %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 0;
|
|
|
- }
|
|
|
- pvs = pv_cache_get(&pvn);
|
|
|
- if(pvs==NULL) {
|
|
|
- LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- if(pv_set_spec_value(env_J->msg, pvs, 0, &val)<0) {
|
|
|
- LM_ERR("unable to set pv [%s]\n", pvn.s);
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_unset (duk_context *J)
|
|
|
-{
|
|
|
- str pvn;
|
|
|
- pv_spec_t *pvs;
|
|
|
- pv_value_t val;
|
|
|
- sr_jsdt_env_t *env_J;
|
|
|
- int pl;
|
|
|
-
|
|
|
- env_J = jsdt_sr_env_get();
|
|
|
-
|
|
|
- pvn.s = (char*)duk_to_string(J, 0);
|
|
|
- if(pvn.s==NULL || env_J->msg==NULL)
|
|
|
- return 0;
|
|
|
-
|
|
|
- pvn.len = strlen(pvn.s);
|
|
|
- LM_DBG("pv unset: %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 0;
|
|
|
- }
|
|
|
- pvs = pv_cache_get(&pvn);
|
|
|
- if(pvs==NULL)
|
|
|
- {
|
|
|
- LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- memset(&val, 0, sizeof(pv_value_t));
|
|
|
- val.flags |= PV_VAL_NULL;
|
|
|
- if(pv_set_spec_value(env_J->msg, pvs, 0, &val)<0)
|
|
|
- {
|
|
|
- LM_ERR("unable to unset pv [%s]\n", pvn.s);
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- */
|
|
|
-static int jsdt_sr_pv_is_null (duk_context *J)
|
|
|
-{
|
|
|
- str pvn;
|
|
|
- pv_spec_t *pvs;
|
|
|
- pv_value_t val;
|
|
|
- sr_jsdt_env_t *env_J;
|
|
|
- int pl;
|
|
|
-
|
|
|
- env_J = jsdt_sr_env_get();
|
|
|
-
|
|
|
- pvn.s = (char*)duk_to_string(J, 0);
|
|
|
- if(pvn.s==NULL || env_J->msg==NULL)
|
|
|
- return 0;
|
|
|
-
|
|
|
- pvn.len = strlen(pvn.s);
|
|
|
- LM_DBG("pv is null test: %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 0;
|
|
|
- }
|
|
|
- pvs = pv_cache_get(&pvn);
|
|
|
- if(pvs==NULL) {
|
|
|
- LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- memset(&val, 0, sizeof(pv_value_t));
|
|
|
- if(pv_get_spec_value(env_J->msg, pvs, &val) != 0) {
|
|
|
- LM_NOTICE("unable to get pv value for [%s]\n", pvn.s);
|
|
|
- duk_push_boolean(J, 1);
|
|
|
- return 1;
|
|
|
- }
|
|
|
- if(val.flags&PV_VAL_NULL) {
|
|
|
- duk_push_boolean(J, 1);
|
|
|
- } else {
|
|
|
- duk_push_boolean(J, 0);
|
|
|
- }
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-const duk_function_list_entry _sr_kemi_pv_J_Map[] = {
|
|
|
- { "get", jsdt_sr_pv_get, 1 /* 1 args */ },
|
|
|
- { "getw", jsdt_sr_pv_getw, 1 /* 1 args */ },
|
|
|
- { "gete", jsdt_sr_pv_gete, 1 /* 1 args */ },
|
|
|
- { "getvn", jsdt_sr_pv_getvn, 2 /* 2 args */ },
|
|
|
- { "getvs", jsdt_sr_pv_getvs, 2 /* 2 args */ },
|
|
|
- { "seti", jsdt_sr_pv_seti, 2 /* 2 args */ },
|
|
|
- { "sets", jsdt_sr_pv_sets, 2 /* 2 args */ },
|
|
|
- { "unset", jsdt_sr_pv_unset, 1 /* 1 args */ },
|
|
|
- { "is_null", jsdt_sr_pv_is_null, 1 /* 1 args */ },
|
|
|
- { NULL, NULL, 0 }
|
|
|
-};
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -1803,14 +1423,6 @@ duk_ret_t dukopen_KSR(duk_context *J)
|
|
|
duk_put_prop_string(J, -2, "KSR"); /* -> [ ... global ] */
|
|
|
duk_pop(J);
|
|
|
|
|
|
- /* special modules - pv.get(...) can return int or str */
|
|
|
- duk_push_global_object(J);
|
|
|
- duk_push_object(J); /* -> [ ... global obj ] */
|
|
|
- duk_put_function_list(J, -1, _sr_kemi_pv_J_Map);
|
|
|
- duk_put_prop_string(J, -2, "KSR_pv"); /* -> [ ... global ] */
|
|
|
- duk_pop(J);
|
|
|
- duk_eval_string_noresult(J, "KSR.pv = KSR_pv;");
|
|
|
-
|
|
|
duk_push_global_object(J);
|
|
|
duk_push_object(J); /* -> [ ... global obj ] */
|
|
|
duk_put_function_list(J, -1, _sr_kemi_x_J_Map);
|
|
@@ -1821,10 +1433,6 @@ duk_ret_t dukopen_KSR(duk_context *J)
|
|
|
/* registered kemi modules */
|
|
|
if(emods_size>1) {
|
|
|
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++;
|
|
|
_sr_crt_J_KSRMethods = _sr_J_KSRMethods + n;
|
|
|
snprintf(mname, 128, "KSR_%s", emods[k].kexp[0].mname.s);
|