3 # Save karma traffic control options
5 require './jabber-lib.pl';
7 &error_setup($text{'karma_err'});
9 $conf = &get_jabber_config();
10 $io = &find("io", $conf);
11 $karma = &find("karma", $io);
14 # Create a new empty karma block
15 $karma = [ "karma", [ { } ] ];
18 # Validate and store inputs
19 if ($in{'rate_def'}) {
20 &save_directive($io, "rate");
23 $in{'points'} =~ /^\d+$/ || &error($text{'karma_epoints'});
24 $in{'time'} =~ /^\d+$/ || &error($text{'karma_etime'});
25 &save_directive($io, "rate",
26 [ [ "rate", [ { 'points' => $in{'points'},
27 'time' => $in{'time'} } ] ] ] );
29 if ($in{'mode'} == -1) {
30 # Remove karma section entirely
31 &save_directive($io, "karma");
33 elsif ($in{'mode'} == 3) {
34 # Check user karma inputs
35 foreach $k ('heartbeat', 'init', 'max', 'dec', 'penalty', 'restore') {
36 $in{$k} =~ /^\d+$/ || &error($text{"karma_e$k"});
37 local $v = $k eq 'penalty' ? -$in{$k} : $in{$k};
38 &save_directive($karma, $k, [ [ $k, [ { }, 0, $v ] ] ] );
42 # Use pre-defined karma
43 $kp = $karma_presets[$in{'mode'}];
44 foreach $k (keys %$kp) {
45 &save_directive($karma, $k, [ [ $k, [ { }, 0, $kp->{$k} ] ] ] );
47 &save_directive($io, "karma", [ $karma ] );
49 &save_jabber_config($conf);