Prechádzať zdrojové kódy

pv: new var $defn(name)

- return the value of a define converted to numbaer (signed int)
Daniel-Constantin Mierla 4 rokov pred
rodič
commit
7811f2dfa8
3 zmenil súbory, kde vykonal 32 pridanie a 1 odobranie
  1. 3 1
      src/modules/pv/pv.c
  2. 26 0
      src/modules/pv/pv_core.c
  3. 3 0
      src/modules/pv/pv_core.h

+ 3 - 1
src/modules/pv/pv.c

@@ -196,8 +196,10 @@ static pv_export_t mod_pvs[] = {
 	{{"dd", (sizeof("dd")-1)}, /* */
 		PVT_OTHER, pv_get_dsturi_attr, 0,
 		0, 0, pv_init_iname, 1},
-	{{"def", (sizeof("env")-1)}, PVT_OTHER, pv_get_def, 0,
+	{{"def", (sizeof("def")-1)}, PVT_OTHER, pv_get_def, 0,
 		pv_parse_def_name, 0, 0, 0},
+	{{"defn", (sizeof("defn")-1)}, PVT_OTHER, pv_get_defn, 0,
+		pv_parse_defn_name, 0, 0, 0},
 	{{"di", (sizeof("di")-1)}, /* */
 		PVT_OTHER, pv_get_diversion, 0,
 		0, 0, pv_init_iname, 1},

+ 26 - 0
src/modules/pv/pv_core.c

@@ -3797,3 +3797,29 @@ int pv_get_def(sip_msg_t *msg, pv_param_t *param, pv_value_t *res)
 	return pv_get_null(msg, param, res);
 }
 
+int pv_parse_defn_name(pv_spec_p sp, str *in)
+{
+	if (in == NULL || in->s == NULL || sp == NULL) {
+		LM_ERR("INVALID DEF NAME\n");
+		return -1;
+	}
+	sp->pvp.pvn.type = PV_NAME_INTSTR;
+	sp->pvp.pvn.u.isname.type = AVP_NAME_STR;
+	sp->pvp.pvn.u.isname.name.s = *in;
+	return 0;
+
+}
+
+int pv_get_defn(sip_msg_t *msg, pv_param_t *param, pv_value_t *res)
+{
+	int n = 0;
+	str *val = pp_define_get(param->pvn.u.isname.name.s.len,
+			param->pvn.u.isname.name.s.s);
+
+	if (val) {
+		str2sint(val, &n);
+		return pv_get_intstrval(msg, param, res, n, val);
+	} else {
+		return pv_get_sintval(msg, param, res, n);
+	}
+}

+ 3 - 0
src/modules/pv/pv_core.h

@@ -397,5 +397,8 @@ int pv_get_ksr_attrs(sip_msg_t *msg, pv_param_t *param,
 int pv_parse_def_name(pv_spec_p sp, str *in);
 int pv_get_def(sip_msg_t *msg, pv_param_t *param, pv_value_t *res);
 
+int pv_parse_defn_name(pv_spec_p sp, str *in);
+int pv_get_defn(sip_msg_t *msg, pv_param_t *param, pv_value_t *res);
+
 #endif