1 | изначальная версия редактировать | |
best practice вот так
exten => s,1,Gosub(somefunction,s,1)
same => n,GotoIF(${ "${SOMEVAR}" == 1 }?othercontext,s,1)
[somefunction]
exten =>error,1,Set(SOMEVAR=1)
same => n,Return
манипулировать стеком это bad practice.
2 | No.2 Revision редактировать |
best practice вот так
exten => s,1,Gosub(somefunction,s,1)
same => n,GotoIF(${ "${SOMEVAR}" == 1 }?othercontext,s,1)
[somefunction]
exten =>error,1,Set(SOMEVAR=1)
same => n,Return
манипулировать стеком это bad practice.
утечки не будет, но если потом гдето будет неучтенный Return может фигня выйти. хотя неучтенный ретурн тоже не очень хорошо.
3 | No.3 Revision редактировать |
best practice вот так
exten => s,1,Gosub(somefunction,s,1)
same => n,GotoIF(${ "${SOMEVAR}" == 1 }?othercontext,s,1)
[somefunction]
exten =>error,1,Set(SOMEVAR=1)
same => n,Return
манипулировать стеком это bad practice.
утечки не будет, но если потом гдето будет неучтенный Return может фигня выйти. хотя неучтенный ретурн тоже не очень хорошо.
кстати, валидация в астриске выполняется вот так
[validate]
exten => _4XX,1,Return
include =>not_validated
[not_validated]
exten => _.,1,Set(ERROR=1);выполнится только если не сматчится ничего в validate
exten => _.,2,Return
[context]
exten => s,1,Set(loop=5)
same => n(read),Read(${add}input,get-input)
same => n,Gosub(validate,${input},1)
same => n,GotoIF($[ ${loop} > 5 ]?end)
same => n,GotoIF($[ "${ERROR}" != "1" ]?dial)
same => n,Set(loop=$[ ${loop} + 1 ])
same => n,Set(add=invalid_input&)
same => n,Goto(read)
same => n(dial),Dial(SIP/${input})
4 | No.4 Revision редактировать |
best practice вот так
exten => s,1,Gosub(somefunction,s,1)
same => n,GotoIF(${ "${SOMEVAR}" == 1 }?othercontext,s,1)
[somefunction]
exten =>error,1,Set(SOMEVAR=1)
same => n,Return
манипулировать стеком это bad practice.
утечки не будет, но если потом гдето будет неучтенный Return может фигня выйти. хотя неучтенный ретурн тоже не очень хорошо.
кстати, валидация в астриске выполняется вот так
[validate]
exten => _4XX,1,Return
_4XX,1,Set(ERROR=0);добавляем для всех возможных патернов.
exten => _4XX,n,Return
include =>not_validated
[not_validated]
exten => _.,1,Set(ERROR=1);выполнится только если не сматчится ничего в validate
exten => _.,2,Return
[context]
exten => s,1,Set(loop=5)
same => n(read),Read(${add}input,get-input)
same => n,Gosub(validate,${input},1)
same => n,GotoIF($[ ${loop} > 5 ]?end)
same => n,GotoIF($[ "${ERROR}" != "1" ]?dial)
same => n,Set(loop=$[ ${loop} + 1 ])
same => n,Set(add=invalid_input&)
same => n,Goto(read)
same => n(dial),Dial(SIP/${input})
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.