[SR-Users] Limiting simultaneous calls

Stefan Sayer stefan.sayer at googlemail.com
Tue Nov 22 00:29:48 CET 2011


o Juha Heinanen on 11/21/2011 11:49 PM:
> Stefan Sayer writes:
>
>> if it's acceptable for you to use an external B2BUA, you could send
>> the calls through SEMS' sbc, activating session timers there and using
>> parallel calls cc_pcalls to limit.
>
> what if parties of the call do not support session timers and do not
> (for one reason or another) send byes to terminate the call?  can your
don't confuse support for SIP session timers with doing the actual 
refresh.

if both endpoints do support session timers, then they will according 
to the algorithmus in SST negotiate the refresh timer value and who is 
going to have the refresher role.

if only one endpoint supports SST, that one is always going to be the 
one who is taking on the refresher role.

so, if the endpoints on either leg don't support SST, then it's always 
SEMS who is doing the refresh on that leg, if it hasn't been refreshed 
before (e.g. by an end-to-end refresh from the other side).

Any endpoint could do session refresh (reinvite, update) any time it 
wants to. SST support just help to prevent that both endpoint do the 
refresh, because by negotiating it, both know who is doing it, and at 
what interval. The other can then drop the call when session expired.

What you can do in a call stateful proxy is to enforce that SST are 
used, and also enforce maximum timer values. The problem with forcing 
SST in the proxy is of course that the call will fail of none of the 
endpoints supports SST. You can then also use the timer value to e.g. 
reset your concurrent call limit; if no refresh came up to that point, 
you know that the call is dead anyway (but you don't know whether 
clever endpoints are trying to trick your proxy).

What you exactly can't do in a call stateful proxy - as opposed to a 
b2bua - is to make all this work if both parties don't support SST.

> example configuration still detect that the parties have gone away
> (assuming that only signaling goes through sems)?
yes, sems sends reinvite/update, that fails, and sems closes the call 
on both sides and removes the entry in the call limit table.

>
> limit_calls_sst.sbcprofile.conf:
>    call_control=parallel_calls
>    parallel_calls_module=cc_pcalls
>    parallel_calls_uuid=$fU
>    parallel_calls_max_calls=1
>    # enable session timers - will refresh
>    # even if endpoint doesnt support it
>    enable_session_timer=yes
>    # refresh every minute
>    session_expires=120
>
> if not, i guess one needs to replace enable_session_timer with call
> call_timer_timer.  if so, how expensive are call_timer_timers from
> implementation point of view?
if you additionally want to set an absolute maximum call timer, you 
can also do that with the call_timer call control module.
  call_control=parallel_calls,call_timer
  call_timer_module=call_timer
  call_timer_timer=3600
  parallel_calls_module=...

call_timer are not very expensive - it's one (long time) timer per 
call (compared to SST where it's two timers if SEMS is refresher, 
otherwise one).

Stefan

>
> -- juha
>



More information about the sr-users mailing list