[asterisk-users] ODBC dialplan looping problem

Satish Barot satish4asterisk at gmail.com
Fri Apr 19 07:38:38 CDT 2013


On Fri, Apr 19, 2013 at 5:59 PM, Satish Barot <satish4asterisk at gmail.com>wrote:

>
>
>
> On Thu, Apr 18, 2013 at 4:45 PM, Pat Collins <drdialtone at optonline.net>wrote:
>
>> All,****
>>
>> Thank you in advance for any help.****
>>
>> I have a customer in need of a conferencing system.  A requirement is for
>> users to each have their own PIN for the same bridge.****
>>
>> So, I put the list of users, PINs bridges into a MYSQL DB and used an
>> ODBC connector to parse the table.****
>>
>> Asterisk is connected and reads the rows as expected.  The problem is
>> that if a user enters a PIN that is NOT in the table, asterisk goes crazy
>> and continues to loop forever.****
>>
>> Please have a look and tell me where I went so wrong.****
>>
>> Func_odbc.conf looks like this:****
>>
>> [PIN]****
>>
>> dsn=BRIDGE****
>>
>> mode=multirow****
>>
>> readsql=SELECT pin from users WHERE confid='${SQL_ESC(${CONF_ID})}'****
>>
>> ** **
>>
>> extensions.conf section:****
>>
>> [infromhost] ;Host dials 8888 over SIP trunk exten=8888,1,Answer****
>>
>> exten=8888,n,Background(conf-getconfno)****
>>
>> exten=8888,n,WaitExten(10)****
>>
>> exten=8888,n,Hangup****
>>
>> exten=_XXXXXX,1,Set(GLOBAL(CONF_ID)=${EXTEN})****
>>
>> exten=_XXXXXX,n,GoTo(rooms,${EXTEN},1)****
>>
>> ;****
>>
>> [rooms]****
>>
>> exten=_XXXXXX,1,Set(CONF_ID=${EXTEN})****
>>
>> exten=_XXXXXX,n,Background(conf-getpin)****
>>
>> exten=_XXXXXX,n,WaitExten(5)****
>>
>> exten=_XXXXXX,n,Hangup****
>>
>> exten=_1XXXXX,1,Goto(getpin,${EXTEN},1)****
>>
>> exten=_2XXXXX,1,Goto(getpin,${EXTEN},1)****
>>
>> exten=_3XXXXX,1,Goto(getpin,${EXTEN},1)****
>>
>> exten=_4XXXXX,1,Goto(getpin,${EXTEN},1)****
>>
>> exten=_5XXXXX,1,Goto(getpin,${EXTEN},1)****
>>
>> exten=_6XXXXX,1,Goto(getpin,${EXTEN},1)****
>>
>> exten=_7XXXXX,1,Goto(getpin,${EXTEN},1)****
>>
>> exten=_8XXXXX,1,Goto(getpin,${EXTEN},1)****
>>
>> exten=_9XXXXX,1,Goto(getpin,${EXTEN},1)****
>>
>> exten=i,1,Goto(getpin,${CONF_PIN},1)****
>>
>> ;****
>>
>> [getpin]****
>>
>> exten=_XXXXXX,1,Set(GLOBAL(CONF_PIN)=${EXTEN})****
>>
>> exten=_XXXXXX,n,Set(ODBC_ID=${ODBC_PIN(1)})****
>>
>> exten=_XXXXXX,n(loop_start),NoOp()****
>>
>> exten=_XXXXXX,n,Set(ROW_RESULT=${ODBC_FETCH(${ODBC_ID})})****
>>
>> exten=_XXXXXX,n,GotoIf($["${ODBC_FETCH}" = "FAILURE"]?cleanup,1) ****
>>
>> exten=_XXXXXX,n,GotoIf($["${ROW_RESULT}" = "${CONF_PIN}"]?good_exten,1)**
>> **
>>
>> exten=_XXXXXX,n,Goto(loop_start)****
>>
>> ;****
>>
>> exten=cleanup,1,Verbose(1,Finish up)****
>>
>> same=n,Verbose(1,PIN not found)****
>>
>> same=n,ODBCFinish(${ODBC_ID})****
>>
>> same=n,playback(conf-invalidpin)****
>>
>> same=n,Goto(rooms,${CONF_ID}1)****
>>
>> same=n,Hangup()****
>>
>> ;****
>>
>> exten=good_exten,1,Verbose(1,The PIN is available)****
>>
>> same=n,ODBCFinish(${ODBC_ID})****
>>
>> same=n,Verbose(1,Drop Caller into the bridge)****
>>
>> same=n,Set(CONFBRIDGE(user,template)=default_user)****
>>
>> same=n,ConfBridge(${CONF_ID},default_bridge,,sample_user_menu)****
>>
>> same=n,Hangup()****
>>
>>
>>
>> **
>>
>> Thank you!!****
>>
>> Pat Collins...****
>>
>>
>> **
>>
>> **
>>
>
> Change you [getpin] as below
> exten=>_XXXXXX,1,Set(GLOBAL(CONF_PIN)=${EXTEN})
> exten=>_XXXXXX,n,Set(ODBC_ID=${ODBC_PIN(1)})
> exten=>_XXXXXX,GotoIf($[${ODBCROWS} < 1]?cleanup,1)
> exten=>_XXXXXX,,Set(COUNTER=1)
> exten=>_XXXXXX,While($[${COUNTER} <= ${ODBCROWS}])
> exten=>_XXXXXX,n,Set(ROW_RESULT=${ODBC_FETCH(${ODBC_ID})})
> exten=>_XXXXXX,n,GotoIf($["${ODBC_FETCH}" = "FAILURE"]?cleanup,1)
> exten=>_XXXXXX,n,GotoIf($["${ROW_RESULT}" = "${CONF_PIN}"]?good_exten,1)
> exten=>_XXXXXX,n,Set(COUNTER=$[${COUNTER + 1])
> exten=>_XXXXXX,n,EndWhile()
> exten=>_XXXXXX,n,ODBCFinish()
> exten=>_XXXXXX,n,Goto(cleanup,1)
>
>
> exten=>cleanup,1,Verbose(1,Finish up)
> same=>n,Verbose(1,PIN not found)
> same=>n,ODBCFinish(${ODBC_ID})
> same=>n,playback(conf-invalidpin)
> same=>n,Goto(rooms,${CONF_ID}1)
>
> exten=>good_exten,1,Verbose(1,The PIN is available)
> same=>n,ODBCFinish(${ODBC_ID})
> same=>n,Verbose(1,Drop Caller into the bridge)
> same=>n,Set(CONFBRIDGE(user,template)=default_user)
> same=>n,ConfBridge(${CONF_ID},default_bridge,,sample_user_menu)
> same=>n,Hangup()
>
>
> Further your readsql should be like this.
> readsql=SELECT pin from users WHERE confid='${SQL_ESC(${ARG1})}'
>
> You should have ${ARG1} instead of ${CONF_ID}
>
> Hope this helps
>
> --Satish Barot
> Ahmedabad, India
>
:) I know I am not good at copy paste...
Change you [getpin] as below
exten=>_XXXXXX,1,Set(GLOBAL(CONF_PIN)=${EXTEN})
exten=>_XXXXXX,n,Set(ODBC_ID=${ODBC_PIN(1)})
exten=>_XXXXXX,n,GotoIf($[${ODBCROWS} < 1]?cleanup,1)
exten=>_XXXXXX,n,Set(COUNTER=1)
exten=>_XXXXXX,n,While($[${COUNTER} <= ${ODBCROWS}])
exten=>_XXXXXX,n,Set(ROW_RESULT=${ODBC_FETCH(${ODBC_ID})})
exten=>_XXXXXX,n,GotoIf($["${ODBC_FETCH}" = "FAILURE"]?cleanup,1)
exten=>_XXXXXX,n,GotoIf($["${ROW_RESULT}" = "${CONF_PIN}"]?good_exten,1)
exten=>_XXXXXX,n,Set(COUNTER=$[${COUNTER + 1])
exten=>_XXXXXX,n,EndWhile()
exten=>_XXXXXX,n,ODBCFinish()
exten=>_XXXXXX,n,Goto(cleanup,1)


exten=>cleanup,1,Verbose(1,Finish up)
same=>n,Verbose(1,PIN not found)
same=>n,ODBCFinish(${ODBC_ID})
same=>n,playback(conf-invalidpin)
same=>n,Goto(rooms,${CONF_ID}1)

exten=>good_exten,1,Verbose(1,The PIN is available)
same=>n,ODBCFinish(${ODBC_ID})
same=>n,Verbose(1,Drop Caller into the bridge)
same=>n,Set(CONFBRIDGE(user,template)=default_user)
same=>n,ConfBridge(${CONF_ID},default_bridge,,sample_user_menu)
same=>n,Hangup()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20130419/3c827c80/attachment.htm>


More information about the asterisk-users mailing list