[SR-Users] How to determine size (number of elements) in xavp stack?

Chaigneau, Nicolas nicolas.chaigneau at capgemini.com
Tue Nov 9 13:17:55 CET 2021


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(&param->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 at 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 at 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 at 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.


More information about the sr-users mailing list