Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

ответил 2013-06-28 15:53:00 +0400

meral Gravatar meral flag of Ukraine

http://pro-sip.net/

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.

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 может фигня выйти. хотя неучтенный ретурн тоже не очень хорошо.

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})

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.