[macro-dialcnet] ;version bjc1.01 - asterisk1.4 and asterisk 1.2 exten => s,1,Set(NUMBER=${ARG1}) ;Store number to becalled exten => s,2,GotoIf($[ ${ARG1:0:1} = "+"]?search) ;Is number prefixedwith '+'? exten => s,3,Set(ARG1=+${ARG1}) ;Prefix number with '+',required toproperly retrieve US ENUM entries!!! ;uncomment this line if you are using Asterisk 1.4 ;exten => s,4(search),Set(ENUM=${ENUMLOOKUP(${ARG1},ALL,,1,std.ckts.info)}) ;Search ENUM database ;uncomment this line if you are using Asterisk 1.2 ;exten => s,4(search),Set(ENUM=${ENUMLOOKUP(${ARG1},ALL,,std.ckts.info)}) ;Search ENUM database exten => s,5,GotoIf($[${LEN(${ENUM})}=0]?no_uri) ;Is ENUM record found? exten => s,6,Gotoif(${DB_EXISTS(ELBD/${NUMBER})}?cdata) ;Does backup entry exist? exten => s,7,Set(DB(ELBD/${NUMBER})=${ENUM}) ;No existing backup so store backup ENUM data exten => s,8(test),GotoIf($[${ENUM:0:3} = iax ]?iaxuri) ;Yes-IAX2 protocol exten => s,9,GotoIf($[${ENUM:0:3} = sip ]?sipuri) ;Yes-SIP protocol exten => s,10,GotoIf($[${ENUM:0:3} = h32 ]?h323uri) ;Yes-H323 protocol exten => s,11(no_uri),Gotoif(${DB_EXISTS(ELBD/${NUMBER})}?seek) ;ENUM="", is there a backup entry? exten => s,12,Macro(invalid-office-code,${NUMBER}) ;No valid ENUM and no backup entry exten => s,13,Wait(5) ;Pause exten => s,14,Hangup ;Done - failed to make call - Goodbye exten => s,15(seek),Set(ENUM=${DB_RESULT}) ;Set ENUM to backup base entry exten => s,16,GotoIf(${REGEX("iax2,sip,h323"${ENUM})}?test) ;If it's a single backup proceed to dial out exten => s,17,Set(NE=${CUT(ENUM,":",1)}) ;Get backup entry field 1 exten => s,18,Set(LU=${CUT(ENUM,":",2)}) ;Get backup entry field 2 exten => s,19,GotoIf($[${NE}>${LU}]?grec) ;Was last used the last entry in list? exten => s,20(frec),Set(LU=0) ;Reset entry pointer exten => s,21(grec),Set(LU=$[${LU}+1]) ;Increment last used pointer exten => s,22,Set(ENUM=${DB(ELBD/${NUMBER}/${LU})}) ;Read ENUM backup entry exten => s,23,Set(DB(ELBD/${NUMBER})=${NE}:${LU}) ;Update last used record exten => s,24,Goto(test) ;Proceed to dial out exten => s,25(iaxuri),Set(DIALSTR=IAX2/${ENUM:5}) ;IAX2 exten => s,26,Goto(dodial) ;Make call exten => s,27(sipuri),Set(DIALSTR=SIP/${ENUM:4}) ;SIP exten => s,28,Goto(dodial) ;Make call exten => s,29(h323uri),Set(DIALSTR=H323/${ENUM:5}) ;H323 exten => s,30,Macro(invalid,${NUMBER}) ;Make Call exten => s,31(dodial),NoOp(Outbound Caller ID is ${CALLERID(all)}) ;exten => s,31(dodial),Set(CALLERID(all)= Brian Clancy - PBX6 < 4418072345 >) exten => s,32,Dial(${DIALSTR}) ;Dial Out exten => s,33,Hangup ;Done -call attempted - Goodbye exten => s,34(cdata),Gotoif($["${DB_RESULT}"="${ENUM}"]?test) ;Does entry have a single backup? exten => s,35,Set(SR=${DB_RESULT}) ;Backup does not match current exten => s,36,GotoIf(${REGEX("iax2,sip,h323"${SR})}?shuffle) ;Is more than one backup entry stored? exten => s,37,Set(NE=${CUT(SR,":",1)}) ;Get backup entry field 1 exten => s,38,Set(LU=${CUT(SR,":",2)}) ;Get backup entry field 2 exten => s,39,Gosub(rent) ;Check multiple backup entries exten => s,40,Set(DB(ELBD/${NUMBER})=${NE}:${MR}) ;Store no. of entries and match as entry last used exten => s,41,GotoIf($[${MR}>0]?test) ;If backup exists proceed to dial out exten => s,42,Set(NE=$[${NE}+1]) ;Increment entries pointer exten => s,43,Set(DB(ELBD/${NUMBER})=${NE}:${NE}) ;Update entry count and usage exten => s,44,Set(DB(ELBD/${NUMBER}/${NE})=${ENUM}) ;Store nth backup entry exten => s,45,Goto(test) ;Nth entry stored - proceed to dial out exten => s,46(shuffle),Set(DB(ELBD/${NUMBER}/1)=${SR}) ;Move stored entry to backup entry /1 exten => s,47,Set(DB(ELBD/${NUMBER}/2)=${ENUM}) ;Create second backup entry /2 exten => s,48,Set(DB(ELBD/${NUMBER})=2:2) ;Store no. of backup entries & last called exten => s,49,Goto(test) ;Alternative backup entry stored - proceed to dial out exten => s,50(rent),Set(i=0) ;Load test counter exten => s,51,Set(MR=0) ;Load match store exten => s,52,While($[${i}<${NE}]) ;Check multiple entries for a NUMBER looking for a match exten => s,53,GotoIf($["${DB(ELBD/${NUMBER}/$[${i}+1])}"="${ENUM}"]?mark) ;Mark entry matching ENUM result exten => s,54,Set(i=$[${i}+1]) ;Increment counter exten => s,55,EndWhile ;Look at next entry if one exists exten => s,56,Return ;Done searching for ENUM result backup record exten => s,57(mark),Set(MR=$[${i}+1]) ;ENUM result already backed up exten => s,58,Set(i=${NE}) ;Load counter with no. of last entry exten => s,59,ContinueWhile ;Stop searching ;