[sr-dev] Suggesting fix for t_request and pua_dialoginfo

Andrei Pelinescu-Onciul andrei at iptel.org
Wed Aug 11 15:14:54 CEST 2010


On Aug 11, 2010 at 05:45, Jasmin Schnatterbeck <js at data-cmr.net> wrote:
> Hello List,
> 
> some months ago I reported a problem with pua_dialoginfo:
> Avps declared in request route are not available anymore in branch
> route, if pua_dialoginfo module is loaded.
> 
> I do not know whether there are some experiences with this problem or
> not, so I looked for the reason.
> 
> pua_dialoginfo uses pua for sending PUBLISH request
> pua uses tm t_request for sending PUBLISH request
> 
> t_request() is located in uac.c (tm):

You mean t_uac_prepare() (called via tmb->t_request, request(),
t_uac(), t_uac_with_ids(), t_uac_prepare()) ?

> - in line 411 avp list is reset
> - in line 276 build_cell() is called:
>   build_cell() is located in h_table.c, where lines 305-323 delete avps
> 
> If I comment out the mentioned lines, which delete avps, then avps set
> in request route are also available in branch route.
> But I do not know, what is also affected by this change.
> 
> So would it be reasonable, to add a parameter to build_cell() for not
> changing the AVP list?

The problem is that the AVP lists cannot be shared between several
transactions and in your case there are probably 2 transactions that
would share them without the reset: the transaction created by
t_relay()/t_newtran() and the local PUBLISH transaction created by
pua_dialoginfo.
Rather then adding a parameter for not reseting the avp list to
build_cell() and commenting it out in t_request(), I think the solution
is not copying the avp lists at all for the local transaction (so a
parameter for creating a transaction with an empty avp list).
Another possibility would to clone the avp list instead of linking to
it in the t_uac_prepare() case, but this would be expensive and I don't
think anybody needs a local transaction that would inherit the avps
(there is only an event route executed on the local transaction creation
 an that can access the original avps anyway).

Andrei



More information about the sr-dev mailing list