"") { /* XXX: Huh, why are we killing php? */ mwexec("/usr/bin/killall -9 pfctl php"); exit; } $pgtitle = array(gettext("Firewall"),gettext("Traffic Shaper"), gettext("Limiter")); $shortcut_section = "trafficshaper-limiters"; read_dummynet_config(); /* * The whole logic in these code maybe can be specified. * If you find a better way contact me :). */ if ($_GET) { if ($_GET['queue']) $qname = htmlspecialchars(trim($_GET['queue'])); if ($_GET['pipe']) $pipe = htmlspecialchars(trim($_GET['pipe'])); if ($_GET['action']) $action = htmlspecialchars($_GET['action']); } if ($_POST) { if ($_POST['name']) $qname = htmlspecialchars(trim($_POST['name'])); else if ($_POST['newname']) $qname = htmlspecialchars(trim($_POST['newname'])); if ($_POST['pipe']) $pipe = htmlspecialchars(trim($_POST['pipe'])); else $pipe = htmlspecialchars(trim($qname)); if ($_POST['parentqueue']) $parentqueue = htmlspecialchars(trim($_POST['parentqueue'])); } if ($pipe) { $dnpipe = $dummynet_pipe_list[$pipe]; if ($dnpipe) { $queue =& $dnpipe->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?)"); $output_form = $dn_default_shaper_message; 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) { $output_form .= $q->build_form(); $newjavascript = $q->build_javascript(); unset($q); $newqueue = true; } break; case "show": if ($queue) $output_form .= $queue->build_form(); else $input_errors[] = gettext("Queue not found!"); break; case "enable": if ($queue) { $queue->SetEnabled("on"); $output_form .= $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(""); $output_form .= $queue->build_form(); $queue->wconfig(); if (write_config()) mark_subsystem_dirty('shaper'); } else $input_errors[] = gettext("Queue not found!"); break; default: $output_form .= $dn_default_shaper_msg; $dontshow = true; break; } } else 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(); $output_form .= $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(); $output_form .= $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) { $output_form .= $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(); $output_form .= $queue->build_form(); } else { $output_form .= $dn_default_shaper_msg; $dontshow = true; } } else { $output_form .= $dn_default_shaper_msg; $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 = "