All pastes #458837 Raw Edit

Something

public text v1 · immutable
#458837 ·published 2007-04-26 03:15 UTC
rendered paste body
[sub-maxcallcheck]

exten => s,1,NoOp(sub-maxcallcheck start)

exten => s,n,Set(REMOTE_TRUNK_USAGE=${CUT(DUNDILOOKUP(${USERNAME}#${PBX}|trunk_usage|b)|/|2)})

exten => s,n,Set(PBX_REMOTE_TRUNK_USAGE=${IF($[${ISNULL(${REMOTE_TRUNK_USAGE})}]?0:${CUT(REMOTE_TRUNK_USAGE|-|1)})})
exten => s,n,Set(USER_REMOTE_TRUNK_USAGE=${IF($[${ISNULL(${REMOTE_TRUNK_USAGE})}]?0:${CUT(REMOTE_TRUNK_USAGE|-|2)})})

; Perform trunk limit checking for PBX
exten => s,n,Set(GROUP(pbx)=${PBX})                                           ; pbx group count
exten => s,n,Set(PBX_MAX_CALLS=${PBX_MAX_TRUNKS(${PBX})})
exten => s,n,Set(PBX_TRUNK_USAGE=$[${GROUP_COUNT(${PBX}@pbx)} + ${PBX_REMOTE_TRUNK_USAGE}])
exten => s,n,GotoIf($[${ISNULL(${USERNAME})}]?skip_user)

exten => s,n,Set(GROUP(${PBX})=${USERNAME})                                   ; user group count within pbx
exten => s,n,Set(HASH(USER_TRUNKS)=${PHONE_MAX_TRUNKS(${USERNAME},${PBX})})   ; set vars to contain max calls
exten => s,n,Set(USER_TRUNK_USAGE=$[${GROUP_COUNT(${USERNAME}@${PBX})} + ${USER_REMOTE_TRUNK_USAGE}])
exten => s,n(skip_user),NoOp()

; Display usage count
exten => s,n,Verbose(1|Current PBX channel usage count is: PBX(${PBX}) --> ${PBX_TRUNK_USAGE} of ${IF($["${PBX_MAX_CALLS}" = ""]?unlimited:${PBX_MAX_CALLS})})
exten => s,n,GotoIf($[${ISNULL(${USERNAME})}]?skip_user_display)

exten => s,n,Verbose(1|Current DEVICE channel usage count is: DEVICE(${USERNAME}) --> ${USER_TRUNK_USAGE} of ${IF($["${HASH(USER_TRUNKS|max_calls)}" = ""]?unlimited:${HASH(USER_TRUNKS|max_calls)})})
exten => s,n(skip_user_display),NoOp()

; Perform check on limit for peer specifically
exten => s,n,GotoIf($[${ISNULL(${USERNAME})}]?pbx_gc_chk)
exten => s,n,GotoIf($["${HASH(USER_TRUNKS|max_calls)}" = ""]?pbx_gc_chk)
exten => s,n,GotoIf($[${USER_TRUNK_USAGE} <= ${HASH(USER_TRUNKS|max_calls)}]?:too_many_trunks,1)

; Perform check on limit for vPBX
exten => s,n(pbx_gc_chk),GotoIf($["${PBX_MAX_CALLS}" = ""]?cidchk)
exten => s,n,GotoIf($[${PBX_TRUNK_USAGE} <= ${PBX_MAX_CALLS}]?:too_many_trunks,1)

; No restriction -- allowing call
exten => s,n,Verbose(1|Allowing call from ${CHANNEL} to ${IF($[${EXISTS(${USERNAME})}]?${USERNAME}@)}${PBX} as we have enough room)
exten => s,n,Return()



; Too many trunks in use!
exten => too_many_trunks,1,Verbose(1|Too many trunks in use for PBX(${PBX}))
exten => too_many_trunks,n,Answer()
exten => too_many_trunks,n,Wait(1)
exten => too_many_trunks,n,GotoIf($[${CUT(CHANNEL,/,1)} = Local]?assume_fwd)
exten => too_many_trunks,n,Playback(mix-you-have-too-many-calls)
exten => too_many_trunks,n,Goto(end)
exten => too_many_trunks,n(assume_fwd),Playback(mix-party-calling-has-too-many-calls)
exten => too_many_trunks,n(end),Hangup()