[sipcore] Need RFC 5627-bis (GRUU improvements and clarifications, and RFC 3261 update)

Iñaki Baz Castillo <ibc@aliax.net> Fri, 05 July 2013 12:55 UTC

Return-Path: <ibc@aliax.net>
X-Original-To: sipcore@ietfa.amsl.com
Delivered-To: sipcore@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 06E7411E82CC for <sipcore@ietfa.amsl.com>; Fri, 5 Jul 2013 05:55:36 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.639
X-Spam-Level:
X-Spam-Status: No, score=-2.639 tagged_above=-999 required=5 tests=[AWL=0.038, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, MIME_8BIT_HEADER=0.3, RCVD_IN_DNSWL_LOW=-1]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Cqft2aCHR9Pt for <sipcore@ietfa.amsl.com>; Fri, 5 Jul 2013 05:55:31 -0700 (PDT)
Received: from mail-qc0-f180.google.com (mail-qc0-f180.google.com [209.85.216.180]) by ietfa.amsl.com (Postfix) with ESMTP id C7ACA11E82C5 for <sipcore@ietf.org>; Fri, 5 Jul 2013 05:55:30 -0700 (PDT)
Received: by mail-qc0-f180.google.com with SMTP id a1so1211183qcx.39 for <sipcore@ietf.org>; Fri, 05 Jul 2013 05:55:29 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type :content-transfer-encoding:x-gm-message-state; bh=L+xQyeezWNR4giWGuLOnhz/0xV8YSJs5FrrbNEF+7Z4=; b=JJs4kTS32tSHPz7caDgtBNIqZNJcsDKmh/3PaZsdfBm3QUUc9osoKNkqyLQ0J8zmv6 X7iMVpgXDscPPaNNYi44JdMpLOqQ00uIQUhPziBwWQJnx1+4csdGryCah4N0U/5eAuJW jPp75j20irLtLTRo/RTL01F0asfF6apU3qU5X7/i6Y4bnCmbYIuFbcHyBtgjOYvuC4Y/ f9At7bog6Ewf0mv3UJq6yhto/CjOktVycgk9LDHSQqjvf1Nt+FqEaEPUEz05DjnubPux GqyPEHwtMKMKnE8VjuMhacdAJi53zgxBc5/I5HiIqeYtdMjocH0VAIE2/l+ST7Gqq8un sNpA==
X-Received: by 10.224.59.142 with SMTP id l14mr8829698qah.22.1373028929666; Fri, 05 Jul 2013 05:55:29 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.49.72.132 with HTTP; Fri, 5 Jul 2013 05:55:09 -0700 (PDT)
From: Iñaki Baz Castillo <ibc@aliax.net>
Date: Fri, 05 Jul 2013 14:55:09 +0200
Message-ID: <CALiegfkkB9LruWe88xNEHVDtRr-6NfTzTey1HFddBkqCgOmmtw@mail.gmail.com>
To: "SIPCORE (Session Initiation Protocol Core) WG" <sipcore@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Gm-Message-State: ALoCoQlKmYPc0jeb/Vf026dzUTjvw+V96EH7IQeWj6Ny4y/9GklsHb8SdYoJ3Xm2XFiY1sBtw+Wl
Subject: [sipcore] Need RFC 5627-bis (GRUU improvements and clarifications, and RFC 3261 update)
X-BeenThere: sipcore@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: SIP Core Working Group <sipcore.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/sipcore>, <mailto:sipcore-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/sipcore>
List-Post: <mailto:sipcore@ietf.org>
List-Help: <mailto:sipcore-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/sipcore>, <mailto:sipcore-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 05 Jul 2013 12:55:36 -0000

Hi, after leading a lot with Outbound and GRUU I think there are well
known problems and specification issues that IMHO should be addressed
in some kind of RFC 5627-bis.


The problem
------------------

alice --- OP --- Registrar --- bob

- OP is an Outbound EDGE Proxy.
- Registrar is GRUU capable.

Flow showing the problem:

- alice registers requesting GRUU.
- OP adds Path.
- alice obtains a GRUU URI.

case A)

1) alice calls bob by using her GRUU in Contact. alice also requests
Outbound usage by adding ;ob in Contact of INVITE.

2) OP adds Record-Route.

3) OP routes to registrar which adds Record-Route and routes to Bob.

4) Bob sends INFO to alice.

5) Registrar receives INFO with GRUU RURI (;gr), removes Route
pointing to it, and still has Route with Outbound flow token
identifier pointing to OP.

6) Registrar decides to route based on RURI GRUU so performs lookup
and obtains the binding for such a GRUU URI, and of course adds Route
mirroring the registration Path.

7) INFO arrives to OP with Route belonging to the dialog (with
Outbound flow identifier) and *also* Route produced by the Path.
Typically this means "duplicated  route set". So it could fail routing
the request (loop), and OF COURSE, Route set is broken (RFC 3261)
since Route set has been modified within a dialog.


case B)

1) alice calls bob by using her GRUU in Contact. alice does NOT
request Outbound usage (she does NOT add ;ob in Contact of INVITE)

2) OP does NOT add R-R.

3) OP routes to registrar which adds Record-Route and routes to Bob.

4) Bob sends INFO to alice.

5) Registrar receives INFO with GRUU RURI (;gr), removes Route pointing to it.

6) Registrar routes based on GRUU so performs lookup and obtains the
binding for such a GRUU URI, and of course adds Route mirroring the
registration Path.

7) INFO arrives to OP with Route produced by the registration Path. OP
will be able to route the request, of course, but Route set has also
been modified (breaks RFC 3261).

8) Now alice wants to send BYE to bob. It just adds to the request the
Route mirroring R-R received in the 200 for the initial INVITE, which
just contains the Route pointing to the registrar (since OP did not
R-R).

9) OP receives an in-dialog request *without* a Route pointing to it.
In several proxy configurations this request would be rejected (why
does the in-dialog request arrive to OP if it did not R-R?). One could
argue "alice should send BYE to Registrar by following the Route set
rules", but this is not how things work in Outbound, even less if the
transport is WebSocket and the UA can just talk with OP).



In both cases Route set is modified during a dialog and breaks RFC
3261. My opinion: This is GOOD since it makes possible for the dialog
to continue alive even if the TCP connection between alice and OP was
closed and re-opened (new Outbound flow token identifier, refreshed in
a new registration so new Path).

The "nice" solution to avoid problem in case a) dot 7 is:

If a Registrar receives an in-dialog request with a GRUU RURI pointing
to it, it MUST remove all the Route header present in the request (and
ignore them), and then do lookup, replace RURI with the real binding
and add Route mirroring registration Path values. After lot of
thinking this seems to be the best and only? solution for GRUU to
properly work for in-dialog requests.


So I propose a new work RFC 5627-bis to clarify all of this, and also
to "update RFC 3261" stating that dialog Route set can be modified if
GRUU is used as Contact by any of the peers.


Thoughts?

Best regards.





--
Iñaki Baz Castillo
<ibc@aliax.net>