Skip to content

Commit

Permalink
[avpops] remove old avp_delete() function
Browse files Browse the repository at this point in the history
can be replaced with:
 $avp(foo) = NULL;    # delete latest avp
 $avp(foo) := NULL;   # delete all avps
  • Loading branch information
bogdan-iancu committed Feb 17, 2024
1 parent ec96a37 commit 04f42d9
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 221 deletions.
121 changes: 0 additions & 121 deletions modules/avpops/avpops.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ static int fixup_db_id_sync(void** param);
static int fixup_db_id_async(void** param);
static int fixup_pvname_list(void** param);

static int fixup_avp_del_name(void** param);
static int fixup_free_avp_subst_p1(void** param);
static int fixup_free_avp_subst_p2(void** param);
static int fixup_free_pvname_list(void** param);
Expand All @@ -109,7 +108,6 @@ static int w_dbquery_avps(struct sip_msg* msg, str* query,
void* dest, void *url);
static int w_async_dbquery_avps(struct sip_msg* msg, async_ctx *ctx,
str* query, void* dest, void* url);
static int w_delete_avps(struct sip_msg* msg, void* param);
static int w_shuffle_avps(struct sip_msg* msg, void* param);
static int w_subst(struct sip_msg* msg, char* src, char *subst);
static int w_is_avp_set(struct sip_msg* msg, char* param, char *foo);
Expand Down Expand Up @@ -156,11 +154,6 @@ static const cmd_export_t cmds[] = {
REQUEST_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE|ONREPLY_ROUTE|LOCAL_ROUTE|
STARTUP_ROUTE|TIMER_ROUTE|EVENT_ROUTE},

{"avp_delete", (cmd_function)w_delete_avps, {
{CMD_PARAM_STR|CMD_PARAM_NO_EXPAND, fixup_avp_del_name, fixup_free_pkg}, {0, 0, 0}},
REQUEST_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE|ONREPLY_ROUTE|LOCAL_ROUTE|
STARTUP_ROUTE|TIMER_ROUTE|EVENT_ROUTE},

{"avp_shuffle", (cmd_function)w_shuffle_avps, {
{CMD_PARAM_STR|CMD_PARAM_NO_EXPAND, fixup_avp_shuffle_name, fixup_free_pkg}, {0, 0, 0}},
REQUEST_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE|ONREPLY_ROUTE|LOCAL_ROUTE|
Expand Down Expand Up @@ -614,115 +607,6 @@ static int fixup_db_id_async(void** param)
return fixup_db_id(param, 1);
}

static int fixup_avp_del_name(void** param)
{
struct fis_param *ap=NULL;
char *p;
char *s;
unsigned int flags;
str s0, cpy;

if (pkg_nt_str_dup(&cpy, (str *)*param) < 0) {
LM_ERR("oom\n");
return -1;
}
s = cpy.s;

/* attribute name / alias */
if ( (p=strchr(s,'/'))!=0 )
*(p++)=0;

if(*s=='$')
{
/* is variable */
ap = avpops_parse_pvar(s);
if (ap==0)
{
LM_ERR("unable to get"
" pseudo-variable in param \n");
goto err_free;
}
if (ap->u.sval.type!=PVT_AVP)
{
LM_ERR("bad param; expected : $avp(name)\n");
goto err_free;
}
ap->opd|=AVPOPS_VAL_PVAR;
ap->type = AVPOPS_VAL_PVAR;
} else {
if(cpy.len < 1)
{
LM_ERR("bad param - expected : $avp(name), *, s or i value\n");
goto err_free;
}
ap = (struct fis_param*)pkg_malloc(sizeof(struct fis_param));
if (ap==0)
{
LM_ERR(" no more pkg mem\n");
goto err_free;
}
memset(ap, 0, sizeof(struct fis_param));
ap->opd|=AVPOPS_VAL_NONE;
switch(*s) {
case 's': case 'S':
ap->opd = AVPOPS_VAL_NONE|AVPOPS_VAL_STR;
break;
case 'i': case 'I':
ap->opd = AVPOPS_VAL_NONE|AVPOPS_VAL_INT;
break;
case '*': case 'a': case 'A':
ap->opd = AVPOPS_VAL_NONE;
break;
default:
LM_ERR(" bad param - expected : *, s or i AVP flag\n");
goto err_free;
}
/* flags */
flags = 0;
if(*(s+1)!='\0')
{
s0.s = s+1;
s0.len = strlen(s0.s);
if(str2int(&s0, &flags)!=0)
{
LM_ERR("bad avp flags\n");
goto err_free;
}
}
ap->type = AVPOPS_VAL_INT;
ap->u.n = flags<<8;
}

/* flags */
for( ; p&&*p ; p++ )
{
switch (*p)
{
case 'g':
case 'G':
ap->ops|=AVPOPS_FLAG_ALL;
break;
default:
LM_ERR(" bad flag <%c>\n",*p);
goto err_free;
}
}

/* force some flags: if no avp name is given, force "all" flag */
if (ap->opd&AVPOPS_VAL_NONE)
ap->ops |= AVPOPS_FLAG_ALL;

*param=(void*)ap;
pkg_free(cpy.s);

return 0;

err_free:
pkg_free(cpy.s);
pkg_free(ap);
return E_UNSPEC;
}

