Re: [Sip] Open Issue #7: CANCEL for non-INVITE

Christer Holmberg <christer.holmberg@lmf.ericsson.se> Wed, 19 September 2001 09:19 UTC

Received: from optimus.ietf.org (ietf.org [132.151.1.19] (may be forged)) by ietf.org (8.9.1a/8.9.1a) with ESMTP id FAA27329 for <sip-archive@odin.ietf.org>; Wed, 19 Sep 2001 05:19:17 -0400 (EDT)
Received: from optimus.ietf.org (localhost [127.0.0.1]) by optimus.ietf.org (8.9.1a/8.9.1) with ESMTP id EAA28239; Wed, 19 Sep 2001 04:35:09 -0400 (EDT)
Received: from ietf.org (odin [132.151.1.176]) by optimus.ietf.org (8.9.1a/8.9.1) with ESMTP id EAA28208 for <sip@optimus.ietf.org>; Wed, 19 Sep 2001 04:35:07 -0400 (EDT)
Received: from albatross-ext.wise.edt.ericsson.se (albatross-ext.wise.edt.ericsson.se [194.237.142.116]) by ietf.org (8.9.1a/8.9.1a) with ESMTP id EAA26860 for <sip@ietf.org>; Wed, 19 Sep 2001 04:35:05 -0400 (EDT)
Received: from fogerty.lmf.ericsson.se (fogerty.lmf.ericsson.se [131.160.11.6]) by albatross.wise.edt.ericsson.se (8.11.0/8.11.0/WIREfire-1.3) with ESMTP id f8J8YOK25323; Wed, 19 Sep 2001 10:34:24 +0200 (MEST)
Received: from lmf.ericsson.se (E005004B52C74-udp26677.lmf.ericsson.se [131.160.30.111]) by fogerty.lmf.ericsson.se (8.11.3/8.11.3) with ESMTP id f8J8YOb19639; Wed, 19 Sep 2001 11:34:24 +0300 (EET DST)
Message-ID: <3BA8588E.B54D5721@lmf.ericsson.se>
Date: Wed, 19 Sep 2001 11:34:22 +0300
From: Christer Holmberg <christer.holmberg@lmf.ericsson.se>
X-Mailer: Mozilla 4.61 [en] (WinNT; I)
X-Accept-Language: en
MIME-Version: 1.0
To: Jonathan Rosenberg <jdrosen@dynamicsoft.com>
CC: 'Rohan Mahy' <rohan@cisco.com>, Henning Schulzrinne <hgs@cs.columbia.edu>, sip@ietf.org
Subject: Re: [Sip] Open Issue #7: CANCEL for non-INVITE
References: <B65B4F8437968F488A01A940B21982BF020D68A8@DYN-EXCH-001.dynamicsoft.com>
Content-Type: multipart/mixed; boundary="------------7345A7761E1424E417220F5E"
Sender: sip-admin@ietf.org
Errors-To: sip-admin@ietf.org
X-Mailman-Version: 1.0
Precedence: bulk
List-Id: Session Initiation Protocol <sip.ietf.org>
X-BeenThere: sip@ietf.org

Hi,

I agree on this thread. Also, I don't see the problem with this issue,
EVEN if there would be non-INVITE requests in the future that can be
cancelled. The UAC and UAS should know what can be cancelled, and what
can't be, and if the UAC tries to CANCEL something else the UAS simply
returns 400/405/whatever... We could even add some response code saying
"The request can't be cancelled"...

In fact, I am pretty sure the world would have been a better place
without the CANCEL in the first place... 

NOTE: That was NOT a proposal to remove CANCEL from SIP, just my
personal opinion :)

Regards,

Christer Holmberg
Ericsson Finland



