[Serdev] Re: [Devel] tm bug in t_hooks.c

Federico Giannici giannici at neomedia.it
Sat Dec 10 12:57:16 CET 2005


Bogdan-Andrei Iancu wrote:
> so, after all seams to be a scripting problem. try to remove 
> t_lookup_request() and t_check_trans() from your script ( t_relay() will 
> detect the retransmissions anyhow). If you still get the error, please 
> send me the script - it will spare a lot of time.

I put the following tests at the very start of the script, before 
anything else:

if( t_lookup_request() )
	{
	log( 1, "t_lookup_request: Yes" );
	}
else
	{
	log( 1, "t_lookup_request: No" );
	}
if( t_check_trans() )
	{
	log( 1, "t_check_trans: Yes" );
	}
else
	{
	log( 1, "t_check_trans: No" );
	}

For retrasmission messages both tests are "Yes".

Is this the expected behaviour?
Or that indicate that the retrasmissions have IMMEDIATLY associated a 
trasaction?


Bye.



> Federico Giannici wrote:
> 
>> Bogdan-Andrei Iancu wrote:
>>
>>> please try the following patch and let me know if solves the problem. 
>>> ...just a fast guess...
>>
>>
>>
>> No, the problem remain.
>> When a retrasmission arrives, both t_lookup_request() and 
>> t_check_trans() are TRUE, and the following error appears:
>>
>> Dec  8 16:44:15 eowyn OpenSER[7103]: ERROR: t_newtran: transaction 
>> already in process 0x512a22e0
>> Dec  8 16:44:15 eowyn OpenSER[7103]: ERROR: sl_reply_error used: I'm 
>> terribly sorry, server error occurred (1/SL)
>>
>>
>> Bye.
>>
>>
>>
>>> Federico Giannici wrote:
>>>
>>>> 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.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> You are right, this problem doesn't seem to be related to the UAC 
>>>> module (I was confused by the previous AVPs vanishing bug).
>>>>
>>>> Anyway, when a retrasmission of an INVITE reaches the t_relay() 
>>>> function, the following error appear:
>>>>
>>>> Dec  8 14:56:18 eowyn OpenSER[21824]: ERROR: t_newtran: transaction 
>>>> already in process 0x50132480
>>>> Dec  8 14:56:18 eowyn OpenSER[21824]: ERROR: sl_reply_error used: 
>>>> I'm terribly sorry, server error occurred (1/SL)
>>>>
>>>> And the UAC closes the call (because of the 500 error)!
>>>>
>>>> Please note that there is no t_newtran() in the entire script, and 
>>>> the problem occours only with the retrasmissions!
>>>>
>>>> What is the supposed way to avoid this?
>>>>
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>
>>>>>> 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.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> Index: modules/tm/tm.c
>>> ===================================================================
>>> RCS file: /cvsroot/openser/sip-server/modules/tm/tm.c,v
>>> retrieving revision 1.15
>>> diff -u -r1.15 tm.c
>>> --- modules/tm/tm.c    18 Oct 2005 17:03:15 -0000    1.15
>>> +++ modules/tm/tm.c    8 Dec 2005 15:29:41 -0000
>>> @@ -490,6 +490,7 @@
>>>      t_on_negative( 0 );
>>>      t_on_reply(0);
>>>      t_on_branch(0);
>>> +    set_t(T_UNDEFINED);
>>>      /* reset the kr status */
>>>      set_kr(0);
>>>      return 1;
>>
>>
>>
>>
> 
> 


-- 
___________________________________________________
     __
    |-                      giannici at neomedia.it
    |ederico Giannici      http://www.neomedia.it
___________________________________________________



More information about the Devel mailing list