static int fixup_avp_shuffle_name(void** param)
{
struct fis_param *ap=NULL;
Expand Down Expand Up @@ -1063,11 +947,6 @@ static int w_async_dbquery_avps(struct sip_msg* msg, async_ctx *ctx,
return ops_async_dbquery(msg, ctx, query, parsed_url, (pvname_list_t *)dest);
}

static int w_delete_avps(struct sip_msg* msg, void* param)
{
return ops_delete_avp ( msg, (struct fis_param*)param);
}

static int w_shuffle_avps(struct sip_msg* msg, void* param)
{
return ops_shuffle_avp ( msg, (struct fis_param*)param);
Expand Down
55 changes: 0 additions & 55 deletions modules/avpops/avpops_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -908,61 +908,6 @@ int resume_async_dbquery(int fd, struct sip_msg *msg, void *_param)
return ret;
}



int ops_delete_avp(struct sip_msg* msg, struct fis_param *ap)
{
struct usr_avp **avp_list;
struct usr_avp *avp;
struct usr_avp *avp_next;
unsigned short name_type;
int avp_name;
int n;

n = 0;

if ((ap->opd&AVPOPS_VAL_NONE)==0)
{
/* avp name is known ->search by name */
/* get avp name */
if(avpops_get_aname(msg, ap, &avp_name, &name_type)!=0)
{
LM_ERR("failed to get dst AVP name\n");
return -1;
}
n = destroy_avps( name_type, avp_name, ap->ops&AVPOPS_FLAG_ALL );
} else {
/* avp name is not given - we have just flags */
/* -> go through all list */
avp_list = get_avp_list();
avp = *avp_list;

for ( ; avp ; avp=avp_next )
{
avp_next = avp->next;
/* check if type match */
if ( !( (ap->opd&(AVPOPS_VAL_INT|AVPOPS_VAL_STR))==0 ||
((ap->opd&AVPOPS_VAL_INT)&&((avp->flags&AVP_NAME_STR))==0) ||
((ap->opd&AVPOPS_VAL_STR)&&(avp->flags&AVP_NAME_STR)) ) )
continue;
if((ap->u.sval.pvp.pvn.u.isname.type&AVP_SCRIPT_MASK)!=0
&& ((ap->u.sval.pvp.pvn.u.isname.type&AVP_SCRIPT_MASK)
&avp->flags)==0)
continue;
/* remove avp */
destroy_avp( avp );
n++;
if ( !(ap->ops&AVPOPS_FLAG_ALL) )
break;
}
}

LM_DBG("%d avps were removed\n",n);

return n?1:-1;
}


int ops_shuffle_avp( struct sip_msg* msg, struct fis_param* src)
{
struct usr_avp *src_avp, *rnd_avp;
Expand Down
45 changes: 0 additions & 45 deletions modules/avpops/doc/avpops_admin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -524,51 +524,6 @@ avp_db_query("DELETE FROM subscriber", , 2);

$avp(id) = 2;
avp_db_query("DELETE FROM subscriber", , $avp(id));
...
</programlisting>
</example>
</section>
<section id="func_avp_delete" xreflabel="avp_delete()">
<title>
<function moreinfo="none">avp_delete(name)
</function>
</title>
<para>
Deletes from memory the AVPs with <emphasis>name</emphasis> or,
if *, all AVPs.
</para>
<para>Meaning of the parameters is as follows:</para>
<itemizedlist>
<listitem>
<para><emphasis>name (string, no expand)</emphasis> - which AVPs will be deleted
from memory.
Parameter syntax is:
<itemizedlist>
<listitem><para><emphasis>
name = (matching_flags|avp_name|avp_alias)['/'flag]
</emphasis></para></listitem>
<listitem><para><emphasis>
matching_flags = please refer to avp_db_load() function
</emphasis></para></listitem>
<listitem><para><emphasis>
flag = 'g'|'G'
</emphasis></para></listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
<para>
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
BRANCH_ROUTE, LOCAL_ROUTE and ONREPLY_ROUTE.
</para>
<example>
<title><function>avp_delete</function> usage</title>
<programlisting format="linespecific">
...
avp_delete("$avp(email)"); # delete topmost (lastly set) value from $avp(email)
avp_delete("$avp(678)/g"); # fully purge $avp(678)
avp_delete("i");
avp_delete("a3");
...
</programlisting>
</example>
Expand Down

0 comments on commit 04f42d9

Please sign in to comment.