[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