[reSIProcate] SDP in ACK after intial offer/answer exchange causesBYE from resip/dum

Byron Campen bcampen at estacado.net
Mon Sep 24 15:00:54 CDT 2007


	Here's a diff from my working copy. If you're familiar with the  
code, give it a look.

*snip*
Index: InviteSession.cxx
===================================================================
--- InviteSession.cxx   (revision 7255)
+++ InviteSession.cxx   (working copy)
@@ -1251,6 +1251,7 @@
           break;
        case OnAck:
+      case OnAckAnswer: // .bwc. Don't drop ACK with SDP!
           mCurrentRetransmit200 = 0; // stop the 200 retransmit timer
           handler->onAckReceived(getSessionHandle(), msg);
           break;
Index: ServerInviteSession.cxx
===================================================================
--- ServerInviteSession.cxx     (revision 7255)
+++ ServerInviteSession.cxx     (working copy)
@@ -778,6 +778,7 @@
     switch (toEvent(msg, sdp.get()))
     {
        case OnAck:
+      case OnAckAnswer:
        {
           mCurrentRetransmit200 = 0; // stop the 200 retransmit timer
           transition(Connected);
@@ -785,14 +786,16 @@
           break;
        }
-      case OnAckAnswer:
-      {
-         mCurrentRetransmit200 = 0; // stop the 200 retransmit timer
-         sendBye();
-         transition(Terminated);
-         handler->onTerminated(getSessionHandle(),  
InviteSessionHandler::GeneralFailure, &msg);
-         break;
-      }
+//       .bwc. unsolicited SDP in ACK; it would probably make sense  
to just
+//       ignore.
+//      case OnAckAnswer:
+//      {
+//         mCurrentRetransmit200 = 0; // stop the 200 retransmit timer
+//         sendBye();
+//         transition(Terminated);
+//         handler->onTerminated(getSessionHandle(),  
InviteSessionHandler::GeneralFailure, &msg);
+//         break;
+//      }

        case OnCancel:
        {
*snip*

Best regards,
Byron Campen

> Makes sense to me.  If we can handle the call – why not try?  A  
> Warning log is probably appropriate as a mechanism to detect non- 
> compliant implementations.
>
>
>
> Scott
>
>
>
> From: resiprocate-devel-bounces at resiprocate.org [mailto:resiprocate- 
> devel-bounces at resiprocate.org] On Behalf Of Byron Campen
> Sent: September 21, 2007 5:27 PM
> To: Yuan, Frank
> Cc: resiprocate-devel at list.resiprocate.org
> Subject: Re: [reSIProcate] SDP in ACK after intial offer/answer  
> exchange causesBYE from resip/dum
>
>
>
>             Looking back at this, it seems that we might want to  
> change the code to just silently ignore the bad SDP instead of  
> tearing down the call. Any opinions?
>
>
>
> Best regards,
>
> Byron Campen
>
>
>
>
> Here is SIP FAQ from SIP Expert Jonathan:
>
>
>
>
>
> If I get a new SDP body in the ACK, and I don't like the media  
> type, how can I indicate its unacceptable to me?
>
>
>
> It doesn't work that way. You should not get a "new" SDP in the  
> ACK. SDP goes in ACK only if there was no SDP in INVITE, then SDP  
> was included in the 200 OK. This SDP should represent a subset of  
> the media "offered" in the 200 OK. In other words, a normal SIP  
> transaction has one SDP in the INVITE, and another in 200 OK. Now,  
> we have the same two phase process, but the first SDP is in the 200  
> OK, and the second in the ACK.
>
> Categories for this entry
>
>
>
> Last update: 2000-07-11 16:16
>
> Author: Jonathan Rosenberg
>
>
>
>
>
> Regards,
>
>
>
> FrankY
>
>
>
> -----Original Message-----
> From: resiprocate-devel-bounces at list.resiprocate.org  
> [mailto:resiprocate-devel-bounces at list.resiprocate.org] On Behalf  
> Of Justin Matthews
> Sent: Friday, April 20, 2007 7:11 PM
> To: resiprocate-devel at list.resiprocate.org
> Subject: [reSIProcate] SDP in ACK after intial offer/answer  
> exchange causesBYE from resip/dum
>
>
>
> A certain UA, with "bridges in the logo" (:-) I love that  
> comment),  is
>
> sending SDP in the ACK during the initial call setup, but after the
>
> offer/answer has been completed in the invite/200.  This causes DUM in
>
> ServerInviteSession::dispatchAccepted() to handle the event as  
> OnAckAnswer
>
> and send a BYE, terminating the session.
>
>
>
> Section 13.2.1 in 3261 states some restrictions here, but it  
> doesn't appear
>
> that this case is spelled out.  To me I can understand how this is
>
> considered bad behavior, with no way to answer this new offer in  
> the ACK.
>
> Question is, is sending a BYE too harsh here?  Could this decision  
> be left
>
> up to the APP?  For example, if the SDP is the same as the initial  
> INVITE,
>
> just ignore this behavior?
>
>
>
> UAC               UAS
>
>
>
> INVITE w/offer ->
>
> 200 OK w/answer <-
>
> ACK w/SDP ->
>
> BYE <-
>
> ACK ->
>
>
>
>
>
> Thanks,
>
>
>
> -Justin
>
>
>
> _______________________________________________
>
> resiprocate-devel mailing list
>
> resiprocate-devel at list.resiprocate.org
>
> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>
> _______________________________________________
>
> resiprocate-devel mailing list
>
> resiprocate-devel at list.resiprocate.org
>
> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>
>
>
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel at resiprocate.org
> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20070924/2e3a4452/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2423 bytes
Desc: not available
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20070924/2e3a4452/attachment.bin>


More information about the resiprocate-devel mailing list