A C function already exists for that: xavp_count.
Hereafter, the code for a PV that I added to a custom module to do the job.
static pv_export_t mod_pvs[] = {
{STR_STATIC_INIT("xavp_size"), PVT_OTHER, pv_getf_xavp_size, 0,
pv_parse_string, 0, 0, 0},
/* Usage: $xavp_size( name );
* Get the number of rows stored in xavp "name".
* Result is integer: the number of rows.
*/
{ {0, 0}, 0, 0, 0, 0, 0, 0, 0 }
};
/**
* Get the number of rows stored in an xavp.
*/
static int pv_getf_xavp_size(struct sip_msg *msg, pv_param_t *param, pv_value_t *res)
{
if (msg == NULL || param == NULL || param->pvn.type != PV_NAME_INTSTR) {
LM_ERR("Invalid parameters\n");
return -1;
}
int c = xavp_count(¶m->pvn.u.isname.name.s, NULL);
return pv_get_sintval(msg, param, res, c);
}
/**
* Invoked upon server startup.
* Parse "<name>" and store the string.
*/
static int pv_parse_string(pv_spec_p sp, str *in)
{
if (sp == NULL || in == NULL || in->len <= 0) {
LM_ERR("Invalid parameters\n");
return -1;
}
LM_DBG("in: [%.*s]\n", in->len, in->s);
str pvs;
pvs = *in;
trim(&pvs);
sp->pvp.pvn.type = PV_NAME_INTSTR;
sp->pvp.pvn.u.isname.type = AVP_NAME_STR;
sp->pvp.pvn.u.isname.name.s = pvs;
return 0;
}
-----Message d'origine-----
De : sr-users <sr-users-bounces(a)lists.kamailio.org> De la part de Daniel-Constantin
Mierla
Envoyé : mardi 9 novembre 2021 08:33
À : Kamailio (SER) - Users Mailing List; Benoît Panizzon
Objet : Re: [SR-Users] How to determine size (number of elements) in xavp stack?
***This mail has been sent by an external source***
Hello,
I do not remember any function to count xavps at this moment, it can be added of course if
someone wants to make a pull request. Otherwise, the options is looping with index through
all xavps for the name you want. A c function will have to do the same, internally there
is no field keeping the number of avp/xavp with same name.
Cheers,
Daniel
On 08.11.21 16:21, Benoît Panizzon wrote:
Dear Community
In my previous post I mentioned my problem with sql_xquery
I fear I used this wrong.
$dbr is probably only populated if sql_query is used. Anyway, it is
always 0 in my testings, even if I clearly get a result.
Now I would like to know how many results I have. How can I determine
the size of an $xavp stack (or array)?
Or is there another way to get the number of rows returned by a
sql_xquery without looping an index through all rows?
--
Mit freundlichen Grüssen
-Benoît Panizzon- @ HomeOffice und normal erreichbar
--
I m p r o W a r e A G - Leiter Commerce Kunden
______________________________________________________
Zurlindenstrasse 29 Tel +41 61 826 93 00
CH-4133 Pratteln Fax +41 61 826 93 01
Schweiz Web
http://www.imp.ch
______________________________________________________
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
* sr-users(a)lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
*
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
--
Daniel-Constantin Mierla --
www.asipto.com www.twitter.com/miconda --
www.linkedin.com/in/miconda Kamailio Advanced Training - Online Nov 08-11, 2021 (Europe
Timezone) - Feb 21-24, 2022 (America Timezone)
*
https://www.asipto.com/sw/kamailio-advanced-training-online/
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
* sr-users(a)lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
*
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
This message contains information that may be privileged or confidential and is the
property of the Capgemini Group. It is intended only for the person to whom it is
addressed. If you are not the intended recipient, you are not authorized to read, print,
retain, copy, disseminate, distribute, or use this message or any part thereof. If you
receive this message in error, please notify the sender immediately and delete all copies
of this message.