Project

General

Profile

Download (20.1 KB) Statistics
| Branch: | Tag: | Revision:
1 21d40ff9 Ermal Lu?i
<?php
2
/* $Id$ */
3
/*
4
	firewall_shaper_layer7.php
5
	Copyright (C) 2008 Helder Pereira, Andr? Ribeiro
6
	All rights reserved.
7
8
	Redistribution and use in source and binary forms, with or without
9
	modification, are permitted provided that the following conditions are met:
10
11
	1. Redistributions of source code must retain the above copyright notice,
12
	   this list of conditions and the following disclaimer.
13
14
	2. Redistributions in binary form must reproduce the above copyright
15
	   notice, this list of conditions and the following disclaimer in the
16
	   documentation and/or other materials provided with the distribution.
17
18
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
19
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
20
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
22
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
	POSSIBILITY OF SUCH DAMAGE.
28
*/
29
/*
30
	pfSense_BUILDER_BINARIES:	/usr/bin/killall
31
	pfSense_MODULE:	shaper
32
*/
33
34
##|+PRIV
35
##|*IDENT=page-firewall-trafficshaper-layer7
36
##|*NAME=Firewall: Traffic Shaper: Layer7 page
37
##|*DESCR=Allow access to the 'Firewall: Traffic Shaper: Layer7' page.
38
##|*MATCH=firewall_shaper_layer7.php*
39
##|-PRIV
40
41
require("guiconfig.inc");
42 7a927e67 Scott Ullrich
require_once("functions.inc");
43
require_once("filter.inc");
44
require_once("shaper.inc");
45 21d40ff9 Ermal Lu?i
46
// Variables protocols (dynamic) and structures (static)
47
$avail_protos =& generate_protocols_array();
48
$avail_structures = array("action","queue","limiter");
49
50
// Available behaviours
51
$avail_behaviours_action = array("block");
52
read_altq_config();
53
$avail_behaviours_altq = get_altq_name_list();
54
read_dummynet_config();
55
$avail_behaviours_limiter = get_dummynet_name_list();
56
$show_proto_form = false;
57
58
//More variables
59 bb78a6fe Vinicius Coque
$pgtitle = array(gettext("Firewall"),gettext("Traffic Shaper"), gettext("Layer7"));
60 b32dd0a6 jim-p
$shortcut_section = "trafficshaper";
61 21d40ff9 Ermal Lu?i
62
$output_form = "";
63
64
$default_layer7shaper_msg = "<tr><td colspan=\"4\">";
65 e750c0af Colin Fleming
$default_layer7shaper_msg .= "<span class=\"vexpl\"><span class=\"red\"><strong>" . gettext("Note") . ":<br/>";
66 e573ee95 Colin Fleming
$default_layer7shaper_msg .= "</strong></span>" . gettext("You can add new layer7 protocol patterns by simply uploading the file") . " <a href=\"diag_patterns.php\">" . gettext("here") . ".</a></span><br/>";
67 21d40ff9 Ermal Lu?i
$default_layer7shaper_msg .= "</td></tr>";
68
69
70
read_layer7_config();
71
72
if($_GET['reset'] <> "") {
73
	// kill all ipfw-classifyd processes
74 b11cdf92 Renato Botelho
	mwexec("killall -9 ipfw-classifyd");
75 21d40ff9 Ermal Lu?i
	exit;
76
}
77
78
if ($_GET) {
79
	if ($_GET['container'])
80 dd5bf424 Scott Ullrich
		$name = htmlspecialchars(trim($_GET['container']));
81 21d40ff9 Ermal Lu?i
        if ($_GET['action'])
82 dd5bf424 Scott Ullrich
                $action = htmlspecialchars($_GET['action']);
83 21d40ff9 Ermal Lu?i
}
84
85
if($_POST) {
86
	if ($_POST['container']) {
87 dd5bf424 Scott Ullrich
		$name = htmlspecialchars(trim($_POST['container']));
88 21d40ff9 Ermal Lu?i
	}
89
}
90
91
if ($name) {
92
	//Get the object from the 7rules list
93
	$container = $layer7_rules_list[$name];
94
}
95
96
if ($_GET) {
97
	switch ($action) {
98
		case "add":
99
			$show_proto_form = true;
100
			$container = new layer7();
101
			$output_form .= $container->build_form(); //constructs the graphical interface on the right side
102
			unset($container);
103
			break;
104
		case "show":
105
			$show_proto_form = true;
106
			if($container) {
107
				$output_form .= $container->build_form();
108
			}
109
			else {
110
				$show_proto_form = false;
111 813a3ef6 Neriberto C.Prado
				$input_errors[] = gettext("Layer7 Rules Container not found!");
112 21d40ff9 Ermal Lu?i
			}
113
			break;
114
		default:
115
			echo log_error("Get default");
116
			$show_proto_form = false;
117 e573ee95 Colin Fleming
			$output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg;
118 21d40ff9 Ermal Lu?i
			break;
119
	}
120
}
121
122
//add a new l7rules container
123
else if ($_POST) {
124
	$show_proto_form = true;
125
	unset($input_errors);
126 b11cdf92 Renato Botelho
127 21d40ff9 Ermal Lu?i
	if($_POST['submit']) {
128 51b14faa Ermal Lu?i
		if (isset($layer7_rules_list[$name])) {
129
			$l7r = $layer7_rules_list[$name];
130
			$_POST['divert_port'] = $l7r->GetRPort();
131
		} else {
132
			$l7r =& new layer7();
133
			$_POST['divert_port'] = $l7r->gen_divert_port();
134
		}
135 21d40ff9 Ermal Lu?i
		for($i=0; $_POST['protocol'][$i] <> ""; $i++) {
136
			$_POST['l7rules'][$i]['protocol'] = $_POST['protocol'][$i];
137
			$_POST['l7rules'][$i]['structure'] = $_POST['structure'][$i];
138
			$_POST['l7rules'][$i]['behaviour'] = $_POST['behaviour'][$i];
139
		}
140
		$l7r->validate_input($_POST,&$input_errors);
141
		$l7r->ReadConfig($_POST['container'], $_POST);
142
		//Before writing the results, we need to test for repeated protocols
143
		$non_dupes = array();
144
		$dupes = array();
145
		for($j=0; $j<$i; $j++) {
146
			if(!$non_dupes[$_POST['protocol'][$j]])
147
				$non_dupes[$_POST['protocol'][$j]] = true;
148
			else
149
				$dupes[] = $_POST['protocol'][$j];
150
		}
151
		unset($non_dupes);
152
		if(sizeof($dupes) == 0 && !$input_errors) {
153
			$l7r->wconfig();
154 3a343d73 jim-p
			if (write_config())
155
				mark_subsystem_dirty('shaper');
156 21d40ff9 Ermal Lu?i
157
			read_layer7_config();
158
		}
159
		else {
160
			if(sizeof($dupes) > 0) {
161 bb78a6fe Vinicius Coque
				$dupe_error = gettext("Found the following repeated protocol definitions") . ": ";
162 21d40ff9 Ermal Lu?i
				foreach($dupes as $dupe)
163
					$dupe_error .= "$dupe ";
164
				$input_errors[] .= $dupe_error;
165
			}
166
		}
167
		unset($dupes);
168
		unset($dupe_error);
169 b450c94e jim-p
		//Even if there are repeated protocols, we won't lose any previous values
170 21d40ff9 Ermal Lu?i
		//The user will be able to solve the situation
171
		$output_form .= $l7r->build_form();
172
		//Necessary to correctly build the proto form
173
		$container = $layer7_rules_list[$name];
174
		if($input_errors)
175
			$container =& $l7r;
176
	} else if($_POST['apply']) {
177
		write_config();
178
179
		$retval = 0;
180
		$retval = filter_configure();
181
		$savemsg = get_std_save_message($retval);
182
183
		if(stristr($retval, "error") <> true)
184
			$savemsg = get_std_save_message($retval);
185
		else
186
			$savemsg = $retval;
187
188
		clear_subsystem_dirty('shaper');
189
190
		if($container) {
191
			$output_form .= $container->build_form();
192
		} else {
193
			$show_proto_form = false;
194 e573ee95 Colin Fleming
			$output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg;
195 21d40ff9 Ermal Lu?i
		}
196
	} else if ($_POST['delete']) {
197
		$container->delete_l7c();
198 3a343d73 jim-p
		if (write_config())
199
			mark_subsystem_dirty('shaper');
200 21d40ff9 Ermal Lu?i
		unset($container);
201 b11cdf92 Renato Botelho
202 21d40ff9 Ermal Lu?i
		header("Location: firewall_shaper_layer7.php");
203
		exit;
204
	}
205
	else {
206
		$show_proto_form = false;
207
	}
208
}
209
else {
210
	$show_proto_form = false;
211 e573ee95 Colin Fleming
	$output_form .= $dn_default_shaper_msg . $default_layer7shaper_msg;
212 21d40ff9 Ermal Lu?i
}
213
214
// Builds the left tree
215
$tree = "<ul class=\"tree\" >";
216
if (is_array($layer7_rules_list)) {
217
        foreach ($layer7_rules_list as $tmpl7) {
218
                $tree .= $tmpl7->build_tree();
219
        }
220
}
221
$tree .= "</ul>";
222
223 e573ee95 Colin Fleming
$output = "<table summary=\"output form\">";
224 21d40ff9 Ermal Lu?i
$output .= $output_form;
225 e750c0af Colin Fleming
$closehead = false;
226 21d40ff9 Ermal Lu?i
include("head.inc");
227
?>
228
<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
229
<script type="text/javascript" src="./tree/tree.js"></script>
230 b11cdf92 Renato Botelho
231 e750c0af Colin Fleming
<script type="text/javascript">
232
//<![CDATA[
233 21d40ff9 Ermal Lu?i
var initial_count = new Array();
234
var rows_limit = 0; // Set to 0 to disable limitation
235
236
237
/* Build the behaviours arrays in javascript */
238
var js_behaviours_action = ['block']; //static
239
240
var js_behaviours_altq = new Array();
241
js_behaviours_altq = array_altq(js_behaviours_altq);
242
243
var js_behaviours_limiter = new Array();
244
js_behaviours_limiter = array_limiter(js_behaviours_limiter);
245
246
function array_altq(a_behav) {
247
	var index;
248 b11cdf92 Renato Botelho
	<?php if (!empty($avail_behaviours_altq)) {
249 21d40ff9 Ermal Lu?i
	  foreach ($avail_behaviours_altq as $key => $queue) { ?>
250
	    name = "<?= $queue; ?>";
251 b11cdf92 Renato Botelho
	    index = <?= $key; ?>;
252 21d40ff9 Ermal Lu?i
	    a_behav[index] = name;
253 b11cdf92 Renato Botelho
	<?php }
254 21d40ff9 Ermal Lu?i
	} ?>
255
	return a_behav;
256
}
257
258
function array_limiter(a_behav) {
259
	var index;
260 b11cdf92 Renato Botelho
	<?php if (!empty($avail_behaviours_limiter)) {
261 21d40ff9 Ermal Lu?i
	  foreach ($avail_behaviours_limiter as $key => $limiter) { ?>
262
		name = "<?= $limiter; ?>";
263 b11cdf92 Renato Botelho
		index = <?= $key; ?>;
264 21d40ff9 Ermal Lu?i
		a_behav[index] = name;
265 b11cdf92 Renato Botelho
	<?php }
266 21d40ff9 Ermal Lu?i
	} ?>
267
	return a_behav;
268
}
269
270
/* Fill the variables with available protocols, structures and behaviours */
271
function fillProtocol() {
272 e573ee95 Colin Fleming
	var protocol = '<select name="protocol[]" style="font-size:8pt">';
273 21d40ff9 Ermal Lu?i
	var name;
274
275 b11cdf92 Renato Botelho
	<?php foreach ($avail_protos as $key => $proto) { ?>
276 21d40ff9 Ermal Lu?i
		name = "<?= $proto; ?>";
277 e573ee95 Colin Fleming
		protocol += "<option value=" + name + ">" + name + "<\/option>";
278 b11cdf92 Renato Botelho
	<?php } ?>
279 e573ee95 Colin Fleming
	protocol += "<\/select>";
280 b11cdf92 Renato Botelho
281 21d40ff9 Ermal Lu?i
	return protocol;
282
}
283
284
function fillStructure() {
285 e573ee95 Colin Fleming
	var structure = '<select name="structure[]" style="font-size:8pt" onchange="changeBehaviourValues(this.parentNode.parentNode);">';
286 21d40ff9 Ermal Lu?i
	var name;
287 b11cdf92 Renato Botelho
	<?php foreach ($avail_structures as $key => $struct) { ?>
288 21d40ff9 Ermal Lu?i
		name = "<?= $struct; ?>";
289
		if(name == "queue") {
290 e573ee95 Colin Fleming
		  if(js_behaviours_altq != "") { structure += "<option value=" + name + ">" + name + "<\/option>";}
291 21d40ff9 Ermal Lu?i
		}
292
		else {
293
		  if(name == "limiter") {
294 e573ee95 Colin Fleming
		    if(js_behaviours_limiter != "") { structure += "<option value=" + name + ">" + name + "<\/option>";}
295 21d40ff9 Ermal Lu?i
		  }
296 e573ee95 Colin Fleming
		  else structure += "<option value=" + name + ">" + name + "<\/option>"; //action
297 b11cdf92 Renato Botelho
		}
298
	<?php } ?>
299 e573ee95 Colin Fleming
	structure += "<\/select>";
300 b11cdf92 Renato Botelho
301 21d40ff9 Ermal Lu?i
	return structure;
302
}
303 b11cdf92 Renato Botelho
304 21d40ff9 Ermal Lu?i
//Used by default to fill the values when inserting a new row.
305
function fillBehaviour() {
306 e573ee95 Colin Fleming
	var behaviour = '<select name="behaviour[]" style="width:80px; font-size:8pt">';
307 21d40ff9 Ermal Lu?i
	var name;
308 b11cdf92 Renato Botelho
	<?php foreach ($avail_behaviours_action as $key => $behav) { ?>
309 21d40ff9 Ermal Lu?i
		name = "<?= $behav; ?>";
310 e573ee95 Colin Fleming
		behaviour += "<option value=" + name + ">" + name + "<\/option>";
311 b11cdf92 Renato Botelho
	<?php } ?>
312 e573ee95 Colin Fleming
	behaviour += "<\/select>";
313 b11cdf92 Renato Botelho
314 21d40ff9 Ermal Lu?i
	return behaviour;
315
}
316
317
/* Change the values on behaviours select when changing the structure row */
318
function changeBehaviourValues(row) {
319
	var selectedRow = row.rowIndex - 2; //because row.rowIndex returns 2, not 0
320 b11cdf92 Renato Botelho
	var structureSelected = document.getElementsByName("structure[]")[selectedRow].value;
321
322 21d40ff9 Ermal Lu?i
	//Select the behaviours values to array a_behav
323 b11cdf92 Renato Botelho
	var a_behav = new Array();
324 21d40ff9 Ermal Lu?i
	if (structureSelected == "action") {
325
		a_behav = js_behaviours_action; //static
326
	}
327
	else {
328 b11cdf92 Renato Botelho
		if (structureSelected == "queue") {
329 21d40ff9 Ermal Lu?i
			a_behav = js_behaviours_altq;
330
		}
331 b11cdf92 Renato Botelho
		else {
332 21d40ff9 Ermal Lu?i
			a_behav = js_behaviours_limiter;
333 b11cdf92 Renato Botelho
		}
334
	}
335
336 21d40ff9 Ermal Lu?i
	//Build the html statement with the array values previously selected
337
	var new_behav;
338
	var name;
339
	for(i=0; i<a_behav.length; i++) {
340 e573ee95 Colin Fleming
		new_behav += "<option value=" + a_behav[i] + ">" + a_behav[i] + "<\/option>";
341 21d40ff9 Ermal Lu?i
	}
342 b11cdf92 Renato Botelho
343
	document.getElementsByName("behaviour[]")[selectedRow].innerHTML = new_behav;
344 21d40ff9 Ermal Lu?i
}
345
346
/* Add row to the table */
347
function addRow(table_id) {
348
  var tbl = document.getElementById(table_id);
349
  // counting rows in table
350
  var rows_count = tbl.rows.length;
351
  if (initial_count[table_id] == undefined) {
352
    // if it is first adding in this table setting initial rows count
353
    initial_count[table_id] = rows_count;
354
  }
355
  // determining real count of added fields
356
  var tFielsNum =  rows_count - initial_count[table_id];
357
  if (rows_limit!=0 && tFielsNum >= rows_limit) return false;
358 b11cdf92 Renato Botelho
359 e573ee95 Colin Fleming
  var remove = '<a onclick="removeRow(\''+table_id+'\',this.parentNode.parentNode)" href="#"><img border="0" src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="x" /><\/a>';
360 b11cdf92 Renato Botelho
361 21d40ff9 Ermal Lu?i
  try {
362
    var newRow = tbl.insertRow(rows_count);
363
    var newCell = newRow.insertCell(0);
364
    newCell.innerHTML = fillProtocol();
365
    var newCell = newRow.insertCell(1);
366
    newCell.innerHTML = fillStructure();
367
    var newCell = newRow.insertCell(2);
368
    newCell.innerHTML = fillBehaviour();
369
    var newCell = newRow.insertCell(3);
370
    newCell.innerHTML = remove;
371 b11cdf92 Renato Botelho
  }
372 21d40ff9 Ermal Lu?i
  catch (ex) {
373
    //if exception occurs
374
    alert(ex);
375 b11cdf92 Renato Botelho
  }
376 21d40ff9 Ermal Lu?i
}
377
378
/* Remove row from the table */
379
function removeRow(tbl,row) {
380
  var table = document.getElementById(tbl);
381
  try {
382
    table.deleteRow(row.rowIndex);
383
  } catch (ex) {
384
    alert(ex);
385
  }
386
}
387 e750c0af Colin Fleming
//]]>
388 21d40ff9 Ermal Lu?i
</script>
389 e750c0af Colin Fleming
</head>
390 21d40ff9 Ermal Lu?i
391 e750c0af Colin Fleming
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
392
393
<?php include("fbegin.inc"); ?>
394 21d40ff9 Ermal Lu?i
<div id="inputerrors"></div>
395
<?php if ($input_errors) print_input_errors($input_errors); ?>
396
397
<form action="firewall_shaper_layer7.php" method="post" id="iform" name="iform">
398
399
<?php if ($savemsg) print_info_box($savemsg); ?>
400
<?php if (is_subsystem_dirty('shaper')): ?><p>
401 e750c0af Colin Fleming
<?php print_info_box_np(gettext("The traffic shaper configuration has been changed")  .  ".<br/>" . gettext("You must apply the changes in order for them to take effect."));?><br/></p>
402 21d40ff9 Ermal Lu?i
<?php endif; ?>
403 e750c0af Colin Fleming
<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="traffic shaper layer7">
404 21d40ff9 Ermal Lu?i
  <tr><td>