Jonathan Rosenberg wrote:
> 
> This thread has again been sidetracked, and I'd like to bring it back.
> 
> I think there is agreement that if the server can't or won't process a
> CANCEL, it simply sends some response to the CANCEL (it really doesn't
> matter whether its a 405, 400 or 200 OK), and continues processing the
> request as if nothing happened. That is always an option, and even though
> not explicitly stated, has always been possible.
> 
> The main source of contention, I think, is whether we think there might be
> future methods that can make use of a CANCEL for non-invite. I agree here
> with Rohan that since all future methods are non-INVITE, and since
> non-INVITE have to complete immediately, they really can't be useful for
> future requests.
> 
> -Jonathan R.
> 
> ---
> Jonathan D. Rosenberg, Ph.D.                72 Eagle Rock Ave.
> Chief Scientist                             First Floor
> dynamicsoft                                 East Hanover, NJ 07936
> jdrosen@dynamicsoft.com                     FAX:   (973) 952-5050
> http://www.jdrosen.net                      PHONE: (973) 952-5000
> http://www.dynamicsoft.com
> 
> 
> > -----Original Message-----
> > From: Rohan Mahy [mailto:rohan@cisco.com]
> > Sent: Monday, September 10, 2001 2:05 PM
> > To: Henning Schulzrinne
> > Cc: Christer Holmberg; Jonathan Rosenberg; sip@ietf.org
> > Subject: Re: [Sip] Open Issue #7: CANCEL for non-INVITE
> >
> >
> >
> >
> > ---- Original message ----
> > >Date: Mon, 10 Sep 2001 08:17:41 -0400
> > >From: Henning Schulzrinne <hgs@cs.columbia.edu>
> > >Subject: Re: [Sip] Open Issue #7: CANCEL for non-INVITE
> > >To: Christer Holmberg <christer.holmberg@lmf.ericsson.se>
> > >Cc: Jonathan Rosenberg <jdrosen@dynamicsoft.com>,
> > sip@ietf.org
> > >
> > >Part of the problem with this discussion is that we seem to
> > >be coming from two, I believe, valid but different
> > >conclusions:
> > >
> > >- CANCEL for non-INVITE is not generally useful
> >
> > agreed
> >
> > >- We don't know whether there will be methods or cases
> > >where it might help
> >
> > Here I disagree.  CANCEL cancels a transaction in progress.
> > Bis and guidelines are very explicit now in stating that new
> > methods should not have extended delays before responding.
> > We have a general model that shows that CANCELing a
> > transaction only makes sense for transactions that do not
> > have immediate responses.  Only INVITE is allowed to do
> > this, so only INVITE transactions can be CANCELed.
> >
> > I agree that it may be useful to cancel things other than
> > transactions, but those are new methods or mechanisms.
> > Specifically, SUBSCRIBE and REFER both have ways to cancel
> > subscriptions (unsubscriptions) and triggered INVITEs (REFER
> > with method=CANCEL).
> >
> > If I rewrote INVITE/200/ACK into non-protracted transactions
> > (say PROPOSE/200 and ACCEPT/200), I would need a new
> > mechanism to cancel proposals.  Maybe I would use a new
> > method (UNPROPOSE), or maybe I would just rePROPOSE.
> >
> > So, I know that we can't and shouldn't use the existing
> > CANCEL method for anything other than cancelling INVITE
> > transactions, but SIP is extensible enough that we will be
> > able cancel other things with new methods or mechanisms.
> >
> > thanks,
> > -rohan
> >
> >
> > >My argument is that we don't know what things we need in
> > the future.
> > >Unlike other features, CANCEL is a "socially responsible"
> > extension,
> > >i.e., it does not in any way inconvenience those that have
> > no use for
> > >it. UACs that don't need it can ignore its existence; UASs
> > and proxies
> > >just have to respond like to any other unknown method.
> > >
> > >Christer Holmberg wrote:
> > >>
> > >> Hi,
> > >>
> > >> My personal opinion is that we, like Henning said, simply
> > should have a
> > >> error code telling "sorry, I can't cancel the specific
> > request". Of
> > >> course we can, if needed, also have different error codes
> > for request
> > >> that can't be cancelled because a final response has been
> > sent, and
> > >> another code for requests that the UAS simply doesn't
> > allow - for any
> > >> reason - the UAC to CANCEL.
> > >>
> > >> For example, even if we most likely always will accept a
> > CANCEL for the
> > >> initial INVITE, there are many cases where we may not
> > accept a CANCEL
> > >> for a re-INVITE.
> > >>
> > >> Eg, if I receive a re-INVITE to change some codecs, I may
> > not accept a
> > >> CANCEL. EVEN if I would be smart enough to remember the
> > previous codecs
> > >> it is not even sure that I have resources to change them
> > back. In that
> > >> case we would need a code saying "well, I did CANCEL your
> > re-INVITE, but
> > >> now I am not able to put the old codecs back, so it would
> > probably be a
> > >> good idea to release the whole call". No, I don't think
> > we want that...
> > >> Another thinkg would be for the UAS to send a BYE, since
> > it can't put
> > >> the codecs back, but I don't think we want that either,
> > so...
> > >>
> > >> Regards,
> > >>
> > >> Christer Holmberg
> > >> Ericsson Finland
> > >>
> > >
> > >> > > - I think the complexity of CANCEL for non-INVITE on
> > the
> > >> > > server side is
> > >> > > essentially zero. If you don't implement it, you can
> > either return 481
> > >> > > (i.e., the request has already been completed) or 405
> > (but see below).
> > >> >
> > >> > Well, the proposal was pretty much that. It does
> > nothing. Just respond to
> > >> > it. The point is that a client MUSTNOT send it anymore
> > (i.e., its deprecated
> > >> > as it doesn't do anything useful).
> > >
> > >I see no complexity advantage in that. It would only be
> > sent in
> > >scenarios where it makes sense to the participants, as an
> > optimization.
> > >
> > >> >
> > >> > Right. It wasn't the proposal to respond with a 405.
> > Just a 200 OK, in fact.
> > >
> > >Responding to a method you don't understand or didn't act
> > on with a 200
> > >seems odd.
> > >
> > >> >
> > >> > > - Does anything else get simpler if we disallow
> > CANCEL for non-INVITE?
> > >> >
> > >> > The thing we want to get rid of is the usage in the
> > client, and the
> > >> > processing that, in theory, would need to happen in the
> > server if this was
> > >> > more than a no-op. For example, cancelling a SUBSCRIBE
> > or something would
> > >> > cause the subscription state to be destroyed, and a 487
> > to the SUBSCRIBE to
> > >> > be sent. With the proposal, the server just 200 OKs the
> > CANCEL, and
> > >> > otherwise ignores it. No deletion of state. No
> > generating of a special
> > >> > response to SUBSCRIBE.
> > >
> > >Again, this is purely consensual. SIP is a tool kit. I like
> > to keep a
> > >few odd tools around, particularly if they don't clutter
> > the basement.
> > >In general, if you don't like or need CANCEL, don't
> > implement it.
> > >
> > >> >
> > >> > >
> > >> > > - Under the current model, non-INVITE transactions
> > can have non-zero
> > >> > > duration, if you return a 1xx response. Thus, it is
> > at least
> > >> > > conceivable
> > >> > > that there are methods where the CANCEL could
> > actually accomplish
> > >> > > something.
> > >> >
> > >> > Well, except that you still need to cotninue
> > retransmitting the request at
> > >> > 5s intervals to trigger a response. This is wasteful,
> > and results in slow
> > >> > transactions. I had thought that we had agreed as a
> > group that non-INVITE
> > >> > requests really needed to be responded to immediately
> > to be effective.
> > >> >
> > >
> > >Again, in almost all circumstances, this is correct.
> > However, this is a
> > >mechanism that may, in terms of messaging complexity, beat
> > alternatives,
> > >such as splitting the transaction into multiple ones. Also,
> > I expect
> > >that this will be the exception for a particular method. In
> > other words,
> > >a very high fraction of requests will complete immediately,
> > but because
> > >of some special circumstance (slow server, special
> > processing, failover,
> > >what have you), an occasional transaction takes longer.
> > >
> > >One analogy is ^C in Unix: almost all commands terminate
> > almost
> > >immediately and ^C is not helpful. However, on occasion, a
> > command does
> > >something unexpected and takes much longer (often, because
> > of some
> > >temporary failure such as an NFS volume that disappeared)
> > and it is very
> > >useful to be able to get rid of it. General timeout doesn't
> > help, since
> > >in other cases you want the request to keep trying.
> > >
> > >_______________________________________________
> > >Sip mailing list  http://www1.ietf.org/mailman/listinfo/sip
> > >This list is for NEW development of the core SIP Protocol
> > >Use sip-implementors@cs.columbia.edu for questions on
> > current sip
> > >Use sipping@ietf.org for new developments on the
> > application of sip
> >