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

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


Looking at the state machine in ServerInviteSession - it looks like it
should work fine (at least for invites without the 100rel Supported option).


Ie.  Calling provisional is accepted in both the Offer and EarlyOffer
states.

For 100rel invites it looks like you must wait for the PRACK request after
sending a provisional before you can send another provisional - the problem
is that there is no notification to the application when a PRACK arrives.
On top of all this - the PRACK stuff isn't really fully implemented in DUM
yet.  : )  

Do you know what state you are in when the assert happens?  Are you adding
100rel as a supported option to the MasterProfile?

Scott

-----Original Message-----
From: resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx
[mailto:resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of
Francesco Fondelli
Sent: Monday, September 26, 2005 5:46 AM
To: resiprocate-devel@xxxxxxxxxxxxxxxxxxx
Subject: [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
_______________________________________________
resiprocate-devel mailing list
resiprocate-devel@xxxxxxxxxxxxxxxxxxx
https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel