find_queue($pipe, $qname); } else { $addnewpipe = true; } } $dontshow = false; $newqueue = false; $output_form = ""; if ($_GET) { switch ($action) { case "delete": if ($queue) { if (is_array($config['filter']['rule'])) { foreach ($config['filter']['rule'] as $rule) { if ($rule['dnpipe'] == $queue->GetQname() || $rule['pdnpipe'] == $queue->GetQname()) { $input_errors[] = gettext("This pipe/queue is referenced in filter rules, please remove references from there before deleting."); } } } if (!$input_errors) { $queue->delete_queue(); if (write_config()) { mark_subsystem_dirty('shaper'); } header("Location: firewall_shaper_vinterface.php"); exit; } $output_form .= $queue->build_form(); } else { $input_errors[] = sprintf(gettext("No queue with name %s was found!"), $qname); $output_form .= $dn_default_shaper_msg; $dontshow = true; } break; case "resetall": foreach ($dummynet_pipe_list as $dn) { $dn->delete_queue(); } unset($dummynet_pipe_list); $dummynet_pipe_list = array(); unset($config['dnshaper']['queue']); unset($queue); unset($pipe); $can_add = false; $can_enable = false; $dontshow = true; foreach ($config['filter']['rule'] as $key => $rule) { if (isset($rule['dnpipe'])) { unset($config['filter']['rule'][$key]['dnpipe']); } if (isset($rule['pdnpipe'])) { unset($config['filter']['rule'][$key]['pdnpipe']); } } if (write_config()) { $retval = 0; $retval = filter_configure(); $savemsg = get_std_save_message($retval); if (stristr($retval, "error") != true) $savemsg = get_std_save_message($retval); else $savemsg = $retval; } else $savemsg = gettext("Unable to write config.xml (Access Denied?)"); $dfltmsg = true; break; case "add": if ($dnpipe) { $q = new dnqueue_class(); $q->SetPipe($pipe); $output_form .= ""; } else if ($addnewpipe) { $q = new dnpipe_class(); $q->SetQname($pipe); } else $input_errors[] = gettext("Could not create new queue/discipline!"); if ($q) { $sform = $q->build_form(); $newjavascript = $q->build_javascript(); unset($q); $newqueue = true; } break; case "show": if ($queue) $sform = $queue->build_form(); else $input_errors[] = gettext("Queue not found!"); break; case "enable": if ($queue) { $queue->SetEnabled("on"); $sform = $queue->build_form(); $queue->wconfig(); if (write_config()) mark_subsystem_dirty('shaper'); } else $input_errors[] = gettext("Queue not found!"); break; case "disable": if ($queue) { $queue->SetEnabled(""); $sform = $queue->build_form(); $queue->wconfig(); if (write_config()) mark_subsystem_dirty('shaper'); } else $input_errors[] = gettext("Queue not found!"); break; default: $dfltmsg = true; $dontshow = true; break; } } if ($_POST) { unset($input_errors); if ($addnewpipe) { if (!empty($dummynet_pipe_list[$qname])) { $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter"); } else { $dnpipe =& new dnpipe_class(); $dnpipe->ReadConfig($_POST); $dnpipe->validate_input($_POST, $input_errors); if (!$input_errors) { $number = dnpipe_find_nextnumber(); $dnpipe->SetNumber($number); unset($tmppath); $tmppath[] = $dnpipe->GetQname(); $dnpipe->SetLink($tmppath); $dnpipe->wconfig(); if (write_config()) { mark_subsystem_dirty('shaper'); } $can_enable = true; $can_add = true; } read_dummynet_config(); $sform = $dnpipe->build_form(); $newjavascript = $dnpipe->build_javascript(); } } else if ($parentqueue) { /* Add a new queue */ if (!empty($dummynet_pipe_list[$qname])) { $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter"); } else if ($dnpipe) { $tmppath =& $dnpipe->GetLink(); array_push($tmppath, $qname); $tmp =& $dnpipe->add_queue($pipe, $_POST, $tmppath, $input_errors); if (!$input_errors) { array_pop($tmppath); $tmp->wconfig(); if (write_config()) { $can_enable = true; $can_add = false; mark_subsystem_dirty('shaper'); } } read_dummynet_config(); $sform = $tmp->build_form(); } else $input_errors[] = gettext("Could not add new queue."); } else if ($_POST['apply']) { write_config(); $retval = 0; $retval = filter_configure(); $savemsg = get_std_save_message($retval); if (stristr($retval, "error") != true) $savemsg = get_std_save_message($retval); else $savemsg = $retval; /* XXX: TODO Make dummynet pretty graphs */ // enable_rrd_graphing(); clear_subsystem_dirty('shaper'); if ($queue) { $sform = $queue->build_form(); $dontshow = false; } else { $output_form .= $dn_default_shaper_message; $dontshow = true; } } else if ($queue) { $queue->validate_input($_POST, $input_errors); if (!$input_errors) { $queue->update_dn_data($_POST); $queue->wconfig(); if (write_config()) mark_subsystem_dirty('shaper'); $dontshow = false; } read_dummynet_config(); $sform = $queue->build_form(); } else { $dfltmsg = true; $dontshow = true; } } if (!$_POST && !$_GET) { $dfltmsg = true; $dontshow = true; } if ($queue) { if ($queue->GetEnabled()) $can_enable = true; else $can_enable = false; if ($queue->CanHaveChildren()) { $can_add = true; } else $can_add = false; } $tree = ""; $output = ""; $output .= $output_form; $closehead = false; include("head.inc"); ?> build_javascript(); } else { echo $newjavascript; } if ($input_errors) print_input_errors($input_errors); if ($savemsg) print_info_box($savemsg, 'success'); if (is_subsystem_dirty('shaper')) print_info_box_np(gettext("The traffic shaper configuration has been changed. You must apply the changes in order for them to take effect.")); $tab_array = array(); $tab_array[] = array(gettext("By Interface"), false, "firewall_shaper.php"); $tab_array[] = array(gettext("By Queue"), false, "firewall_shaper_queues.php"); $tab_array[] = array(gettext("Limiter"), true, "firewall_shaper_vinterface.php"); $tab_array[] = array(gettext("Layer7"), false, "firewall_shaper_layer7.php"); $tab_array[] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php"); display_top_tabs($tab_array); ?>
GetQname() . '&action=add'; else $url = 'firewall_shaper.php?pipe='. $pipe . '&action=add'; $sform->addGlobal(new Form_Button( 'add', 'Add new Queue', $url ))->removeClass('btn-default')->addClass('btn-success'); } if ($queue) $url = 'firewall_shaper_vinterface.php?pipe='. $pipe . '&queue=' . $queue->GetQname() . '&action=delete'; else $url = 'firewall_shaper_vinterface.php?pipe='. $pipe . '&action=delete'; $sform->addGlobal(new Form_Button( 'delete', $queue ? 'Delete this queue':'Delete', $url ))->removeClass('btn-default')->addClass('btn-danger'); } // Print the form print($sform); } ?>