< Previous by Date Date Index Next by Date >
  Thread Index Next in Thread >

[reSIProcate] more than one 18x... assert(0)


Hi all,

when my software is acting as UAS, in some circumstances,
I need to send more than one provisional sip message.

For example it might happen:

       SIP                    MGC/MG (resip UAS)               PSTN
        1|---------INVITE---------->|                          |
         |<----------100------------|                          |
         |                          |------------IAM---------->|2
         |                          |<=========Audio===========|
         |                          |<-----------ACM-----------|3
        4|<----------18x------------|                          |
         |<=========Audio===========|                          |
         |                          |<-----------CPG-----------|5
        6|<----------18x------------|                          |
         |                          |<-----------CPG-----------|7
        8|<----------18x------------|                          |
         |                          |<-----------CPG-----------|9
       10|<----------18x------------|                          |


4 is a ringing 180, 6,8,10 should be some sort of provisional messages
in accordance to Section 7.2.9 of rfc 3398, like 183 or 181. Furthermore
the 18x msgs can be more than 3 like in the above example, it really
depends on the kind of PSTN network.

The point is that after some "sish->provisional(18x)" invocations
the ServerInviteSession finite state machine step into assert(0)
(see the arrow).

void
ServerInviteSession::provisional(int code)
{
   InfoLog (<< toData(mState) << ": provisional(" << code << ")");

   switch (mState)
   {
      case UAS_Offer:
[cut]

      case UAS_EarlyProvidedAnswer:
      case UAS_Accepted:
      case UAS_WaitingToOffer:
      case UAS_FirstEarlyReliable:
      case UAS_FirstSentOfferReliable:
      case UAS_OfferReliable:
      case UAS_ReceivedUpdate:
      case UAS_ReceivedUpdateWaitingAnswer:
      case UAS_SentUpdate:
      case UAS_SentUpdateAccepted:
      case UAS_Start:
      case UAS_WaitingToHangup:
      case UAS_WaitingToTerminate:
      default:
         assert(0);                   <--------------------
         break;
   }
}


Said that, as far as I now, a UAS can send as many 18x msgs as it wish
to a UAC. Is it correct? Did I misunderstood something? Is that assert(0)
at the right place?

Unfortunately I cannot easily provide a resip log file.

Thank you for your help.
Regards
Francesco