Internet DRAFT - draft-polk-insipid-bkwds-compatibility-proposal

draft-polk-insipid-bkwds-compatibility-proposal




Network WG                                                   James Polk
Internet-Draft                                               Paul Jones
Intended status: PS                                       Cisco Systems
Expires: April 21, 2014                                    Oct 21, 2013
                                                           


    A Proposal for Backwards Compatibility of the INSIPID Session-ID 
         draft-polk-insipid-bkwds-compatibility-proposal-03.txt

Abstract

   This is a proposal for backwards compatibility for the INSIPID 
   Session-ID SIP header.

   This draft is never intended to reach RFC status, and is written 
   merely to make a concrete proposal that everyone can view - and if 
   agreed upon, it will be woven into the INSIPID solution draft.



Status of this Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six 
   months and may be updated, replaced, or obsoleted by other documents
   at any time.  It is inappropriate to use Internet-Drafts as 
   reference material or to cite them other than as "work in progress."

   This Internet-Draft will expire on April 21, 2014.

Copyright Notice

   Copyright (c) 2013 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with 
   respect to this document.  Code Components extracted from this 
   document must include Simplified BSD License text as described in 
   Section 4.e of the Trust Legal Provisions and are provided without 
   warranty as described in the Simplified BSD License.



Polk & Jones             Expires April 21, 2014                [Page 1]
Internet-Draft     Session-ID Backwards Compatibility          Oct 2013


1.  Introduction

   This is a proposal for backwards compatibility for the INSIPID 
   Session-ID SIP header. 

   We, in INSIPID, have the 'kaplan draft' specifying a legacy solution
   [kaplan]. We have the 'jones draft' proposing the current solution 
   [Insipid], which addresses a wider set of requirements than the 
   kaplan draft. Let us call this the 'polk proposal' for backwards 
   compatibility, given that this topic has become such an issue - 
   let's give it a name. 

   The current way in which the jones draft specifies the Session-ID 
   message (or call) flow is articulated here:

   Alice invites Bob to a call. She includes her UUID, but not his, 
   into the Session-ID header-value. Bob's UUID is inserted by his UA 
   (or call server acting on behalf of his UA).
   
   INVITE
   from Alice to Bob
   Session-ID: aeffa652b22911dfa81f12313a006823; 

   Bob receives Alice's INVITE and responses (in a perfect world right 
   away because everything in Alice's INVITE is perfectly acceptable to
   Bob) with a 200 OK response. This response contains Bob's UUID. 
   Alice's UUID has been copied and moved to the 'remote=' portion of 
   the Session-ID header-value.

   200 OK
   from Bob to Alice
   Session-ID: be11afc8b22911df86c412313a006823; 
               remote=aeffa652b22911dfa81f12313a006823

   Once Alice receives this 200 OK from Bob, she transmits the 
   appropriate ACK. The only difference in this Session-ID is the order
   of the UUIDs.

   ACK
   from Alice to Bob
   Session-ID: aeffa652b22911dfa81f12313a006823; 
               remote=be11afc8b22911df86c412313a006823

      Session ID
         ---     Alice             Bob             Carol
        {A}        |-----INVITE---->|                |
        {B,A}      |<----200 OK-----|                |
        {A,B}      |------ACK------>|                |

   Figure 1. Basic Call Flow Without Proposed Session-ID Modification



Polk & Jones             Expires April 21, 2014                [Page 2]
Internet-Draft     Session-ID Backwards Compatibility          Oct 2013

   This is all fine and good when conversing between jones draft 
   implementations. In fact, all is fine and good between kaplan draft 
   implementations (that all have a single UUID in the Session-ID 
   header-value. However, problems start happening if either Alice or 
   Bob is a jones implementation and the other UA is a kaplan 
   implementation, and it does not matter which is which.

   This draft proposes how we can make a single-UUID implementation 
   interoperate with a two-UUID implementation with the single-UUID 
   implementation requiring zero new code.

   This version includes a couple of suggested alternative means for 
   indicating which implementation an endpoint is compatible with. 
   These suggestions are each outside of the Session-ID header, and 
   each have their own failings.

   This draft is never intended to reach RFC status, and is written 
   merely to make a concrete proposal that everyone can view and 
   reference in discussions.

2.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119] when they 
   appear in ALL CAPS. These words may also appear in this document in 
   lower case as plain English words, absent their normative meanings.


3.  Session-ID Backwards Compatibility Proposal

   This proposal involves having all jones implementations send two 
   UUIDs in all their messages, including the initial INVITE. Alice 
   will generate her UUID value the same as she does in the current 
   jones draft. However, she will include a second temporary 'null' 
   UUID in the remote= part of the Session-ID header-value, just as the
   following example shows:

   INVITE
   from Alice to Bob
   Session-ID: aeffa652b22911dfa81f12313a006823; 
               remote=00000000000000000000000000000000

   A 'null' UUID is 32 zeros, and MUST NOT be anything other than 32 
   zeros in length, i.e., not 'remote=' or 'remote=0'. This has huge 
   benefits for 2 different implementations (a jones and a kaplan 
   implementation). Not only is Alice indicating that she is a jones 
   compatible version to all entities along the signaling path, but if 
   she gets back just her UUID in Bob's 200 OK response or her UUID 
   plus the temporary null value in the 'remote=' in the same order she
   sent it in, she knows that Bob is a kaplan implementation - because 
   kaplan implementations will reflect the initial UUID as the complete


Polk & Jones             Expires April 21, 2014                [Page 3]
Internet-Draft     Session-ID Backwards Compatibility          Oct 2013

   Session-ID and remove any other values in the header.

   200 OK
   from Bob to Alice
   Session-ID: aeffa652b22911dfa81f12313a006823

   Or

   200 OK
   from Bob to Alice
   Session-ID: aeffa652b22911dfa81f12313a006823; 
               remote=00000000000000000000000000000000


      Session ID
         ---     Alice             Bob             Carol
        {A,null}   |-----INVITE---->|                |
        {A}        |<----200 OK-----|                |
        {A}        |------ACK------>|                |

   Figure 2a. Basic Call Flow With Proposed Session-ID Modification

   Or

      Session ID
         ---     Alice             Bob             Carol
        {A,null}   |-----INVITE---->|                |
        {A,null}   |<----200 OK-----|                |
        {A,null}   |------ACK------>|                |

   Figure 2a. Basic Call Flow With Proposed Session-ID Modification

   If Alice receives two UUIDs back in Bob's response, such as this

   200 OK
   from Bob to Alice
   Session-ID: be11afc8b22911df86c412313a006823; 
               remote=aeffa652b22911dfa81f12313a006823

   Alice knows Bob has a jones implementation.

      Session ID
         ---     Alice             Bob             Carol
        {A,null}   |-----INVITE---->|                |
        {B,A}      |<----200 OK-----|                |
        {A,B}      |------ACK------>|                |

   Figure 3. Basic Call Flow With Proposed Session-ID Modification

   In either case, she sends two UUIDs back in her response, to ensure 
   she is always broadcasting which implementation she is compatible 
   with.


Polk & Jones             Expires April 21, 2014                [Page 4]
Internet-Draft     Session-ID Backwards Compatibility          Oct 2013


   Either this when Bob is a kaplan implementation - learned by Bob not
   sending a second UUID in his response.

   ACK
   from Alice to Bob
   Session-ID: aeffa652b22911dfa81f12313a006823

   or this, when Bob included his UUID in the response.

   ACK
   from Alice to Bob
   Session-ID: aeffa652b22911dfa81f12313a006823; 
               remote=be11afc8b22911df86c412313a006823

   Alternatively, we could modify this proposal to have Alice (a jones 
   implementation), and the (any) initiator of the SIP request, always 
   send 

   Session-ID: aeffa652b22911dfa81f12313a006823; 
               remote=00000000000000000000000000000000

   because this appears to do no harm to a kaplan implementation 

   because, first, the UA will ignore the second UUID, and second, it 
   will not include this second UUID in any response. It is just a 
   question of how closely kaplan implementations follow the kaplan 
   draft, which states that all values in the Session-ID header-value 
   are merely copied into the response. We have heard about 
   inconsistencies as to how this is in fact implemented.

      Session ID
         ---     Alice             Bob             Carol
        {A,null}   |-----INVITE---->|                |
        {A}        |<----200 OK-----|                |
        {A,null}   |------ACK------>|                |

   Figure 4. Basic Call Flow With Mod. to Proposed Session-ID 
             Modification

   This will affect all subsequent call flows, and I'm not opposed to 
   doing this if the WG wants to go in this direction instead.


3.1 When Alice is the kaplan implementation and she initiates

   If Alice is the kaplan implementation and she contacts a jones 
   implementation, the same will be true as above, but let me walk 
   through that example. Let us say Alice (a kaplan) invites Bob (a 
   jones) to a session. It would look like this:




