Changeset 3625

Show
Ignore:
Timestamp:
01/24/07 12:00:11 (5 years ago)
Author:
p_lindheimer
Message:

added disable trunk feature to disable but not remove it. Added hook to insert user provided monitoring/reporting mechanism on turnk failures, per trunk. Change hagnupcall to not have a delay

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • freepbx/trunk/amp_conf/astetc/extensions.conf

    r3622 r3625  
    312312exten => s,n,DBDel(FM/DND/${FMGRP}/${CHANNEL}) 
    313313 
    314 exten => s,n(theend),Wait(2) 
    315 exten => s,n,Hangup 
     314exten => s,n(theend),Hangup 
    316315 
    317316[macro-faxreceive] 
     
    357356[macro-dialout-trunk] 
    358357exten => s,1,Set(DIAL_TRUNK=${ARG1}) 
     358exten => s,n,GotoIf($["x${OUTDISABLE_${ARG1}}" = "xon"]?disabletrunk,1) 
    359359 
    360360; If NODEST is set, clear it. No point in remembering since dialout-trunk will just end in the 
     
    412412exten => s-CANCEL,3,Congestion(20) 
    413413 
    414 exten => _s-.,1,NoOp(Dial failed due to ${DIALSTATUS} - failing through to other trunks) 
     414exten => _s-.,1,GotoIf($["x${OUTFAIL_${ARG1}}" = "x"]?noreport) 
     415exten => _s-.,n,DeadAGI(${OUTFAIL_${ARG1}}) 
     416exten => _s-.,n(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} - failing through to other trunks) 
     417 
     418exten => disabletrunk,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} DISABLED - falling through to next trunk) 
    415419 
    416420exten => h,1,Macro(hangupcall) 
  • freepbx/trunk/amp_conf/htdocs/admin/modules/core/functions.inc.php

    r3621 r3625  
    12761276 
    12771277// we're adding ,don't require a $trunknum 
    1278 function core_trunks_add($tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid) { 
     1278function core_trunks_add($tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid, $failtrunk, $disabletrunk) { 
    12791279  global $db; 
    12801280   
     
    12871287  } 
    12881288   
    1289   core_trunks_backendAdd($trunknum, $tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid); 
     1289  core_trunks_backendAdd($trunknum, $tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid, $failtrunk, $disabletrunk); 
    12901290   
    12911291  return $trunknum; 
     
    13001300 
    13011301  //delete from globals table 
    1302   sql("DELETE FROM globals WHERE variable LIKE '%OUT_$trunknum' OR variable IN ('OUTCID_$trunknum','OUTMAXCHANS_$trunknum','OUTPREFIX_$trunknum','OUTKEEPCID_$trunknum')"); 
     1302  sql("DELETE FROM globals WHERE variable LIKE '%OUT_$trunknum' OR variable IN ('OUTCID_$trunknum','OUTMAXCHANS_$trunknum','OUTPREFIX_$trunknum','OUTKEEPCID_$trunknum','OUTFAIL_$trunknum','OUTDISABLE_$trunknum')"); 
    13031303   
    13041304  //write outids 
     
    13171317} 
    13181318 
    1319 function core_trunks_edit($trunknum, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid) { 
     1319function core_trunks_edit($trunknum, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid, $failtrunk, $disabletrunk) { 
    13201320  //echo "editTrunk($trunknum, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register)"; 
    13211321  $tech = core_trunks_getTrunkTech($trunknum); 
    13221322  core_trunks_del($trunknum, $tech); 
    1323   core_trunks_backendAdd($trunknum, $tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid); 
     1323  core_trunks_backendAdd($trunknum, $tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid, $failtrunk, $disabletrunk); 
    13241324} 
    13251325 
    13261326// just used internally by addTrunk() and editTrunk() 
    13271327//obsolete 
    1328 function core_trunks_backendAdd($trunknum, $tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid) { 
     1328function core_trunks_backendAdd($trunknum, $tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid, $failtrunk, $disabletrunk) { 
    13291329  global $db; 
    13301330   
     
    13431343      array('OUTCID_'.$trunknum, $outcid), 
    13441344      array('OUTKEEPCID_'.$trunknum, $keepcid), 
     1345      array('OUTFAIL_'.$trunknum, $failtrunk), 
     1346      array('OUTDISABLE_'.$trunknum, $disabletrunk), 
    13451347      ); 
    13461348       
     
    13541356   
    13551357  core_trunks_writeoutids(); 
     1358 
     1359  $disable_flag = ($disabletrunk == "on")?1:0; 
    13561360   
    13571361  switch (strtolower($tech)) { 
    13581362    case "iax": 
    13591363    case "iax2": 
    1360       core_trunks_addSipOrIax($peerdetails,'iax',$channelid,$trunknum); 
     1364      core_trunks_addSipOrIax($peerdetails,'iax',$channelid,$trunknum,$disable_flag); 
    13611365      if ($usercontext != ""){ 
    1362         core_trunks_addSipOrIax($userconfig,'iax',$usercontext,'9'.$trunknum); 
     1366        core_trunks_addSipOrIax($userconfig,'iax',$usercontext,'9'.$trunknum,$disable_flag); 
    13631367      } 
    13641368      if ($register != ""){ 
    1365         core_trunks_addRegister($trunknum,'iax',$register); 
     1369        core_trunks_addRegister($trunknum,'iax',$register,$disable_flag); 
    13661370      } 
    13671371    break; 
    13681372    case "sip": 
    1369       core_trunks_addSipOrIax($peerdetails,'sip',$channelid,$trunknum); 
     1373      core_trunks_addSipOrIax($peerdetails,'sip',$channelid,$trunknum,$disable_flag); 
    13701374      if ($usercontext != ""){ 
    1371         core_trunks_addSipOrIax($userconfig,'sip',$usercontext,'9'.$trunknum); 
     1375        core_trunks_addSipOrIax($userconfig,'sip',$usercontext,'9'.$trunknum,$disable_flag); 
    13721376      } 
    13731377      if ($register != ""){ 
    1374         core_trunks_addRegister($trunknum,'sip',$register); 
     1378        core_trunks_addRegister($trunknum,'sip',$register,$disable_flag); 
    13751379      } 
    13761380    break; 
     
    13951399 
    13961400//add trunk info to sip or iax table 
    1397 function core_trunks_addSipOrIax($config,$table,$channelid,$trunknum) { 
     1401function core_trunks_addSipOrIax($config,$table,$channelid,$trunknum,$disable_flag=0) { 
    13981402  global $db; 
    13991403   
     
    14161420    $dbconfitem[]=array($k,$v); 
    14171421  } 
    1418   $compiled = $db->prepare("INSERT INTO $table (id, keyword, data) values ('9999$trunknum',?,?)"); 
     1422  $compiled = $db->prepare("INSERT INTO $table (id, keyword, data, flags) values ('9999$trunknum',?,?,'$disable_flag')"); 
    14191423  $result = $db->executeMultiple($compiled,$dbconfitem); 
    14201424  if(DB::IsError($result)) { 
    1421     die($result->getMessage()."<br><br>INSERT INTO $table (id, keyword, data) values ('9999$trunknum',?,?)");  
     1425    die($result->getMessage()."<br><br>INSERT INTO $table (id, keyword, data, flags) values ('9999$trunknum',?,?,'$disable_flag')");   
    14221426  } 
    14231427} 
     
    14321436    // TODO: sqlite work arround - diego  
    14331437    // need to reorder the trunks in PHP code 
    1434     $unique_trunks = sql("SELECT * FROM globals WHERE variable LIKE 'OUT_%' ORDER BY variable","getAll");  
     1438    $sqlstr  = "SELECT t.variable, t.value, d.value state FROM `globals` t "; 
     1439    $sqlstr .= "JOIN (SELECT x.variable, x.value FROM globals x WHERE x.variable LIKE 'OUTDISABLE\_%') d "; 
     1440    $sqlstr .= "ON substring(t.variable,5) = substring(d.variable,12) WHERE t.variable LIKE 'OUT\_%' "; 
     1441    $sqlstr .= "UNION ALL "; 
     1442    $sqlstr .= "SELECT v.variable, v.value, concat(substring(v.value,1,0),'off') state  FROM `globals` v "; 
     1443    $sqlstr .= "WHERE v.variable LIKE 'OUT\_%' AND concat('OUTDISABLE_',substring(v.variable,5)) NOT IN "; 
     1444    $sqlstr .= " ( SELECT variable from globals WHERE variable LIKE 'OUTDISABLE\_%' ) "; 
     1445    $sqlstr .= "ORDER BY variable"; 
     1446 
     1447    //$unique_trunks = sql("SELECT * FROM globals WHERE variable LIKE 'OUT_%' ORDER BY variable","getAll");  
     1448    $unique_trunks = sql($sqlstr,"getAll");  
    14351449  } 
    14361450  else 
    14371451  { 
    14381452    // we have to escape _ for mysql: normally a wildcard 
    1439     $unique_trunks = sql("SELECT * FROM globals WHERE variable LIKE 'OUT\\\_%' ORDER BY RIGHT( variable, LENGTH( variable ) - 4 )+0","getAll");  
     1453    $sqlstr  = "SELECT t.variable, t.value, d.value state FROM `globals` t "; 
     1454    $sqlstr .= "JOIN (SELECT x.variable, x.value FROM globals x WHERE x.variable LIKE 'OUTDISABLE\\\_%') d "; 
     1455    $sqlstr .= "ON substring(t.variable,5) = substring(d.variable,12) WHERE t.variable LIKE 'OUT\\\_%' "; 
     1456    $sqlstr .= "UNION ALL "; 
     1457    $sqlstr .= "SELECT v.variable, v.value, concat(substring(v.value,1,0),'off') state  FROM `globals` v "; 
     1458    $sqlstr .= "WHERE v.variable LIKE 'OUT\\\_%' AND concat('OUTDISABLE_',substring(v.variable,5)) NOT IN "; 
     1459    $sqlstr .= " ( SELECT variable from globals WHERE variable LIKE 'OUTDISABLE\\\_%' ) "; 
     1460    $sqlstr .= "ORDER BY RIGHT( variable, LENGTH( variable ) - 4 )+0"; 
     1461 
     1462    //$unique_trunks = sql("SELECT * FROM globals WHERE variable LIKE 'OUT\\\_%' ORDER BY RIGHT( variable, LENGTH( variable ) - 4 )+0","getAll");  
     1463    $unique_trunks = sql($sqlstr,"getAll");  
    14401464  } 
    14411465 
     
    14761500} 
    14771501 
    1478 function core_trunks_addRegister($trunknum,$tech,$reg) { 
    1479   sql("INSERT INTO $tech (id, keyword, data) values ('9999999$trunknum','register','$reg')"); 
     1502function core_trunks_addRegister($trunknum,$tech,$reg,$disable_flag=0) { 
     1503  sql("INSERT INTO $tech (id, keyword, data, flags) values ('9999999$trunknum','register','$reg','$disable_flag')"); 
    14801504} 
    14811505 
  • freepbx/trunk/amp_conf/htdocs/admin/modules/core/page.routing.php

    r3621 r3625  
    268268foreach (core_trunks_list() as $temp) { 
    269269  $trunks[$temp[0]] = $temp[1]; 
     270  $trunkstate[$temp[0]] = $temp[2]; 
    270271} 
    271272 
     
    506507      </td> 
    507508      <td> 
    508        <select id='trunkpri<?php echo $key ?>' name="trunkpriority[<?php echo $key ?>]"> 
    509         <option value=""></option> 
     509    <select id='trunkpri<?php echo $key ?>' name="trunkpriority[<?php echo $key ?>]" style="background: <?php echo $trunkstate[$trunk]=="off"?"#FFF":"#DDD" ?> ;" onChange="showDisable(<?php echo $key ?>); return true;"> 
     510        <option value="" style="background: #FFF;"></option> 
    510511        <?php  
    511512        foreach ($trunks as $name=>$display) { 
    512           echo "<option id=\"trunk".$key."\" value=\"".$name."\" ".($name == $trunk ? "selected" : "").">".(strpos($display,'AMP:')===0 ? substr($display,4) : $display)."</option>"; 
     513          if ($trunkstate[$name] == 'off') { 
     514            echo "<option id=\"trunk".$key."\" name=\"trunk".$key."\" value=\"".$name."\" style=\"background: #FFF;\" ".($name == $trunk ? "selected" : "").">".$display."</option>"; 
     515          } else { 
     516            echo "<option id=\"trunk".$key."\" name=\"trunk".$key."\" value=\"".$name."\" style=\"background: #DDD;\" ".($name == $trunk ? "selected" : "").">".$display."</option>"; 
     517          } 
    513518        } 
    514519        ?> 
     
    550555        <?php  
    551556        foreach ($trunks as $name=>$display) { 
    552           echo "<option value=\"".$name."\">".(strpos($display,'AMP:')===0 ? substr($display,4) : $display)."</option>"; 
     557          if ($trunkstate[$name] == 'off') { 
     558          echo "<option value=\"".$name."\">".ltrim($display,"AMP:")."</option>"; 
     559          } else { 
     560          echo "<option value=\"".$name."\" style=\"background: #DDD;\" >*".ltrim($display,"AMP:")."*</option>"; 
     561          } 
    553562        } 
    554563        ?> 
     
    586595} else { 
    587596  theForm.routepass.focus(); 
     597} 
     598 
     599function showDisable(key) { 
     600<?php 
     601  $bgmap = 'bgc = {'; 
     602  foreach ($trunks as $name=>$display) { 
     603    $bgmap .= " \"$name\":"; 
     604    $bgmap .= ($trunkstate[$name] == 'off')?'"#FFF",':'"#DDD",'; 
     605  } 
     606  echo rtrim($bgmap,',')." };\n"; 
     607?> 
     608  if (document.getElementById('trunkpri'+key).value =='') { 
     609    document.getElementById('trunkpri'+key).style.background = '#FFF'; 
     610  } else { 
     611    document.getElementById('trunkpri'+key).style.background = bgc[document.getElementById('trunkpri'+key).value]; 
     612  } 
    588613} 
    589614 
  • freepbx/trunk/amp_conf/htdocs/admin/modules/core/page.trunks.php

    r3624 r3625  
    2525 
    2626// populate some global variables from the request string 
    27 $set_globals = array("outcid","maxchans","dialoutprefix","channelid","peerdetails","usercontext","userconfig","register","keepcid"); 
     27$set_globals = array("outcid","maxchans","dialoutprefix","channelid","peerdetails","usercontext","userconfig","register","keepcid","failtrunk","disabletrunk"); 
    2828foreach ($set_globals as $var) { 
    2929  if (isset($_REQUEST[$var])) { 
     
    3535if (!isset($keepcid)) { 
    3636  $keepcid = "off"; 
     37} 
     38// ensure that failtrunk is set to something: 
     39if (!isset($failtrunk)) { 
     40  $failtrunk = ""; 
     41} 
     42if (!isset($disabletrunk)) { 
     43  $disabletrunk = "off"; 
    3744} 
    3845 
     
    6067switch ($action) { 
    6168  case "addtrunk": 
    62     $trunknum = core_trunks_add($tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid); 
     69    if (!isset($failtrunk)) 
     70        $failtrunk=""; 
     71    $trunknum = core_trunks_add($tech, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid, trim($failtrunk),$disabletrunk); 
    6372     
    6473    core_trunks_addDialRules($trunknum, $dialrules); 
     
    6776  break; 
    6877  case "edittrunk": 
    69     core_trunks_edit($trunknum, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid); 
     78    if (!isset($failtrunk)) 
     79        $failtrunk=""; 
     80    core_trunks_edit($trunknum, $channelid, $dialoutprefix, $maxchans, $outcid, $peerdetails, $usercontext, $userconfig, $register, $keepcid, trim($failtrunk), $disabletrunk); 
    7081     
    7182    /* //DIALRULES 
     
    184195 
    185196foreach ($tresults as $tresult) { 
    186     echo "\t<li><a ".($extdisplay==$tresult[0] ? 'class="current"':'')." href=\"config.php?display=".urlencode($display)."&amp;extdisplay=".urlencode($tresult[0])."\" title=\"".urlencode($tresult[1])."\">"._("Trunk")." ".(strpos($tresult[1],'AMP:')===0 ? substr($tresult[1],4,15) : substr($tresult[1],0,15))."</a></li>\n"; 
     197  $background = ($tresult[2] == 'on')?'#DDD':'#FFF'; 
     198  echo "\t<li><a ".($extdisplay==$tresult[0] ? 'class="current"':'')." href=\"config.php?display=".urlencode($display)."&amp;extdisplay=".urlencode($tresult[0])."\" title=\"".urlencode($tresult[1])."\" style=\"background: $background;\" >"._("Trunk")." ".substr(ltrim($tresult[1],"AMP:"),0,15)."</a></li>\n"; 
    187199} 
    188200 
     
    214226    $dialoutprefix = ${"OUTPREFIX_".$trunknum}; 
    215227    $keepcid = isset(${"OUTKEEPCID_".$trunknum})?${"OUTKEEPCID_".$trunknum}:''; 
     228    $failtrunk = isset(${"OUTFAIL_".$trunknum})?${"OUTFAIL_".$trunknum}:''; 
     229    $failtrunk_enable = ($failtrunk == "")?'':'CHECKED'; 
     230    $disabletrunk = isset(${"OUTDISABLE_".$trunknum})?${"OUTDISABLE_".$trunknum}:''; 
    216231     
    217232    if ($tech!="enum") { 
     
    340355        </td> 
    341356      </tr> 
     357 
     358      <tr> 
     359          <td><a class="info" href="#"><?php echo _("Disable Trunk")?><span><?php echo _("Check this to disable this trunk in all routes where it is used.")?></span></a>: 
     360          </td> 
     361          <td> 
     362        <input type='checkbox' name='disabletrunk' id="disabletrunk" <?php if ($disabletrunk=="on") { echo 'CHECKED'; }?> OnClick='disable_verify(disabletrunk); return true;'><small><?php echo _("Disable")?></small> 
     363          </td> 
     364      </tr> 
     365 
     366      <tr> 
     367          <td><a class="info" href="#"><?php echo _("Monitor Trunk Failures")?><span><?php echo _("If checked, supply the name of a custom AGI Script that will be called to report, log, email or otherwise take some action on trunk failures that are not caused by either NOANSWER or CANCEL.")?></span></a>: 
     368          </td> 
     369          <td> 
     370        <input <?php if (!$failtrunk_enable) echo "disabled style='background: #DDD;'"?> type="text" size="20" name="failtrunk" value="<?php echo htmlspecialchars($failtrunk)?>"/> 
     371        <input type='checkbox' name='failtrunk_enable' id="failtrunk_enable" value='1' <?php if ($failtrunk_enable) { echo 'CHECKED'; }?> OnClick='disable_field(failtrunk,failtrunk_enable); return true;'><small><?php echo _("Enable")?></small> 
     372          </td> 
     373      </tr> 
     374 
    342375      <tr> 
    343376        <td colspan="2"> 
     
    388421      <script language="javascript"> 
    389422       
     423      function disable_field(field, field_enable) { 
     424          if (field_enable.checked) { 
     425        field.style.backgroundColor = '#FFF'; 
     426        field.disabled = false; 
     427          } 
     428          else { 
     429        field.style.backgroundColor = '#DDD'; 
     430        field.disabled = true; 
     431          } 
     432      } 
     433 
     434      function disable_verify(field) { 
     435          if (field.checked) { 
     436        var answer=confirm("Are you sure you want to disable this trunk in all routes it is used?"); 
     437        if (!answer) { 
     438            field.checked = false; 
     439        } 
     440          } 
     441          else { 
     442        alert("You have enabled this trunk in all routes it is used"); 
     443          } 
     444      } 
     445 
    390446      function populateLookup(digits) { 
    391447<?php