Francois Audet wrote:
> I can think of one scenario...
> 
> If the UAS in question is actually some sort of B2BUA. 

OK. That is a good one.

That is certainly a reason not to forbid it.

And in that case we would expect the B2BUA to follow the rules for 
proxies about handling and generating 199.

        Thanks,
        Paul

>> -----Original Message-----
>> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On 
>> Behalf Of Paul Kyzivat
>> Sent: Friday, June 13, 2008 07:07
>> To: [EMAIL PROTECTED]
>> Cc: [email protected]
>> Subject: Re: [Sip] Draft submission: draft-ietf-sip-199-00
>>
>> This all sounds like good stuff.
>>
>> However I am still scratching my head about the UAS sending a 
>> 199. While I see no reason to forbid it I'm trying to find a 
>> situation when it would be helpful. The only case I have been 
>> able to think of is:
>>
>>    There is a forking proxy upstream of the UAS, but it doesn't
>>    support 199. Yet it may delay the final response while it
>>    tries other forks. So the UAS sending the 199 makes up for
>>    the inadequacy of the forking proxy.
>>
>> The trouble with this is that it is inefficient in many 
>> cases. If each proxy that forks also supports the sending of 
>> 199, and the UAS doesn't send one, then we avoid sending the 
>> message except in cases where it is helpful. If the UAS 
>> always sends it we have increased the message count by one 
>> for all failing calls. And the majority of failing calls get 
>> no benefit from a 199.
>>
>> This is one of those cases that could probably benefit from 
>> simulation to judge the merits. My gut feel is that the costs 
>> of the UAS sending the 199 outweigh the benefits. Barring 
>> some analysis to the contrary I think I would say that a UAS 
>> SHOULD NOT send a 199. Or perhaps MAY send, but without any 
>> guidance of when.
>>
>>      Paul
>>
>> [EMAIL PROTECTED] wrote:
>>> Here are some comments on this I-D.  I don't think that any of them 
>>> modify our understanding of the proposal.  I guess this is 
>> very terse; 
>>> please use these suggestions as you see fit.
>>>
>>> * Abstract
>>>
>>> Clarify:
>>>
>>>    This specification defines a new SIP response code, 199 Early
>>>    Dialog Terminated, which a SIP entity can use to 
>> indicate upstream
>>>    that an early dialog has been terminated.  The response 
>> code can be
>>>    used by a SIP entity (a SIP proxy or UAS), to inform the UAC that
>>>    an early dialog has been terminated.  As the 199 response is a
>>>    provisional response, often the UAC will receive it before
>>>    receiving a final response to its request.
>>>
>>> * Section 1
>>>
>>>    When a forking proxy receives a non-2xx final response, 
>> it does not
>>>    always immediately forward the response upstream towards 
>> the sender
>>>    of the associated request.  Instead, the forking proxy 
>> "stores" it
>>>    and waits for further final responses from remote 
>> destinations where
>>>    the forked request was forwarded.
>>>
>>> The text does not allow for serial forking, only parallel forking, 
>>> which might be confusing to people who are more aware of serial 
>>> forking.  So amend the last sentence to:
>>>
>>>    Instead, the forking proxy "stores" it and waits for 
>> further final
>>>    responses from remote destinations where the forked request was
>>>    forwarded, and possibly forwards the request to additional
>>>    destinations.
>>>
>>> Also, Avoid using "..." except when indicating that the 
>> word is used 
>>> in a non-standard way or that one is discussing the word itself:
>>>
>>>    Instead, the forking proxy "stores" it [...]
>>>
>>> should be:
>>>
>>>    Instead, the forking proxy stores it [...]
>>>
>>> * Section 3.
>>>
>>>    REQ 1: It must be possible to indicate to the UAC that an early
>>>    dialog has been terminated before a final response is sent.
>>>
>>> Oddly, though everyone thinks they understand this sentence, it 
>>> doesn't really say what we want.  To really ensure that the UAC 
>>> understands the early dialog has been terminated before the 
>> UAS sends 
>>> a final response, the UAS would have to send 199 *and get the PRACK 
>>> saying that it was received* before sending a final response.  This 
>>> may well be worse than the present state of affairs.
>>>
>>> What we really mean is:
>>>
>>>    REQ 1: It must be possible for a UAS or proxy to send an 
>> indication
>>>    to the UAC that an early dialog has been terminated, which
>>>    indication will not be delayed waiting for a final response from
>>>    any UAS.
>>>
>>> * Section 4
>>>
>>>    When a client receives a 199 Early Dialog Terminated provisional
>>>    response it MAY release resources and procedures 
>> associated with the
>>>    early dialog the 199 response is received on.
>>>
>>> Amend to clarify the meaning of 199 independently of the 
>> consequences 
>>> of that meaning:
>>>
>>>    When a client receives a 199 Early Dialog Terminated provisional
>>>    response, it has positive knowledge that the UAS that created the
>>>    early dialog has terminated it, and so the client MAY release
>>>    resources and procedures associated with the early 
>> dialog for which
>>>    the 199 response is received.
>>>
>>> * Section 4
>>>
>>> Add this paragraph before the last paragraph:
>>>
>>>    A UAC that receives a 199 response for an early dialog MUST NOT
>>>    send any further requests on that dialog, except for a 
>> PRACK if the
>>>    199 response was sent reliably, and PRACKs for other reliable
>>>    provisional responses that are to be acknowledged.
>>>
>>> This is copied from section 7 (Backward Compatibility), but 
>> since it 
>>> is a constraint on UACs, it should also be stated in this section.
>>>
>>> * Section 4
>>>
>>>    The UAC MAY use additional information (for example the final
>>>    response which triggered the 199 response) received in the 199
>>>    response when initiating new sessions, if it is possible 
>> to avoid the
>>>    new session initiation request to be rejected.
>>>
>>> What is the meaning of the final clause?
>>>
>>> * Section 5
>>>
>>> Add "early" as marked:
>>>
>>>    When a UAS wants to terminate *an early* dialog it sends 
>> a non-2xx
>>>    SIP final response, as specified in [RFC3261].  In 
>> addition, prior
>>>    to sending the non-2xx SIP final response, the UAS MAY send a 199
>>>    response to indicate that the dialog is being terminated.
>>>
>>> This clarifies that 199 cannot be used to terminate a confirmed 
>>> dialog.
>>>
>>> (The reason a UAS may want to send a 199 is to provide this 
>>> information even when the upstream proxy does not support 199.)
>>>
>>> There is a subtlty to the second sentence:
>>>
>>> Sending the 199 *before* the final response is not necessary due to 
>>> the semantics of 199 (as it will probably reach the UAC 
>> first anyway, 
>>> and it would not matter if it did not), but rather to prevent the 
>>> upstream proxy from generating a 199 based on the final 
>> response, and 
>>> then to transmit the UAS's 199 immediately after -- if the 
>> UAS sends 
>>> the 199 first, any upstream proxy will (most likely) see the 199 
>>> before seeing the final response (which might induce the 
>> proxy to send 
>>> its own 199).
>>>
>>> * Section 6
>>>
>>>    When a forking proxy receives a non-2xx final response which
>>>    terminates one or more early dialogs and the proxy does 
>> not intend to
>>>    forward the final response immediately (due to the rules for a
>>>    forking proxy) it MUST send a 199 provisional response, for each
>>>    associated early dialog that it can associate with the final
>>>    response, upstream towards the sender of the associated request.
>>>
>>> Clarify, and note that if the proxy has already passed a 199 for an 
>>> early dialog, it need not generate one itself.  Also, I've reduced 
>>> MUST to SHOULD, because (as the following NOTE explains), the proxy 
>>> may not know of all early dialogs which are terminated by the final 
>>> response.
>>>
>>>    [...] it SHOULD initiate a 199 provisional response upstream
>>>    towards the sender of the associated request, for each terminated
>>>    early dialog, excepting those for which it has already 
>> transmitted
>>>    a 199 response.
>>>
>>> Note that the "already transmitted 199 responses" may have 
>> come from 
>>> downstream proxies as well as downstream UASs, so this 
>> consideration 
>>> applies even if we do not allow UASs to send 199s.
>>>
>>> * Section 7
>>>
>>>    Since all SIP entities involved in a session setup do 
>> not necessarily
>>>    support the specific meaning of the 199 Early Dialog Terminated
>>>    provisional response, the sender of the response MUST be 
>> prepared to
>>>    receive SIP requests associated with the dialog for which the 199
>>>    response was sent.
>>>
>>> This situation can also result due to race conditions.  Amend to:
>>>
>>>    Because of race conditions and because the client may 
>> not support the
>>>    specific meaning of the 199 provisional response, the 
>> sender of the
>>>    response MUST be prepared to receive SIP requests associated with
>>>    the dialog for which the 199 response was sent.
>>>
>>> And add a qualifier to this sentence:
>>>
>>>    If such request is received, and the receiver maintains state of
>>>    the dialogs, the receiver MUST reply to such requests with a 481
>>>    final response (unless another error response is more 
>> appropriate).
>>> * Section 7
>>>
>>> Remove "..." from this sentence and add "even" as marked:
>>>
>>>    The 199 Early Dialog Terminated response code MUST NOT replace a
>>>    final response.  A final response MUST always be sent, 
>> *even* after
>>>    one or many 199 Early Dialog Terminated provisional 
>> responses have
>>>    been sent.
>>>
>>> * Section 8
>>>
>>> Clarify this sentence to:
>>>
>>>    The 199 Early Dialog Terminated response code allows a SIP entity
>>>    to indicate to upstream entities that a specific early dialog has
>>>    been terminated, before a final response reaches the upstream
>>>    entities.
>>>
>>> Add the following:
>>>
>>>    The early dialog that has been terminated is identified 
>> by the Call-Id
>>>    header and the to-tag value of the 199 response.
>>>
>>>    Future standards may define optional additional 
>> information carried
>>>    in the headers and/or body of the response.
>>>
>>> * Section 9
>>>
>>>    A 199 Early Dialog Terminated provisional response MUST 
>> NOT contain a
>>>    new SDP offer/answer message body, but the sender of the 
>> response MAY
>>>    insert a copy of a previously sent offer/answer message body as
>>>    otherwise allowed by the offer/answer rules for a provisional
>>>    response.
>>>
>>> This rule seems excessively strict, as it seems OK to send 
>> a new SDP 
>>> answer in a 199, even if the dialog will be immediately terminated.
>>> Certainly, the UAC cannot tell the difference, as there could have 
>>> been a previous but lost 1xx response carrying the same SDP.
>>>
>>> The interaction of 199 and SDP probably needs further study...
>>>
>>> * Section 11
>>>
>>> Nit:  Use "reject" here rather than "rejects":
>>>
>>>    UAS_2 and UAS_3 *reject* the INVITE by sending a 4xx 
>> error response.
>>> Here is a modification of the example, showing how a UAS can send a 
>>> 199, and how the proxy handles it.  (You may or may not want to use
>>> this.)  I've also added the ACK's for the 4xx's, which were 
>> missing in 
>>> the original.
>>>
>>>    [...] UAS_2 and UAS_3 reject the INVITE by sending a 4xx error
>>>    response.  UAS_3 sends a 199 with its 4xx.  When P1 receives the
>>>    4xx response from UAS_2 it immediately sends a 199 Early Dialog
>>>    Terminated associated with UAS_2's dialog towards the UAC.  P1
>>>    transmits UAS_3's 199, and so does not initiate one itself for
>>>    UAS_3's dialog when it receives UAS_3's 4xx response.
>>>
>>>       UAC               P1                  UAS_2    UAS_3    UAS_4
>>>
>>>        --- INVITE ------>
>>>                          --- INVITE (leg 2) ->
>>>                          --- INVITE (leg 3) ---------->
>>>                          --- INVITE (leg 4) ------------------->
>>>                          <-- 18x (leg 2) -----
>>>        <-- 18x (leg 2) --
>>>                          <-- 18x (leg 3) --------------
>>>        <-- 18x (leg 3) --
>>>                          <-- 18x (leg 4) -----------------------
>>>        <-- 18x (leg 4) --
>>>                          <-- 4xx (leg 2) -----
>>>        <-- 199 (leg 2) --
>>>                          --- ACK (leg 2) ---->
>>>                          <-- 199 (leg 3) --------------
>>>        <-- 199 (leg 3) --
>>>                          <-- 4xx (leg 3) --------------
>>>                          --- ACK (leg 3) ------------->
>>>                          <-- 200 (leg 4) -----------------------
>>>        <-- 200 (leg 4) --
>>>        --- ACK (leg 4) ->
>>>                          --- ACK (leg 4) ---------------------->
>>>
>>> Dale
>>> _______________________________________________
>>> 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
>>>
>> _______________________________________________
>> 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
>>
> 
_______________________________________________
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