[Serdev] Re: [Devel] tm bug in t_hooks.c
Federico Giannici
giannici at neomedia.it
Sat Dec 10 23:17:32 CET 2005
Bogdan-Andrei Iancu wrote:
> Federico Giannici wrote:
>
>> Bogdan-Andrei Iancu wrote:
>>
>>> Hi Federico,
>>>
>>> I'm afraid you have a script error - you called twice some functions
>>> which create transactions...The error is generate most probably by
>>> t_relay() which found the transaction already created in the script
>>> (maybe via t_newtran).
>>
>>
>>
>> Yes, I know it.
>> It is the UAC module that create a transaction (I don't know if in any
>> case or only in some cases).
>>
> the uac module does not create a transaction - uac_replace_from()
> performs just text mangling and installs some hooks.
Indeed, the problem is just in the installation of the hooks!
I made a function to test when a transaction is establied with the
following code:
t = get_t();
if( t && t != T_UNDEFINED )
TRANSACTION
else
NO TRANSACTION
In this way I traced the exact point where the transaction is established.
It is done in the replace_from() function, when the
uac_tmb.register_tmcb() is called.
In the register_tmcb() function, it is done by the t_check() function call.
In the t_check() function, it is done by the t_lookup_request() function
call.
The t_lookup_request() fuction goes to the "found:" label and the
transaction is established by the set_t() function.
I think that this should be enought information for you to find where is
the problem. I don't have enought "know how" to go further...
I remember you that all this happens only for retrasmissions of INVITEs
(and maybe other type of messages). No transaction is established for
the first occurence of the message.
Bye.
>> So when the message arrives at the classic t_relay() part of the
>> script, I cannot know if a transactionis is already established.
>>
>>
>>> To be able to help, please send the script (privately, if necessary)
>>> to take a look.
>>
>>
>>
>> If you still think that there is problem somewhere, I will send the
>> script to you...
>>
>>
>> Bye.
>>
>>
>> P.S.
>> I sent a similar question at "serusers at iptel.org", but still no
>> usefull reply...
>>
>>
>>
>>
>>> Federico Giannici wrote:
>>>
>>>> Bogdan-Andrei Iancu wrote:
>>>>
>>>>> Hi Frederico,
>>>>>
>>>>> that's good..one more down....
>>>>
>>>>
>>>>
>>>> Well.... the AVPs are no more disappearing, but I still have some
>>>> problem with the reinvites...
>>>>
>>>> It seems that uac_replace_from() creates a transaction when an
>>>> INVITE retrasmission is received. Infact in that case the following
>>>> errors are logged for the retrasmitted INVITEs:
>>>>
>>>> Dec 5 18:49:25 eowyn OpenSER[5654]: ERROR: t_newtran: transaction
>>>> already in process 0x502a56f8
>>>> Dec 5 18:49:25 eowyn OpenSER[5654]: ERROR: sl_reply_error used: I'm
>>>> terribly sorry, server error occurred (1/SL)
>>>>
>>>> This is generated by this standard code:
>>>>
>>>> if ( !t_relay() ) {
>>>> sl_reply_error();
>>>> }
>>>>
>>>> I thought that I could find the retrasmissions (with the
>>>> t_lookup_request() function) and use the t_forward_nonack_uri()
>>>> function in that case, but I got the following error:
>>>>
>>>> Dec 5 18:47:29 eowyn OpenSER[26647]: ERROR:tm:t_forward_nonack: no
>>>> branch for forwarding
>>>>
>>>> Obviously, I have not enought undestanding of TM functions and
>>>> transactions in general.
>>>>
>>>> So, the question is: can anybody post a correct fragment of script
>>>> code that relay a message, correctly handling retrasmissions?
>>>>
>>>> Otherwise, could I simply discard retrasmissions (with a simple exit)?
>>>> And how I can recognize retrasmissions? Is t_lookup_request() the
>>>> correct function for a test?
>>>>
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>> Federico Giannici wrote:
>>>>>
>>>>>> Bogdan-Andrei Iancu wrote:
>>>>>>
>>>>>>> Hi Cesc,
>>>>>>>
>>>>>>> right!! as the transaction list is set all the time (disregarding
>>>>>>> the presence of callbacks), it should be also unset all the time....
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> This solves the bug of the AVPs disappearing with retrasmitted
>>>>>> INVITES too!!!
>>>>>>
>>>>>> Bogdan, now you can remove that bug from the ones to search for...
>>>>>>
>>>>>> Thank you Cesc.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
--
___________________________________________________
__
|- giannici at neomedia.it
|ederico Giannici http://www.neomedia.it
Presidente del cda - NEOMEDIA srl
___________________________________________________
More information about the Devel
mailing list