3 # Create, update or delete a delay pool
5 require './squid-lib.pl';
6 $access{'delay'} || &error($text{'delay_ecannot'});
8 &lock_file($config{'squid_conf'});
10 &error_setup($text{'pool_err'});
12 @pools = &find_config("delay_class", $conf);
13 @params = &find_config("delay_parameters", $conf);
14 @access = &find_config("delay_access", $conf);
15 $pools = &find_config("delay_pools", $conf);
16 $pools = { 'name' => 'delay_pools' } if (!$pools);
18 ($pool) = grep { $_->{'values'}->[0] == $in{'idx'} } @pools;
19 ($param) = grep { $_->{'values'}->[0] == $in{'idx'} } @params;
22 $pool = { 'name' => 'delay_class',
23 'values' => [ $pools->{'values'}->[0] + 1 ] };
24 $param = { 'name' => 'delay_parameters',
25 'values' => [ $pools->{'values'}->[0] + 1 ] };
29 # When deleting, the numbers of any pools 'above' it must be shifted
30 # down, any delay_access directives removed and the delay_pools count
32 @access = grep { $_->{'values'}->[0] != $in{'idx'} } @access;
33 @pools = grep { $_ ne $pool } @pools;
34 @params = grep { $_ ne $param } @params;
35 map { $_->{'values'}->[0]-- if ($_->{'values'}->[0] > $in{'idx'}) }
36 (@access, @pools, @params);
37 &save_directive($conf, "delay_class", \@pools);
38 &save_directive($conf, "delay_parameters", \@params);
39 &save_directive($conf, "delay_access", \@access);
40 $pools->{'values'}->[0]--;
41 &save_directive($conf, "delay_pools", [ $pools ]);
44 # Validate and store inputs
45 $pool->{'values'}->[1] = $in{'class'};
46 if ($in{'class'} == 1) {
47 @v = ( &parse_limit("agg") );
49 elsif ($in{'class'} == 2) {
50 @v = ( &parse_limit("agg"), &parse_limit("ind") );
52 elsif ($in{'class'} == 3) {
53 @v = ( &parse_limit("agg"), &parse_limit("net"),
54 &parse_limit("ind") );
56 elsif ($in{'class'} == 4) {
57 @v = ( &parse_limit("agg"), &parse_limit("net"),
58 &parse_limit("ind"), &parse_limit("user") );
60 elsif ($in{'class'} == 5) {
61 @v = ( &parse_limit("tag") );
63 $param->{'values'} = [ $param->{'values'}->[0], @v ];
66 # Add the pool and increment the count
67 $pools->{'values'}->[0]++;
69 push(@params, $param);
70 &save_directive($conf, "delay_pools", [ $pools ]);
72 &save_directive($conf, "delay_class", \@pools);
73 &save_directive($conf, "delay_parameters", \@params);
74 &save_directive($conf, "delay_access", \@access);
78 &unlock_file($config{'squid_conf'});
79 &webmin_log($in{'new'} ? "create" : $in{'delete'} ? "delete" : "modify",
80 "pool", $in{'idx'}, \%in);
81 &redirect("edit_delay.cgi");
86 if ($in{"$_[0]_def"}) {
90 local @ud = ( .125, 1, 125, 1000, 125000, 1000000 );
91 local $u1 = $in{"$_[0]_1_n"};
92 local $u2 = $in{"$_[0]_2_n"};
93 $u1 =~ /^\d+$/ || $u1 == -1 || &error(&text('pool_elimit1', $u1));
94 $u2 =~ /^\d+$/ || $u2 == -1 || &error(&text('pool_elimit2', $u2));
95 $u1 = int($u1 * $ud[$in{"$_[0]_1_u"}]);
96 $u2 = int($u2 * $ud[$in{"$_[0]_2_u"}]);