On Aug 11, 2010 at 05:45, Jasmin Schnatterbeck <js(a)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