405
<?php
406
	$tab_array = array();
407 813a3ef6 Neriberto C.Prado
	$tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
408
	$tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
409
	$tab_array[2] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
410
	$tab_array[3] = array(gettext("Layer7"), true, "firewall_shaper_layer7.php");
411
	$tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
412 21d40ff9 Ermal Lu?i
	display_top_tabs($tab_array);
413
?>
414
  </td></tr>
415
  <tr>
416
    <td>
417
	<div id="mainarea">
418 e750c0af Colin Fleming
              <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
419 b11cdf92 Renato Botelho
420 21d40ff9 Ermal Lu?i
		<?php if (count($layer7_rules_list) > 0): ?>
421
                        <tr class="tabcont"><td width="25%" align="left">
422
                        </td><td width="75%"> </td></tr>
423 b11cdf92 Renato Botelho
424
		<?php endif; ?>
425 21d40ff9 Ermal Lu?i
			<tr>
426 e750c0af Colin Fleming
			<td width="25%" valign="top" align="left">
427 21d40ff9 Ermal Lu?i
			<?php
428 b11cdf92 Renato Botelho
				echo $tree;
429 21d40ff9 Ermal Lu?i
			?>
430
			<br/><br/>
431
			<a href="firewall_shaper_layer7.php?action=add">
