Re: Transaction timeouts

"M. Rangnathan" <[email protected]> Mon, 26 Feb 2007 21:44:55 -0500
Newsgroups gmane.comp.voip.nist-sip
Message-ID <[email protected]>
Well OK it took a few minutes to  put this feature in so there it is. 
Now you can solicit for retransmission notifications on client 
transactions ( although the stack actually does the retransmission ).

Here it is :

SIPClientTransaction.setNotifyOnRetransmit ( boolean  )


Its pretty simple. You just get notificatoin of a retransmission from 
the client transaction but the retransmission is actually done by the 
stack.  I think it does what you want -- it will allow you to kill off 
the transaction early using transaction.terminate if you want. Its 
untested code - give it a try and tell me if it works. I'll try to get 
somethign like it into the next rev of the spec ( assuming that there is 
one ). I can see why it is needed.

Ranga

M. Rangnathan wrote:

> Will that work? You need multiple sockets unles all you ever do is 
> talk to a single destination. The ICMP is delivered asynchronously and 
> will not be cached unless the socket is bound. Thus when the ICMP 
> comes back the binding better not have changed in the meanwhile. If it 
> does the ICMP is dropped I believe and hence the solution will not 
> work in general. This feature may be hard to support in general using 
> ICMP and it is not guaranteed to work anyway.
>
> However this does point out the need for having a retransmission alert 
> facility for the client transaction as well.  I think I'll add 
> ClientTransaciton.solicitRetransmissionAlerts ( analog of what exists 
> on the serverTransaction )  into the implementation  and for the next 
> rev of the spec.  Andrew, do you want to file a feature request and 
> I'll work on it when I can find the time ( or you can and submit a 
> diff listing when you have it worked out ).
>
> Regards,
>
> Ranga
>
> Jeroen van Bemmel wrote:
>
>> perhaps you can try to call connect() on the single UDP socket each 
>> time you send a datagram. Adds some overhead, but may provide 
>> feedback when unreachable
>>
>> Suggest to try something like:
>> if (options.checkUnreachable ) socket.connect( addr );
>> socket.sendto( addr )
>>
>> Regards,
>> Jeroen
>>
>> M. Rangnathan wrote:
>>
>>> Yes that is correct and that is a good observation. However, if we can
>>> come up with a stack config parameter to support this behavior that
>>> might be possible ( at the cost of scalability ). The default would
>>> work the way it currently does (i.e. single socket).
>>>
>>> Ranga
>>>
>>> Jeroen van Bemmel wrote:
>>>
>>>> IIRC you can only learn about ICMP errors if you use a connected UDP
>>>> socket (in Java at least). Unfortunately that means you would need to
>>>> create a socket for each peer, which scales poorly.
>>>>
>>>> Regards,
>>>> Jeroen
>>>>
>>>> M. Rangnathan wrote:
>>>>
>>>>> Andrew T Gin wrote:
>>>>>
>>>>>> Hi
>>>>>>
>>>>>>> You can be informed of retransmission alerts on the Server
>>>>>>> transaction. See ServerTransaction.enableRetransmissionAlerts. On
>>>>>>> the client side of the transaction, there is no retransmission
>>>>>>> alert.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> I'm interested in the reasoning behind this :)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> We did not think it was necessary. What is the use case? On the
>>>>> server side, if you want to remain true to RFC 3216, the server
>>>>> retransmits till ACK
>>>>>
>>>>>>>>     timeOutEvent) method only ever receives Timeout.TRANSACTION
>>>>>>>>     timeout events. How do I make it so my application is
>>>>>>>> notified of retransmit
>>>>>>>>     timeouts? Are they received at processTimeout?
>>>>>>>>
>>>>>>>>     When the destination host is unreachable, the application
>>>>>>>>     gets ICMP unreachable replies to each UDP retransmission. Is
>>>>>>>> it possible to be
>>>>>>>>     notified *immediately* when the destination is unreachable?
>>>>>>>>
>>>>>>> Let me think of this a bit. I could use the public void
>>>>>>> processIOException(IOExceptionEvent exceptionEvent)   event
>>>>>>> notification mechansm for this.  How does the UDP socket see
>>>>>>> this. I think I would have to use  SOCTL to enable ICMP  packets
>>>>>>> to be seen right ?. Is the feature available on J1.42 ? If not it
>>>>>>> becomes a J 5 only thing which I want to avoid if possible. I
>>>>>>> will take a look to see if I can hook this in but some hacking
>>>>>>> from you would speed the process. See if you can hack
>>>>>>> UDPMessageChannel to get notifications for ICMP packets. Call a
>>>>>>> dummy method when you get the necessary notificaiton. I'll take
>>>>>>> it from there.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> So it doesn't appear to be a current way to do it? I was more
>>>>>> interested in whether this was possible with the current
>>>>>> implementation. Ill just try work around it :D THanks for your
>>>>>> efforts!
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> No there is not but there should be. Its an important feature that
>>>>> is missing. Figure out how to read ICMP messages from the UDP socket
>>>>> imbedded in UDPMessageChannel. If needed, we can make a 1.5 only
>>>>> feature that allows you to inform the application asynchronously
>>>>> when an ICMP notification comes along. If you find a work around ,
>>>>> share it here and we can figure out how to make it work in the
>>>>> stack.
>>>>>
>>>>>>
>>>>>> Currently, TCP 'io exceptions' do not go through
>>>>>> processIOException; they are caught as a SIP exception in the try
>>>>>> catch block of each method. So if the UDP "io exception"
>>>>>> implemented should they be treated the same?
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Are you using JSIP 1.2 ? If so, IO Exceptions should be reported as
>>>>> IOExceptions. If not there is a bug.
>>>>>
>>>>>
>>>>>>> That would be in violation of the SIP transaction state machine -
>>>>>>> something that I want to avoid. You can try implementing the
>>>>>>> setBaseTimer on SipProvider ( currently disabled  -- throws
>>>>>>> UnsupportedOperation).
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> So this is a 'requirement' of SIP? I guess so from the RFC. Again
>>>>>> I'll work around this. THanks again!
>>>>>>
>>>>>>>>
>>>>>>>>     Thanks for your help, I'm usually a bit sceptical of mailing
>>>>>>>> lists, as
>>>>>>>>     questions usually go unanswered, so even if I happen to  find
>>>>>>>> someone
>>>>>>>>     else with the exact same problem, sometimes there are no
>>>>>>>> replies!
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Have faith. :-)
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> What I meant here was that this Jain-SIP project is practically a
>>>>>> model of how all projects should be! Active support, quick
>>>>>> replies, a working implementation, and most importantly,
>>>>>> comprehensive documentation!
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Ah! I should put this up on the user experiences page. :-)
>>>>>
>>>>>>
>>>>>> Thanks for all your help so far! I'll make sure to acknowledge you
>>>>>> all in my thesis :)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Thanks. Keep hacking till you get there. :-)
>>>>>
>>>>> Ranga
>>>>>
>>>>>> Andrew 
>>>>>
>>>>>
>>
>>
>
>


-- 
M. Ranganathan 

Advanced Networking Technologies Division,
National Institute of Standards and Technology (NIST),
100 Bureau Drive, Stop 8920, Gaithersburg, MD 20899. 
tel:301 975 3664 , fax:301 590 0932 http://w3.antd.nist.gov/
Advanced Networking Technologies For the People!