Dear Ken Ho,
Thank you for your comments.

- Scenalio 1:
First, I explain Scenalio 1. 
Scenalio 1 seems to describe about the problem which would happen when the UAS 
recieves a re-transmitted INVITE after it terminates the server transaction (on 
sending a 200 OK response).

I guess the Scenalio1 is described as following sequence flow.

   Alice                             Bob
     |                                |
     |           INVITE F1            |
     |------------------------------->|
     |     180 F2(Packet loss)        |
     |         X<---------------------|
     |                                |
     |     200 F3(Packet loss)        |
     |         X<---------------------| Terminate(ServerTransaction)
     |                                |
     |    INVITE F4(Retransmission)   |
     |------------------------------->|
     |                                |
     |                                |


In this case, according to RFC3261, I think that the UAS performs followings 
procedures:
        
1. At first, searching the server transaction which matches the re-transmitted 
INVITE.
2. But the server transaction for the re-transmitted INVITE has terminated when 
it sent 200 OK.
3. Then the TU receives the INVITE, and the TU determines whether it is the 
request request within a dialog. or not.
4. But the re-transmitted INVITE doesn't match any existing dialog because it 
has no To-tag value.

RFC3261 doesn't seem to describe how the TU should behave in such a situation. 
(If there are written parts in RFC3261, would you let me know those?)

Please let me know if I misunderstood about this.

I think there are two ways to implement SIP UA. Such as below:
Option 1: To ignore the re-transmitted INVITE
Option 2: To handle the re-transmitted as new request INVITE assuming it is 
outside of a dialog

If you choose option 2, the dialogs would be established with same Call-ID and 
From-tag, but it would be established different To-tags. See the following 
sequence.

   Alice                             Bob
     |                                |
     |         ini-INVITE F1          |
     |------------------------------->|
     |     180 F2(Packet loss)        |
     |         X<---------------------|
     |                                |
     |        200 F3(To-tag A)        |
     |         X<---------------------| Terminate(ServerTransaction)
     |                                |
     |    INVITE F4(Retransmission)   |
     |------------------------------->| Make new Transaction
     |        180 F5(To-tag B)        |
     |<-------------------------------| Establish Dialog(Early) B
     |                                |
     |    200 F6(Retransmission,F3)   |
     |<-------------------------------| Establish Dialog A
     |            ACK F7              |
     |------------------------------->|
     |                                |
     |                                |

I think this sequence (Option 2) is not a good behavior, because a different 
dialog is established when a re-transmitted INVITE received. For avoiding this 
situation, I think we should consider how to distinguish the re-transmitted 
INVITE.
I think it is a good idea for handling this case that TU would check From-tag + 
Call-ID and branch and distinguish the re-transmitted INVITE.

Please let me know if I misunderstood about this.
And we appreciate any comments for this way of handling.

- Scenalio 2:
Next, I explain Scenalio 2. 
I agree with you at the point that the call would be established nevertheless 
the onhook state of SIP Phone, when it comes to be in the situation of a CANCEL 
crossover.
Considering the ordinary telephone, I think this is a problem.
According to RFC3261, a UA can send BYE message after the session has been 
established. So, I think it is a good idea that the UAC would send BYE 
automatically just then it receives 200 OK without noticing to the user. I 
would like to add the description about sending BYE message to my draft, 
considering SIP Phones. 
Thank you for your helpful comment.
I would like to modify the sequence as the following:

   Alice                     Bob
     |                        |
     |       INVITE F1        |
     |----------------------->|
     |    180 Ringing F2      |
     |<-----------------------|
     |                        |
     |CANCEL F3     200 OK F4 |
     |---------     ----------|
     |          \ /           |
     |           X            |
     |          / \           |
     |<--------     --------->|
     |                        |
     | ACK F6         481 F5  |
     |---------     ----------|
     |          \ /           |
     |           X            |
     |          / \           |
     |<--------     --------->|
     |                        |
     |   Both Way RTP Media   |
     |<======================>|
     |         BYE F7         |
     |----------------------->|
     |       200 OK F8        |
     |<-----------------------|
     |                        |
     |                        |

If the UAC receives 2xx message to INVITE after sending CANCEL message, a 
dialog would be confirmed but the session SHOULD be terminated. It would be 
implemented by BYE message as described in the sequence above.

---
I would like to explain about other issues you have pointed out.

- alternative 1:
We understood that the issue you pointed out was as sequence as the following:

   Alice                     Bob
     |                        |
     |       INVITE F1        |
     |----------------------->|
     |    180 Ringing F2      |
     |<-----------------------|
     |                        |
     |CANCEL F3     200 OK F4 |
     |---------     ----------| Terminate(ServerTransaction)
     |          \ /           |
     |           X            |
     |          / \           |
     |    x<---     --------->|
     |                        |
     |     200 F5(CANCEL)     |
     |<-----------------------|
     |     487 F6(INVITE)     |
     |<-----------------------|
     |         ACK F7         |
     |----------------------->|
     |                        |
     |                        |

According to my understanding, you assume F4 200 has been lost by packet loss 
or something, and you think the UAS would send 200 to CANCEL, and 487 to INVITE.

In this sequence, the UAS changes the response to 487 after sending 200 OK to 
INVITE. Considering the fact that RFC3261 says server transactions would be 
terminated soon after sending 200 OK, it would be difficult to choose the 
option that server transactions changes the response, wouldn't it?

I don't think it would be legal that one server transaction sends different 
final responses(3xx-6xx) to one request.

And Considering that the section9 of RFC3261 says that CANCELs don't affect the 
final responses, I don't think it is a good idea to change 200 to 487 even 
though it receives a CANCEL.

So I would like to propose such a sequence as the following:


   Alice                     Bob
     |                        |
     |       INVITE F1        |
     |----------------------->|
     |    180 Ringing F2      |
     |<-----------------------|
     |                        |
     |CANCEL F3     200 OK F4 |
     |---------     ----------|
     |          \ /           |
     |           X            |
     |          / \           |
     |     x<--     --------->|
     |                        |
     |     481 F5(CANCEL)     |
     |<-----------------------|
     |     200  OK F6(INVITE) |
     |<-----------------------|
     |     200  OK F6(INVITE) |
     |<-----------------------|
          :
          :
       Time out

   The server doesn't receive the ACK message and it re-transmits 2xx response 
for 64* T1 seconds. And then, the dialog would be confirmed, but the session 
SHOULD be terminated immediately. 
   The termination would be triggered by BYE message, but the final response to 
the BYE may not get to the server. Then it is terminated with timer F. 


- alternative 2:
As I have already written in Scenalio 2, I would like to add sending BYE 
message to the sequence. I don't think it would become an issue that the UAC 
sends BYE after the CANCEL crossover. If you think it is incorrect and we have 
to deal with re-transmission, please let me know the concrete example.

Thank you, again.
Regards,
Miki Hasebe
NTT East Corporation

_______________________________________________
Sip-implementors mailing list
[email protected]
http://lists.cs.columbia.edu/mailman/listinfo/sip-implementors

Reply via email to