432 e750c0af Colin Fleming
			<img src="./themes/<?=$g['theme']; ?>/images/icons/icon_plus.gif" title="<?=gettext("Create new l7 rules group"); ?>" width="17" height="17" border="0" alt="add" />  <?=gettext("Create new l7 rules group"); ?>
433 21d40ff9 Ermal Lu?i
			</a><br/>
434
			</td>
435
			<td width="75%" valign="top" align="center">
436 e573ee95 Colin Fleming
			<div id="shaperarea" style="position:relative">
437 e750c0af Colin Fleming
			<?php
438 21d40ff9 Ermal Lu?i
				echo $output;
439
			?>
440 b11cdf92 Renato Botelho
441 21d40ff9 Ermal Lu?i
			<!-- Layer 7 rules form -->
442
			<?php if($show_proto_form): ?>
443 e573ee95 Colin Fleming
			<tr><td width="22%" valign="top" class="vncellreq">
444 e750c0af Colin Fleming
                                <div id="addressnetworkport">
445 813a3ef6 Neriberto C.Prado
                                        <?=gettext("Rule(s)"); ?>
446 21d40ff9 Ermal Lu?i
                                </div>
447
                        </td>
448
449 e750c0af Colin Fleming
                        <td width="78%" class="vtable">
450
                                <table width="236" id="maintable" summary="main table">
