<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2015-06-26 17:11 GMT+02:00 Steve Edwards <span dir="ltr"><<a href="mailto:asterisk.org@sedwards.com" target="_blank">asterisk.org@sedwards.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Fri, 26 Jun 2015, Ludovic Gasc wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
1. What's the "official" notation of each line: "=>" or "=" ? In the wiki of Asterisk, I see very often "=>", however, what's the reason for both syntaxes authorized ? Historical ?<br>
</blockquote>
<br></span>
I'm not 'official,' but I have a strong preference for just '=.' Using '=>' seems clunky, ugly, and unnecessary.</blockquote><div><br></div><div>It's interesting because from my point of view, I prefer to use '=>', because, to me, '=' is for config files.</div><div>The dialplan is a programming language, not a config file.</div><div>If you like buzzwords, it's a Domain Specific Language.</div><div><br></div><div>However, it's completely a religious point of view, Asterisk will process exactly the same dialplan with '=' or with '=>'.</div><div>I was interested in by the story that will explain to me why Asterisk support both syntaxes, if somebody remembers.</div><div><br></div><div>Thank you Steve for your answers in point 2., any tips to improve readability of dialplan is interesting to me.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2. To write info in logs/console, you have two commands: NoOp and Verbose. Verbose seems to be better, because you can define a log level. Are you agree or another command fits better for logs ?<br>
</blockquote>
<br></span>
This is kind of a pet peeve of mine. Why use the misguided 'side effect' of an application when there is a specific, 'more featured,' application for that purpose? A 'noop' is a contraction of 'no operation' meaning it should do nothing but act as a placeholder.<br>
<br>
Two other areas of 'best practices' I'm a strong believer in are: alphabetize wherever possible, and use white space to improve readability.<br>
<br>
For example, here's a 'sanitized' sip.conf snippet from a popular provider's web site:<br>
<br>
[xxx-inbound]<br>
type=friend<br>
dtmfmode=auto<br>
host=xxx.yyy.zzz<br>
context=inbound<br>
<br>
username=xxx<br>
secret=yyy<br>
<br>
allow=all<br>
insecure=port,invite<br>
canreinvite=no<br>
<br>
[xxx-outbound]<br>
type=friend<br>
dtmfmode=auto<br>
host=xxx.yyy.zzz<br>
username=xxx<br>
fromuser=xxx<br>
secret=xxx<br>
trustrpid=yes<br>
sendrpid=yes<br>
allow=all<br>
canreinvite=no<br>
<br>
Pretty ugly and difficult to read. With a little whitespace and alphabetizing we get:<br>
<br>
[xxx-inbound]<br>
        allow                           = all<br>
        canreinvite                     = no<br>
        context                         = inbound<br>
        dtmfmode                        = auto<br>
        host                            = xxx.yyy.zzz<br>
        insecure                        = port,invite<br>
        secret                          = yyy<br>
        type                            = friend<br>
        username                        = xxx<br>
<br>
[xxx-outbound]<br>
        allow                           = all<br>
        canreinvite                     = no<br>
        dtmfmode                        = auto<br>
        fromuser                        = xxx<br>
        host                            = xxx.yyy.zzz<br>
        secret                          = xxx<br>
        sendrpid                        = yes<br>
        trustrpid                       = yes<br>
        type                            = friend<br>
        username                        = xxx<br>
