[reSIProcate] DUM state machine

Steve Robichaud srobichaud at upstreamworks.com
Wed Nov 16 09:25:35 CST 2005


Hi everyone,

I have a question about the UAS state machine in DUM. 

void
ServerInviteSession::accept(int code)
{
...
      case UAS_OfferProvidedAnswer:
      case UAS_EarlyProvidedAnswer:
         transition(UAS_Accepted);
         sendAccept(code, mCurrentLocalSdp.get());
         handler->onConnected(getSessionHandle(), mInvite200);
         break;
...

I am curious as to why the state transitions to UAS_Accepted, and the 
onConnected handler is called.  I thought that the onConnected handler 
would be called after the ACK arrives.

Also,

void
ServerInviteSession::dispatchAccepted(const SipMessage& msg)
{
...
      case OnAck:
      {
         mCurrentRetransmit200 = 0; // stop the 200 retransmit timer
         transition(Connected);
         // handler->onConnected(getSessionHandle(), msg);  // not 
needed since onConnected is called when 200 is sent
         break;
      }

I noticed that in the ServerInviteSession::dispatchAccepted(const 
SipMessage& msg) method that there used to be a call to the onConnected 
handler function in the OnAck case that has been commented out although 
the state transitions to Connected.  Again, why is onConnected commented 
out?

The reason I am asking is that I am using DUM to build a B2BUA and came 
across an exception when calling requestOffer() if the state is not 
'connected'.  It's just a small window from sending the response to 
getting the ACK that the session is in the state UAS_Accepted before it 
truly gets to the COnnected state.

Thanks,
Steve Robichaud
Upstream Works




More information about the resiprocate-devel mailing list