451 21d40ff9 Ermal Lu?i
					<tbody>
452 b11cdf92 Renato Botelho
453 21d40ff9 Ermal Lu?i
						<tr>
454 e750c0af Colin Fleming
                                                        <td colspan="4">
455
                                                            <div style="font-size: 8pt; padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066;"
456
                                                                id="itemhelp">
457 813a3ef6 Neriberto C.Prado
                                                                <?=gettext("Add one or more rules"); ?>
458 21d40ff9 Ermal Lu?i
                                                            </div>
459
                                                        </td>
460
                                                </tr>
461
462
                                                <tr>
463
                                                        <td>
464 e750c0af Colin Fleming
                                                            <div style="font-size: 8pt; padding:5px;"
465
                                                                id="onecolumn">
466 813a3ef6 Neriberto C.Prado
                                                                <?=gettext("Protocol"); ?>
467 21d40ff9 Ermal Lu?i
                                                            </div>
468
                                                        </td>
469
470
                                                        <td>
471 e750c0af Colin Fleming
                                                            <div style="font-size: 8pt; padding:5px;"
472
                                                                id="twocolumn">
473 813a3ef6 Neriberto C.Prado
                                                                <?=gettext("Structure"); ?>
474 21d40ff9 Ermal Lu?i
                                                            </div>
