Page 579 - Asterisk™: The Future of Telephony
P. 579
APPENDIX G
An Example of func_odbc
This appendix contains the examples from the hot-desking feature in the “Getting
Funky with func_odbc: Hot-Desking” section in Chapter 12. It may be useful to follow
along with this example in Chapter 12 as it can be useful to see where the code is going
while reading along with the explanation.
Hot-Desking (extensions.conf) Dialplan code
; Hot Desking Feature
[hotdesk]
; Hot Desk Login
exten => _11XX,1,NoOp()
exten => _11XX,n,Set(E=${EXTEN})
exten => _11XX,n,Verbose(1|Hot Desk Extension ${E} is changing status)
exten => _11XX,n,Verbose(1|Checking current status of extension ${E})
exten => _11XX,n,Set(${E}_STATUS=${HOTDESK_INFO(status,${E})})
exten => _11XX,n,Set(${E}_PIN=${HOTDESK_INFO(pin,${E})})
exten => _11XX,n,GotoIf($[${ISNULL(${${E}_STATUS})}]?invalid_user)
exten => _11XX,n,GotoIf($[${${E}_STATUS} = 1]?logout,1:login,1)
exten => login,1,NoOp()
exten => login,n,Set(PIN_TRIES=0)
exten => login,n,Set(MAX_PIN_TRIES=3)
exten => login,n(get_pin),NoOp()
exten => login,n,Set(PIN_TRIES=$[${PIN_TRIES} + 1])
exten => login,n,Read(PIN_ENTERED|enter-password|${LEN(${${E}_PIN})})
exten => login,n,GotoIf($[${PIN_ENTERED} = ${${E}_PIN}]?valid_login,1)
exten => login,n,Playback(invalid-pin,1)
exten => login,n,GotoIf($[${PIN_TRIES} <= ${MAX_PIN_TRIES}]?get_pin:login_fail,1)
exten => valid_login,1,NoOp()
exten => valid_login,n,Set(LOCATION=${CUT(CHANNEL,/,2)})
exten => valid_login,n,Set(LOCATION=${CUT(LOCATION,-,1)})
exten => valid_login,n,Set(ARRAY(USERS_LOGGED_IN)=${HOTDESK_CHECK_PHONE_LOGINS
(${LOCATION})})
exten => valid_login,n,GotoIf($[${USERS_LOGGED_IN} > 0]?logout_login,1)
551