Hi,

If I implement UA, I would not send the UPDATE request with an offer
unless PRACK transaction is completed.
but other ua may send these UPDATE request. Then my ua should do something.
I think that offer-answer draft would discribe it.

I want to confirm which scenario is appropriate, and which one is illegal.

my comment inline.

Regards,
Shinji

Paul Kyzivat <[EMAIL PROTECTED]>
>Shinji,
>
>I realize I haven't responded to your earlier o/a question.
>You have obviously been looking deeply into this subject, and I haven't 
>had time to give a studied answer.
>
>The collection of RFCs that touch on offer/answer don't fit together 
>perfectly. It takes a lot of "reading tea leaves" to put it all together 
>and make sense of it. For the most part it has been concluded that only 
>certain usages are valid, because the others lead to inconsistent 
>results or violate some aspect of one or more of the RFCs. There was an 
>extended discussion of all this on the mailing list some years ago, 
>which then faded into folklore. We later realized that such folklore 
>needed to be formally recorded, which is what led to the offeranswer draft.
>
>The end result is that if you simply look at one RFC, such as 3311, and 
>construct flows that are consistent with it, then you are likely to come 
>up with some that aren't workable for some reason not stated in 3311.
>
>OKUMURA Shinji wrote:
>> Hi,
>> 
>> I have any questions about sending offer by UPDATE request.
>> 
>> RFC3311/5.1 Sending an UPDATE says,
>> 
>>    The rules for inclusion of offers and answers in SIP messages as
>>    defined in Section 13.2.1 of RFC 3261 still apply.  These rules exist
>>    to guarantee a consistent view of the session state.  This means
>>    that, for the caller:
>> 
>>       o  If the UPDATE is being sent before completion of the initial
>>          INVITE transaction, and the initial INVITE contained an offer,
>>          the UPDATE can contain an offer if the callee generated an
>>          answer in a reliable provisional response, and the caller has
>>          received answers to any other offers it sent in either PRACK or
>>          UPDATE, and has generated answers for any offers it received in
>>          an UPDATE from the callee.
>> 
>>       o  If the UPDATE is being sent before completion of the initial
>>          INVITE transaction, and the initial INVITE did not contain an
>>          offer, the UPDATE can contain an offer if the callee generated
>>          an offer in a reliable provisional response, and the UAC
>>          generated an answer in the corresponding PRACK.  Of course, it
>>          can't send an UPDATE if it has not received answers to any
>>          other offers it sent in either PRACK or UPDATE, or has not
>>          generated answers for any other offers it received in an UPDATE
>>          from the callee.
>> 
>>       o  If the UPDATE is being sent after the completion of the initial
>>          INVITE transaction, it cannot contain an offer if the caller
>>          has generated or received offers in a re-INVITE or UPDATE which
>>          have not been answered.
>> 
>> According to the description above, The following scenarios seem
>> to be allowed.(before sending PRACK)
>> 
>>     A                               B
>>     |                               |
>>     |ini-INVITE (offer0)            |
>>     |------------------------------>|
>>     |                               |
>>     |              1xx-rel (answer0)|
>>     |<------------------------------|
>>     |                               |
>>     |UPDATE (offer1)                |
>>     |==============================>|
>>     |                               |
>> 
>>     A                               B
>>     |                               |
>>     |re-INVITE (offer0)             |
>>     |------------------------------>|
>>     |                               |
>>     |              1xx-rel (answer0)|
>>     |<------------------------------|
>>     |                               |
>>     |UPDATE (offer1)                |
>>     |==============================>|
>>     |                               |
>
>Your point in the above is that the UPDATE is being sent prior to the 
>PRACK, right?

Yes.

>Would you then expect to be able to send yet another offer in the PRACK???

No, I think following PRACK must not include offer.

> From B's perspective there is the possibility that there was a PRACK 
>and it was lost or delayed. This then gets very complex to interpret. 
>IMO this is at least a very bad idea.

I agree. B may send 4xx(maybe 491) for UPDATE. But is following
sequences illegal ? 

    A                               B
    |                               |
    |ini-INVITE (offer0)            |
    |------------------------------>|
    |                               |
    |              1xx-rel (answer0)|
    |<------------------------------|
    |                               |
    |UPDATE (offer1)                |
    |==============================>|
    |                               |
    |PRACK(no offer)                |
    |------------------------------>|
    |                               |
    |              answer1 (2xx-UPD)|
    |<==============================|
    |                               |

