[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