Polk & Jones             Expires April 21, 2014                [Page 5]
Internet-Draft     Session-ID Backwards Compatibility          Oct 2013

   INVITE
   from Alice to Bob
   Session-ID: aeffa652b22911dfa81f12313a006823

   Alice would generate 'the' UUID for this session with Bob.

   Bob's response (in a perfect world) would be this:

   200 OK
   from Bob to Alice
   Session-ID: aeffa652b22911dfa81f12313a006823

   Bob has learned Alice is a kaplan implementation, so he merely 
   reflects Alice's UUID back to her in his response. 

   Below is Alice's ACK

   ACK
   from Alice to Bob
   Session-ID: aeffa652b22911dfa81f12313a006823

      Session ID
         ---     Alice             Bob             Carol
        {A}        |-----INVITE---->|                |
        {A}        |<----200 OK-----|                |
        {A}        |------ACK------>|                |

   Figure 5. Basic Call Flow With Alice being a Kaplan Implementation 
             And Bob being a Jones Implementation


3.2 Call Transfer 

   For the case where both Alice and Bob are jones implementations, the
   initial INVITE would have the sender's UUID and the 'remote=null' 
   (32 zeros) Session-ID. The same is true for the INVITE request as a 
   result of the REFER message - to Carol in most examples, including 
   in the INSIPID solution draft []. 

   In the next two sub-sections, Alice is a kaplan implementation, and 
   Bob is a jones implementation.

3.2.1 Transferee is a kaplan implementation

   In this case, Alice and Bob are in a session, and Bob transfers 
   Alice to Carol (a jones implementation) using a REFER.

   Alice is the kaplan implementation and Bob is the jones 
   implementation in this scenario. Since Alice only provides a single 
   UUID in the initial INVITE, she is indicating to all signaling 
   entities in the signaling path that she is a kaplan implementation. 



Polk & Jones             Expires April 21, 2014                [Page 6]
Internet-Draft     Session-ID Backwards Compatibility          Oct 2013

   Therefore there is only every one UUID, regardless of whether Carol 
   is a kaplan implementation or a jones implementation.

      Session ID
         ---     Alice             Bob             Carol
        {A}        |-----INVITE---->|                |
        {A}        |<----200 OK-----|                |
        {A}        |------ACK------>|                |
                   |                |                |
        {A}        |<---reINVITE----| Bob puts Alice on Hold
        {A}        |-----200 OK---->|                |
        {A}        |<------ACK------|                |
                   |                |                |
        {A}        |<----REFER------| Bob asks Alice to call Carol
        {A}        |-----200 OK---->|                |
        {A}        |<------ACK------|                |
                   |                |                |
        {A}        |-----NOTIFY---->|                |
        {A}        |<----200 OK-----|                |
                   |                |                |
        {A}        |----------------------INVITE---->|
        {A}        |<---------------------200 OK-----|
        {A}        |-----------------------ACK------>|
                   |                |                |
        {A}        |-----NOTIFY---->|                |
        {A}        |<----200 OK-----|                |

   Figure 6. Call Transfer where Transferee is a kaplan implementation 


3.2.2 Transferee is a jones implementation
   
   In this case, Alice and Bob are in a session, and Alice transfers 
   Bob to Carol (a jones implementation) using a REFER.

   Alice is the kaplan implementation and Bob is the jones 
   implementation in this scenario. Since Alice only provides a single 
   UUID in the initial INVITE, she is indicating to all signaling 
   entities in the signaling path that she is a kaplan implementation. 
   Therefore there is only every one UUID, *except* when Bob, a jones 
   implementation, initiates a new SIP request to any entity other than
   Alice. We want any jones implementation to constantly be looking for
   other jones implementations so we have the exact same message flow 
   *until* Bob sends his INVITE to Carol.

   Bob, a jones implementation, told to contact Carol - who he wants to
   determine if she is another jones implementation , includes a 
   'remote=null' value as the second UUID in the Session-ID 
   header-value.

   INVITE
   from Bob to Carol


