Skip to content

Commit

Permalink
Merge pull request #316 from kamailio/vseva/pv_xavp_to_var
Browse files Browse the repository at this point in the history
pv: pv_xavp_to_var()
  • Loading branch information
linuxmaniac committed Sep 7, 2015
2 parents b7c588d + e650581 commit 061baf5
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 4 deletions.
28 changes: 24 additions & 4 deletions modules/pv/README
Expand Up @@ -47,6 +47,7 @@ Daniel-Constantin Mierla
4.9. sbranch_reset()
4.10. pv_xavp_print()
4.11. pv_var_to_xavp(varname, xname)
4.12. pv_xavp_to_var(xname)

5. MI Commands

Expand Down Expand Up @@ -74,8 +75,9 @@ Daniel-Constantin Mierla
1.12. sbranch_append() usage
1.13. pv_xavp_print() usage
1.14. pv_var_to_xavp() usage
1.15. shv_set usage
1.16. shv_get usage
1.15. pv_xavp_to_var() usage
1.16. shv_set usage
1.17. shv_get usage

Chapter 1. Admin Guide

Expand Down Expand Up @@ -106,6 +108,7 @@ Chapter 1. Admin Guide
4.9. sbranch_reset()
4.10. pv_xavp_print()
4.11. pv_var_to_xavp(varname, xname)
4.12. pv_xavp_to_var(xname)

5. MI Commands

Expand Down Expand Up @@ -211,6 +214,7 @@ modparam("pv","avp_aliases","email=s:email_addr;tmp=i:100")
4.9. sbranch_reset()
4.10. pv_xavp_print()
4.11. pv_var_to_xavp(varname, xname)
4.12. pv_xavp_to_var(xname)

4.1. pv_isset(pvar)

Expand Down Expand Up @@ -395,6 +399,22 @@ $xavp("ok[0]=>temp") now is 3
$xavp("ok[0]=>foo") now is "foo indeed"
...

4.12. pv_xavp_to_var(xname)

Copy xavp values to vars. Reverse of pv_var_to_xavp().

Function can be used from ANY_ROUTE.

Example 1.15. pv_xavp_to_var() usage
...
$xavp("bar=>temp") = 3;
$xavp("bar[0]=>foo") = "foo indeed";
pv_xavp_to_var("bar");
...
$var("temp") now is 3
$var("foo") now is "foo indeed"
...

5. MI Commands

5.1. shv_set
Expand All @@ -418,7 +438,7 @@ $xavp("ok[0]=>foo") now is "foo indeed"
_value_
_empty_line_

Example 1.15. shv_set usage
Example 1.16. shv_set usage
...
$ kamctl fifo shv_set debug int 0
...
Expand All @@ -436,7 +456,7 @@ $ kamctl fifo shv_set debug int 0
_name_
_empty_line_

Example 1.16. shv_get usage
Example 1.17. shv_get usage
...
$ kamctl fifo shv_get debug
$ kamctl fifo shv_get
Expand Down
24 changes: 24 additions & 0 deletions modules/pv/doc/pv_admin.xml
Expand Up @@ -422,6 +422,30 @@ pv_var_to_xavp("*", "ok");
...
$xavp("ok[0]=>temp") now is 3
$xavp("ok[0]=>foo") now is "foo indeed"
...
</programlisting>
</example>
</section>
<section id="pv.f.pv_xavp_to_var">
<title>
<function moreinfo="none">pv_xavp_to_var(xname)</function>
</title>
<para>
Copy xavp values to vars. Reverse of pv_var_to_xavp().
</para>
<para>
Function can be used from ANY_ROUTE.
</para>
<example>
<title><function>pv_xavp_to_var()</function> usage</title>
<programlisting format="linespecific">
...
$xavp("bar=>temp") = 3;
$xavp("bar[0]=>foo") = "foo indeed";
pv_xavp_to_var("bar");
...
$var("temp") now is 3
$var("foo") now is "foo indeed"
...
</programlisting>
</example>
Expand Down
16 changes: 16 additions & 0 deletions modules/pv/pv.c
Expand Up @@ -495,6 +495,7 @@ static int w_sbranch_set_ruri(sip_msg_t *msg, char p1, char *p2);
static int w_sbranch_append(sip_msg_t *msg, char p1, char *p2);
static int w_sbranch_reset(sip_msg_t *msg, char p1, char *p2);
static int w_var_to_xavp(sip_msg_t *msg, char *p1, char *p2);
static int w_xavp_to_var(sip_msg_t *msg, char *p1);