475
                                                        </td>
476
477
                                                        <td>
478 e750c0af Colin Fleming
                                                            <div style="font-size: 8pt; padding:5px;"
479
                                                                id="threecolumn">
480 813a3ef6 Neriberto C.Prado
                                                                <?=gettext("Behaviour"); ?>
481 21d40ff9 Ermal Lu?i
                                                            </div>
482
                                                        </td>
483 b11cdf92 Renato Botelho
                                                </tr>
484 21d40ff9 Ermal Lu?i
                                                <!-- PHP Code to generate the existing rules -->
485
						<?php
486
						if($container) {
487
							foreach($container->rsets as $l7rule) {
488
						?>
489
						<tr>
490
							<td>
491 e573ee95 Colin Fleming
							<select name="protocol[]" class="formselect" style="font-size:8pt">
492 21d40ff9 Ermal Lu?i
							<?php foreach($avail_protos as $proto): ?>
493 e750c0af Colin Fleming
							<option value="<?=$proto;?>" <?php if ($proto == $l7rule->GetRProtocol()) echo "selected=\"selected\""; ?>><?=$proto;?></option>
494 b11cdf92 Renato Botelho
							<?php endforeach; ?>
495 21d40ff9 Ermal Lu?i
							</select>
496
						</td>
497
						<td>
498 e573ee95 Colin Fleming
							<select name="structure[]" class="formselect" style="font-size:8pt" onchange="changeBehaviourValues(this.parentNode.parentNode);">
499 21d40ff9 Ermal Lu?i
							<?php foreach($avail_structures as $struct) {
500
							  if($struct == "queue") {
501
							    if(!empty($avail_behaviours_altq)) { ?>
502 e750c0af Colin Fleming
							      <option value="<?=$struct ?>" <?php if ($struct == $l7rule->GetRStructure()) echo "selected=\"selected\""; ?>><?=$struct;?></option>
503 21d40ff9 Ermal Lu?i
							    <?php }
504
							  }
505
							  else {
506
							    if($struct == "limiter") {
507
								if(!empty($avail_behaviours_limiter)) { ?>
508 e750c0af Colin Fleming
								  <option value="<?=$struct ?>" <?php if ($struct == $l7rule->GetRStructure()) echo "selected=\"selected\""; ?>><?=$struct;?></option>
509 21d40ff9 Ermal Lu?i
								<?php }
510
							    }
511
							    else {
512
							      if($struct == "action") { ?>
513 e750c0af Colin Fleming
								  <option value="<?=$struct ?>" <?php if ($struct == $l7rule->GetRStructure()) echo "selected=\"selected\""; ?>><?=$struct;?></option>
514 b11cdf92 Renato Botelho
							      <?php }
515 21d40ff9 Ermal Lu?i
							    }
516
							  }
517
							} ?>
518
							</select>
519
						</td>
520
						<td>
521 e573ee95 Colin Fleming
							<select name="behaviour[]" class="formselect" style="width:80px; font-size:8pt">
522 21d40ff9 Ermal Lu?i
							<?php if($l7rule->GetRStructure() == "action"): ?>
523
								<?php foreach($avail_behaviours_action as $behaviour): ?>
524 e750c0af Colin Fleming
								<option value="<?=$behaviour ?>" <?php if ($behaviour == $l7rule->GetRBehaviour()) echo "selected=\"selected\""; ?>><?=$behaviour;?></option>
525 b11cdf92 Renato Botelho
								<?php endforeach; ?>
526 21d40ff9 Ermal Lu?i
								</select>
527 b11cdf92 Renato Botelho
							<?php endif; ?>
528 21d40ff9 Ermal Lu?i
							<?php if($l7rule->GetRStructure() == "queue"): ?>
529
								<?php foreach($avail_behaviours_altq as $behaviour): ?>
530 e750c0af Colin Fleming
								<option value="<?=$behaviour ?>" <?php if ($behaviour == $l7rule->GetRBehaviour()) echo "selected=\"selected\""; ?>><?=$behaviour;?></option>
531 b11cdf92 Renato Botelho
								<?php endforeach; ?>
532 21d40ff9 Ermal Lu?i
								</select>
533 b11cdf92 Renato Botelho
							<?php endif; ?>
534 21d40ff9 Ermal Lu?i
							<?php if($l7rule->GetRStructure() == "limiter"): ?>
535
								<?php foreach($avail_behaviours_limiter as $behaviour): ?>
536 e750c0af Colin Fleming
								<option value="<?=$behaviour ?>" <?php if ($behaviour == $l7rule->GetRBehaviour()) echo "selected=\"selected\""; ?>><?=$behaviour;?></option>
537 b11cdf92 Renato Botelho
								<?php endforeach; ?>
538 21d40ff9 Ermal Lu?i
								</select>
539 b11cdf92 Renato Botelho
							<?php endif; ?>
540 21d40ff9 Ermal Lu?i
						</td>
541
						<td>
542 e750c0af Colin Fleming
							<a onclick="removeRow('maintable',this.parentNode.parentNode); return false;" href="#"><img border="0" src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" alt="x" /></a>
543 21d40ff9 Ermal Lu?i
						</td>
544
						</tr>
545 b11cdf92 Renato Botelho
546 21d40ff9 Ermal Lu?i
						<?php
547
							} //end foreach
548
						} //end if
