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

Francesco Fondelli francesco.fondelli at gmail.com
Mon Sep 26 04:45:56 CDT 2005


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



More information about the resiprocate-devel mailing list