[reSIProcate] How to answer a refer that was cancelled

Francis Joanis francis.joanis at gmail.com
Mon Sep 19 21:30:12 CDT 2011


On Mon, Sep 19, 2011 at 2:05 PM, SZOKOVACS Robert
<rszokovacs at gammatelecom.hu> wrote:
> Hi,
>
> I have a resiprocate-based server accessed by a not-resiprocate-based
> client,
> sending a REFER. Sometimes I encounter the following situation:
> Since I do some async processing, it is possible that the client changes
> it's
> mind and cancels the REFER with expires=0.
> And then I'm left with an unanswered request and I can't see a way around
> it,
> if I answer it from onExpiredByClient(), it will send the reply to the
> second
> REFER, the one with expires=0.
> I suspect it's illegal for the client to send two messages in the same
> subscription without waiting for an answer, but the client does it anyway,
> so
> I need to handle it.
> Any advise?
>
> TIA
>
> br
>
> Szo
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel at resiprocate.org
> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>

Hi Robert,

I'm curious about the two REFER requests, are you receiving them as
two separate transactions (for the same dialog)?

Also, what would you want the behavior to be? I'm thinking it should
only cancel the implied subscription in the REFER but leave the
creation of the new invite (to the Refer-To target) as is. This seems
to be what is suggested in RFC 3515, Section 2.4.4.

So, I guess you should process the REFERs as usual: accept (202) the
first one, let the DUM generate the sip frag NOTIFYs when it needs to
(i.e. when you are sending the new call leg) then, upon receiving the
REFER / Expires: 0, properly accept it then end the implied
subscription (I'm rusty when it comes to handling subscriptions in
DUM, but I can check tomorrow).

If the peer UA doesn't want an implied subscription, you could also
look at norefersub (RFC 4488). If, however, it wants to cancel the
refer request (at the INVITE level) by having the new call leg
cancelled, then I'll need to dig a bit deeper and get back to you :)

Hope this helps,
Francis



If they are two different transactions, then both of them need to be replied to.



More information about the resiprocate-devel mailing list