<br>
Now, the major sections are easy to 'visually delineated.' Finding the 'secret' is much easier now. Comparing a 'working' extension with a 'broken' extension will be much easier as well.<br>
<br>
I use the same formatting in the dialplan. This snippet is from extensions.conf.sample:<br>
<br>
[outbound-freenum2]<br>
exten => _X!,1,Verbose(2,Performing ISN lookup for ${EXTEN})<br>
same => n,Set(SUFFIX=${CUT(EXTEN,*,2-)})<br>
same => n,GotoIf($["${FILTER(0-9,${SUFFIX})}" != "${SUFFIX}"]?fn-CONGESTION,1)<br>
same => n,Set(TIMEOUT(absolute)=10800)<br>
same => n,Set(isnresult=${ENUMLOOKUP(${EXTEN},sip,,1,<a href="http://freenum.org" rel="noreferrer" target="_blank">freenum.org</a>)})<br>
same => n,GotoIf($["${isnresult}" != ""]?from)<br>
same => n,Set(DIALSTATUS=CONGESTION)<br>
same => n,Goto(fn-CONGESTION,1)<br>
same => n(from),Set(__SIPFROMUSER=${CALLERID(num)})<br>
same => n,GotoIf($["${GLOBAL(FREENUMDOMAIN)}" = ""]?dial)<br>
same => n,Set(__SIPFROMDOMAIN=${GLOBAL(FREENUMDOMAIN)})<br>
same => n(dial),Dial(SIP/${isnresult},40)<br>
same => n,Goto(fn-${DIALSTATUS},1)<br>
<br>
exten => fn-BUSY,1,Busy()<br>
<br>
exten => _f[n]-.,1,NoOp(ISN: ${DIALSTATUS})<br>
same => n,Congestion()<br>
<br>
With a little whitespace, this becomes much more readable:<br>
<br>
[outbound-freenum2]<br>
        exten = _X!,1,                  Verbose(2,Performing ISN lookup for ${EXTEN})<br>
        same = n,                       Set(SUFFIX=${CUT(EXTEN,*,2-)})<br>
        same = n,                       GotoIf($["${FILTER(0-9,${SUFFIX})}" != "${SUFFIX}"]?fn-CONGESTION,1)<br>
        same = n,                       Set(TIMEOUT(absolute)=10800)<br>
        same = n,                       Set(isnresult=${ENUMLOOKUP(${EXTEN},sip,,1,<a href="http://freenum.org" rel="noreferrer" target="_blank">freenum.org</a>)})<br>
        same = n,                       GotoIf($["${isnresult}" != ""]?from)<br>
        same = n,                       Set(DIALSTATUS=CONGESTION)<br>
        same = n,                       Goto(fn-CONGESTION,1)<br>
        same = n(from),                 Set(__SIPFROMUSER=${CALLERID(num)})<br>
        same = n,                       GotoIf($["${GLOBAL(FREENUMDOMAIN)}" = ""]?dial)<br>
        same = n,                       Set(__SIPFROMDOMAIN=${GLOBAL(FREENUMDOMAIN)})<br>
        same = n(dial),                 Dial(SIP/${isnresult},40)<br>
        same = n,                       Goto(fn-${DIALSTATUS},1)<br>
<br>
        exten = fn-BUSY,1,              Busy()<br>
<br>
        exten = _f[n]-.,1,              NoOp(ISN: ${DIALSTATUS})<br>
        same = n,                       Congestion()<br>
<br>
Compare the effort to find where the 'dial' is in the 'before' and 'after.'<span class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
Thanks in advance,<br>
-------------------------------------------------------------------------<br>
Steve Edwards       <a href="mailto:sedwards@sedwards.com" target="_blank">sedwards@sedwards.com</a>      Voice: <a href="tel:%2B1-760-468-3867" value="+17604683867" target="_blank">+1-760-468-3867</a> PST<br>
Newline                                              Fax: <a href="tel:%2B1-760-731-3000" value="+17607313000" target="_blank">+1-760-731-3000</a><br>
<br>
-- <br>
_____________________________________________________________________<br>
-- Bandwidth and Colocation Provided by <a href="http://www.api-digital.com" rel="noreferrer" target="_blank">http://www.api-digital.com</a> --<br>
New to Asterisk? Join us for a live introductory webinar every Thurs:<br>
              <a href="http://www.asterisk.org/hello" rel="noreferrer" target="_blank">http://www.asterisk.org/hello</a><br>
<br>
asterisk-users mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
  <a href="http://lists.digium.com/mailman/listinfo/asterisk-users" rel="noreferrer" target="_blank">http://lists.digium.com/mailman/listinfo/asterisk-users</a><br>
</font></span></blockquote></div><br></div></div>