Polk & Jones             Expires April 21, 2014                [Page 7]
Internet-Draft     Session-ID Backwards Compatibility          Oct 2013

   Session-ID: aeffa652b22911dfa81f12313a006823;
               remote=00000000000000000000000000000000

   Carol sees this INVITE with 2 UUIDs where the second is a null value
   (in the Session-ID header-value), therefore she understands Bob to 
   be a jones implementation, so she responses with this 200 OK, 
   indicating that she, too, is a jones implementation. Bob's UUID has 
   been copied and moved to the 'remote=' portion of the Session-ID 
   header-value.

   200 OK
   from Carol to Bob
   Session-ID: cf26afc8b22911df86c412313a006823; 
               remote=aeffa652b22911dfa81f12313a006823

   Once Bob receives this 200 OK from Carol, he transmits the 
   appropriate ACK. The only difference in this Session-ID is the order
   of the UUIDs.

   ACK
   from Bob to Carol
   Session-ID: aeffa652b22911dfa81f12313a006823; 
               remote=cf26afc8b22911df86c412313a006823


      Session ID
         ---     Alice             Bob             Carol
        {A}        |-----INVITE---->|                |
        {A}        |<----200 OK-----|                |
        {A}        |------ACK------>|                |
                   |                |                |
        {A}        |---reINVITE---->| Alice puts Bob on Hold
        {A}        |<-----200 OK----|                |
        {A}        |------ACK------>|                |
                   |                |                |
        {A}        |------REFER---->| Alice asks Bob to call Carol
        {A}        |<-----200 OK----|                |
        {A}        |------ACK------>|                |
                   |                |                |
        {A}        |<---NOTIFY------|                |
        {A}        |----200 OK----->|                |
                   |                |                |
        {A,null}   |                |-----INVITE---->|
        {C,A}      |                |<----200 OK-----|
        {A,C}      |                |------ACK------>|
                   |                |                |
        {A}        |<---NOTIFY------|                |
        {A}        |----200 OK----->|                |

   Figure 7. Call Transfer where Transferee is a jones implementation 




Polk & Jones             Expires April 21, 2014                [Page 8]
Internet-Draft     Session-ID Backwards Compatibility          Oct 2013

4.  Any More Call Flows Necessary?

   I hope readers familiar with the INSIPID work understand this 
   proposal by now, but I will do more call flows if needed.


5. Flags Outside of the Session-ID to Indicate Compliance with a 
   Particular Implementation

   There have been to date two alternatives discussed on the mailing 
   list regarding a flag to identify which implementation an endpoint 
   is; namely a new option tag and a Contact header feature tag. Both 
   of these will not work IMO for the following reasons:

   A new Option tag 

   - Option tags are indications of support (or not) for one or more 
     particular SIP extensions. Kaplan draft endpoints support the 
     Session-ID extension. Jones implementations will support the 
     Session-ID extension. However, what could be a proper indication 
     for 'which' Session-ID implementation an endpoint is compliant 
     with that does not involve writing new code in kaplan endpoints, 
     which is not a desired outcome (to force all kaplan 
     implementations to write new code)? What does an endpoint indicate
     if it supports both kaplan and jones implementations? 


   A Contact header feature tag 

   - the Contact header is not part of a SIP MESSAGE method request, 
     and I find no reason to limit this particular new capability to 
     "not to be used with MESSAGE requests" (ever).


6.  

   
7.  Acknowledgements

   To Christer  Holmberg, Keith Drage, Paul Kyzivat and Hadriel Kaplan 
   for the helpful comments.


8.  IANA Considerations

   null


9.  Security Considerations

   null



Polk & Jones             Expires April 21, 2014                [Page 9]
Internet-Draft     Session-ID Backwards Compatibility          Oct 2013


10. References

10.1 Normative References  

 [RFC2119] S. Bradner, "Key words for use in RFCs to Indicate
           Requirement Levels", RFC 2119, March 1997

 [Insipid] P. Jones, C. Pearce, J. Polk, G. Salgueiro, "End-to-End 
           Session Identification in IP-Based Multimedia Communication 
           Networks", "work in progress",  


10.2 Informative References  

 [kaplan]  H. Kaplan "A Session Identifier for the Session Initiation 
           Protocol (SIP)", "work in progress", August 2013


Author's Addresses

   James Polk
   Cisco Systems, Inc.
   8017 Hallmark Dr.
   North Richland Hills, TX 76182
   USA
	
   Phone: +1 817 271 3552
   Email: jmpolk@cisco.com


   Paul E. Jones
   7025 Kit Creek Rd.
   Research Triangle Park, NC, USA
   +1 919 476 2048

   mailto: paulej@packetizer.com

















Polk & Jones             Expires April 21, 2014               [Page 10]