549 b11cdf92 Renato Botelho
						?>
550 21d40ff9 Ermal Lu?i
                                        </tbody>
551
                                </table>
552
553 e750c0af Colin Fleming
                                        <a onclick="javascript:addRow('maintable'); return false;" href="#"> <img border="0"
554
                                                src="/themes/<?=$g['theme']; ?>/images/icons/icon_plus.gif"
555
                                                alt="" title="<?=gettext("add another entry"); ?>" /> </a>
556 21d40ff9 Ermal Lu?i
                        </td>
557
			</tr>
558
559
                        <tr>
560 e750c0af Colin Fleming
                        <td width="22%" valign="top">
561 21d40ff9 Ermal Lu?i
                                &nbsp;
562
                        </td>
563
564 e750c0af Colin Fleming
                        <td width="78%">
565 e573ee95 Colin Fleming
                                <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
566 21d40ff9 Ermal Lu?i
567 e750c0af Colin Fleming
				<a href="firewall_shaper_layer7.php">
568 e573ee95 Colin Fleming
                                <input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" />
569 b11cdf92 Renato Botelho
570 21d40ff9 Ermal Lu?i
				<?php if($container): ?>
571 e573ee95 Colin Fleming
						<input id="delete" type="submit" class="formbtn" name="delete" value="<?=gettext("Delete"); ?>" />
572 b11cdf92 Renato Botelho
				<?php endif ?>
573 e573ee95 Colin Fleming
				</a>
574 21d40ff9 Ermal Lu?i
                        </td>
575
                        </tr>
576 b11cdf92 Renato Botelho
			<?php endif; ?>
577 21d40ff9 Ermal Lu?i
			<!-- End of layer7 rules form -->
578
			</table>
579 e573ee95 Colin Fleming
			</div><!-- end of div:shape area -->
580 21d40ff9 Ermal Lu?i
581
		      </td></tr>
582
                    </table>
583
		</div>
584
	  </td>
585
	</tr>
586
</table>
587
</form>
588
589 e750c0af Colin Fleming
<?php include("fend.inc"); ?>
590 21d40ff9 Ermal Lu?i
</body>
591
</html>