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

[reSIProcate] Session Timers and WebRTC


Hello,

I need some help about Session Timers and WebRTC.

 

I wrote a UAS using reSIProcate (1.10.2 release) and I’m using sipml5 as WebRTC client in Chrome.

sipml5 does not support Outbound (RFC 5626), Session Timers (RFC 4028) and KeepAlive (CRLF) messages, so I cannot use FlowTerminated mechanism present in DUM, but my UAS can send (re)INVITE to refresh session (sipml5 does not support UPDATE method).

 

If I kill Chrome while there is an active call, my UAS does not receive any event (I don’t know if I could receive a connection terminated event and I’m not handling it), but when it tries to send INVITE for session refresh, transaction fails with cause 430 Flow failed (set in TransactionState::processNoDnsResults() method).

InviteSession::toEvent() method converts 430 to OnInviteFailure, so in InviteSession::dispatchSentReinvite() method dialog state is changed from SentReInvite to Connected and onOfferRejected() method is invoked for session handle with status message with cause 430.

In this way my UAS can detect the remote endpoint is no more active and I can end local call.

Is this behavior right in your opinion?

 

It seems to me that Session Timers behavior is different when using UDP in a similar scenario.

If (re)INVITE fails with cause 408 Request Timeout or 481 Call/Transaction Does Not Exist, InviteSession::toEvent() method converts them to OnGeneralFailure and in InviteSession::dispatchSentReinvite() method dialog state is changed from SentReInvite to Terminated and onTermianted() method is invoked for session handle with reason InviteSessionHandler::Error.

Should InviteSession::toEvent() method convert 430 to OnGeneralFailure in your opinion?

 

Thank you in advance for any support or comment.

Best regards,

Dario