#!/usr/bin/perl
use CGI::Carp "fatalsToBrowser";
# Falls Internal Error 500 vor der zweiten Zeile das "#" Zeichen wegmachen!

# Setup Begin

$flock = "1"; # Falls Windows auf 0 setzen ansonsten auf 1.
$proxy = "0"; # Falls Proxy User mitgezählt werden sollen auf 0 ansonsten auf 1 !
$color1 = "0,0,0"; # Farbwert 1 - Dezimalzahlen
$color2 = "255,255,255"; # Farbwert 2 - Dezimalzahlen

# Setup End

# Ab hier NICHTS mehr ändern!
read(STDIN, $input, $ENV{'CONTENT_LENGTH'});@pairs = split(/&/, $input);foreach $pair (@pairs) {($name, $value) = split(/=/, $pair);$name =~ tr/+/ /;$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;$value =~ tr/+/ /;$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;$FORM{$name} = $value;}@vars = split(/&/, $ENV{QUERY_STRING});foreach $var (@vars) {($v,$i) = split(/=/, $var);$v =~ tr/+/ /;$v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;$i =~ tr/+/ /;$i =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;$i =~ s/<!--(.|\n)*-->//g;$INFO{$v} = $i;}$id = $INFO{'id'};$action = $INFO{'action'};$hide = $INFO{'hide'};


BEGIN {
	eval { $died_in_eval = 1; require GD; };
	if ($@) {
		$gd = 0;
	}else{
		$gd = 1;
		import GD;
	}
}

$id = 1 unless($id);

open(C,"<data/$id.txt");
flock(C,2) if($flock);
@count = split(/\|/,(<C>)[0]);
flock(C,8) if($flock);
close(C);

unless($ENV{HTTP_X_FORWARDED_FOR}){
	$ip = $ENV{'REMOTE_ADDR'};
}else{
	$ip = $ENV{HTTP_X_FORWARDED_FOR};
}

if($proxy eq 1 && $ENV{HTTP_VIA} ne ""){
	if ( $ENV{HTTP_VIA} ){
		if( $ENV{HTTP_X_FORWARDED_FOR} ){
			$prox = 0;
		}else{
			$prox = 1;
		}
	}
}

if($ip ne $count[1] && $ip ne $count[2] && $ip ne $count[3] && $ip ne $count[4] && $ip ne $count[5] && $prox ne 1){
	$counter = $count[0] + 1;
        open(C, ">data/$id.txt");
	flock(C,2) if($flock);
	print C "$counter\|$ip\|$count[1]\|$count[2]\|$count[3]\|$count[4]\|";
	flock(C,8) if($flock);
        close(C);
}else{
	$counter = $count[0];
}

unless($counter){
	$counter = 1;
}

if($action eq "js"){
	print "Content-type: text/html\n\n";
	print "document.write('$counter')" if($hide != 1);
}elsif($action eq "grafik" && $gd == 1){
	$lang = length($counter)*8+4;
	$img = new GD::Image($lang,18);
	($color1a,$color1b,$color1c) = split(/\,/ , $color1);
	($color2a,$color2b,$color2c) = split(/\,/ , $color2);
	$white = $img->colorAllocate($color1a,$color1b,$color1c);
	$black = $img->colorAllocate($color2a,$color2b,$color2c);
	$img->filledRectangle(0,0,$lang,18,$black);
	if($hide == 1){
		$counter = "";
	}
	$img->string(gdLargeFont,2,1,$counter,$white);
	binmode STDOUT;
	print "Content-type: image/jpeg\n\n";
	print $img->jpeg;
}else{
	print "Content-type: text/html\n\n";
	print $counter if($hide != 1);
}
exit(0);