or crossing case

    A                               B
    |                               |
    |ini-INVITE (offer0)            |
    |------------------------------>|
    |                               |
    |              1xx-rel (answer0)|
    |<------------------------------|
    |                               |
    |PRACK(no offer)                |
    |--------------\  /============>|
    |               \/              |
    |offer1(UPD)    /\              |
    |==============/  \------------>|
    |                               |
    |              answer1 (2xx-UPD)|
    |<==============================|
    |                               |
    |                     500(PRACK)|
    |<------------------------------|
    |                               |
    |PRACK(no offer)                |
    |------------------------------>| incremented CSeq
    |                               |
    |                               |

>>     A                               B
>>     |                               |
>>     |re-INVITE (no offer)           |
>>     |------------------------------>|
>>     |                               |
>>     |UPDATE (offer1)                |
>>     |==============================>|
>>     |                               |
>
>This clearly can't work. B will be working on generating an offer, so 
>this is just inviting a complex glare condition.
>
>So this is certainly a bad practice, if not illegal.

Yes, I agree. A should not send this UPDATE, but if B receive it,
B must do something. BCP I think is following,

    A                               B
    |                               |
    |re-INV (no offer)              |
    |------------------------------>| --+
    |                               |   |
    |offer1(UPD)                    |   |
    |==============================>|   | The 1st reliable response
    |                               |   |
    |              answer1 (2xx-UPD)|   |
    |<==============================|   |
    |                               |   |
    |                         offer2|   |
    |                  (1xx-rel/2xx)|   |
    |<------------------------------| <-+ Wait until answer1
    |                               |
    | answer2 (PRACK/ACK)           |
    |------------------------------>|
    |                               |

or crossing case

                A                               B
                |                               |
                |re-INV (no offer)              |
                |------------------------------>| --+
                |                        offer2 |   |
                |offer1(UPD)       (1xx-rel/2xx)|   |
                |============\  /===============| <-+ The 1st reliable response
                |             \/                |
                |             /\                |
                |<===========/  \==============>|
                |                               |
                |                       491(UPD)|
                |<------------------------------|
                |                               |
                | answer2 (PRACK/ACK)           |
 Wait until 491 |------------------------------>|
                |                               |


>I don't have time right now to dig into all your other cases. But let me 
>wrap up for now this way:
>
>The best way we found to resolve all of these alternatives in the o/a 
>draft was to reformulate by giving just the patterns that are known to 
>be valid. Others, that might seem to be valid according to one of the 
>RFCs, are to be avoided.
>
>In retrospect, it would have been better for the RFCs to have been much 
>more explicit and constraining.
>
>       Thanks,
>       Paul
>
>>    and for the callee:
>> 
>>       o  If the UPDATE is being sent before the completion of the INVITE
>>          transaction, and the initial INVITE contained an offer, the
>>          UPDATE cannot be sent with an offer unless the callee has
>>          generated an answer in a reliable provisional response, has
>>          received a PRACK for that reliable provisional response, has
>>          not received any requests (PRACK or UPDATE) with offers that it
>>          has not answered, and has not sent any UPDATE requests
>>          containing offers that have not been answered.
>> 
>>       o  If the UPDATE is being sent before completion of the INVITE
>>          transaction, and the initial INVITE did not contain an offer,
>>          the UPDATE cannot be sent with an offer unless the callee has
>>          sent an offer in a reliable provisional response, received an
>>          answer in a PRACK, and has not received any UPDATE requests
>>          with offers that it has not answered, and has not sent any
>>          UPDATE requests containing offers that have not been answered.
>> 
>>       o  If the UPDATE is being sent after the completion of the initial
>>          INVITE transaction, it cannot be sent with an offer if the
>>          callee has generated or received offers in a re-INVITE or
>>          UPDATE which have not been answered.
>> 
>> According to the description above, The following scenarios seem
>> to be allowed.(before receiving PRACK)
>> 
>>     A                               B
>>     |                               |
>>     |             re-INVITE (offer0)|
>>     |<------------------------------|
>>     |                               |
>>     |1xx-rel (answer0)              |
>>     |------------------------------>|
>>     |                               |
>>     |UPDATE (offer1)                |
>>     |==============================>|
>>     |                               |
>
>
>
>> 
>>     A                               B
>>     |                               |
>>     |              re-INV (no offer)|
>>     |<------------------------------|
>>     |                               |
>>     |UPDATE (offer1)                |
>>     |==============================>|
>>     |                               |
>> 
>> Is my understanding correct?
>> Some scenarios seem to be allowed only for re-INVITE.
>> is this what the author intended?
>> If not, which is not intended scenario?
>> 
>> Regards,
>> Shinji
_______________________________________________
Sip mailing list  https://www.ietf.org/mailman/listinfo/sip
This list is for NEW development of the core SIP Protocol
Use [EMAIL PROTECTED] for questions on current sip
Use [EMAIL PROTECTED] for new developments on the application of sip

Reply via email to