static int pv_init_rpc(void);

Expand All @@ -508,6 +509,8 @@ static cmd_export_t cmds[]={
ANY_ROUTE },
{"pv_var_to_xavp", (cmd_function)w_var_to_xavp, 2, 0, 0,
ANY_ROUTE },
{"pv_xavp_to_var", (cmd_function)w_xavp_to_var, 1, 0, 0,
ANY_ROUTE },
#endif
{"is_int", (cmd_function)is_int, 1, fixup_pvar_null, fixup_free_pvar_null,
ANY_ROUTE},
Expand Down Expand Up @@ -710,6 +713,19 @@ static int w_var_to_xavp(sip_msg_t *msg, char *s1, char *s2)
return pv_var_to_xavp(&varname, &xname);
}

static int w_xavp_to_var(sip_msg_t *msg, char *s1)
{
str xname;

if(s1 == NULL) {
LM_ERR("wrong parameters\n");
return -1;
}

xname.s = s1; xname.len = strlen(s1);
return pv_xavp_to_var(&xname);
}

/**
*
*/
Expand Down
58 changes: 58 additions & 0 deletions modules/pv/pv_xavp.c
Expand Up @@ -674,4 +674,62 @@ int pv_var_to_xavp(str *varname, str *xname)
xavp_rm_by_name(xname, 1, NULL);
return -1;
}

int pv_xavp_to_var_helper(sr_xavp_t *avp) {
script_var_t *it;
int_str value;
int flags = 0;

it = add_var(&avp->name, VAR_TYPE_ZERO);
if(!it) return -1;
if(avp->val.type==SR_XTYPE_STR){
flags |= VAR_VAL_STR;
value.s.len = avp->val.v.s.len;
value.s.s = avp->val.v.s.s;
LM_DBG("var:[%.*s] STR:[%.*s]\n", avp->name.len, avp->name.s,
value.s.len, value.s.s);
}
else if(avp->val.type==SR_XTYPE_INT) {
flags |= VAR_VAL_INT;
value.n = avp->val.v.i;
LM_DBG("var:[%.*s] INT:[%d]\n", avp->name.len, avp->name.s,
value.n);
} else {
LM_ERR("avp type not STR nor INT\n");
return -1;
}
set_var_value(it, &value, flags);

return 0;
}

int pv_xavp_to_var(str *xname) {
sr_xavp_t *xavp;
sr_xavp_t *avp;

LM_DBG("xname:%.*s\n", xname->len, xname->s);

xavp = xavp_get_by_index(xname, 0, NULL);
if(!xavp) {
LM_ERR("xavp [%.*s] not found\n", xname->len, xname->s);
return -1;
}
if(xavp->val.type!=SR_XTYPE_XAVP){
LM_ERR("%.*s not xavp type?\n", xname->len, xname->s);
return -1;
}
avp = xavp->val.v.xavp;
if (avp)
{
if(pv_xavp_to_var_helper(avp)<0) return -1;
avp = avp->next;
}

while(avp)
{
if(pv_xavp_to_var_helper(avp)<0) return -1;
avp = avp->next;
}
return 1;
}
#endif
1 change: 1 addition & 0 deletions modules/pv/pv_xavp.h
Expand Up @@ -33,6 +33,7 @@ int pv_xavp_print(struct sip_msg* msg, char* s1, char *s2);
int xavp_params_explode(str *params, str *xname);

int pv_var_to_xavp(str *varname, str *xname);
int pv_xavp_to_var(str *xname);

#endif
#endif

0 comments on commit 061baf5

Please sign in to comment.