#!/usr/bin/perl use POE; use POE::Kernel; use POE::Loop::Select; use POE::Resource; use POE::Resource::Aliases; use POE::Resource::Events; use POE::Resource::Extrefs; use POE::Resource::FileHandles; use POE::Resource::SIDs; use POE::Resource::Sessions; use POE::Resource::Signals; #use POE::Resource::Statistics; use POE::Component::Server::TCP; use strict; my $logfile = './waw.log'; my $configfile = './waw.conf'; my $def_index = "index.html"; my $def_port = 88; my $def_htdocs = './htdocs/'; my %filetype = (htm=>'HTML', html=>'HTML', pl=>'PERL', php=>'PHP'); # extension => type my %interpreter = (PERL=>'/usr/bin/perl'); # turn on autoflush $|=1; TCPServer (); POE::Kernel->run(); sub Log { my $msg = shift; open(my $f, ">>$logfile") or die $!; print $f "$msg"; close $f; print "$msg"; } sub TCPServer { #my %daten=%{$_[0]}; POE::Component::Server::TCP->new( Alias => "SERVER", Port => $def_port, ClientInput => sub { my ($session, $heap, $input) = @_[SESSION, HEAP, ARG0]; print "$input\n"; # GET /index.html HTTP/1.1 if ($input =~ /GET|POST.*HTTP/) { my $file=""; my $param=""; my $method=""; ($method, $file) = $input =~ /(GET|POST) \/(.*) HTTP/; # lese anzuzeigende datei aus GET aus # GET,POST abfangen if ($file =~ /\?/) { ($file,$param) = $file =~ /(.*)\?(.*)/; } if ($file eq "") { # wenn keine datei angegeben standard datei öffnen, normalerweise index.html $file = $def_index; } $file = "$def_htdocs$file"; Log ("$method $file;"); my $senddata; my $error=0; my @ausgabe=(); if (-e "$file") { # existiert angeforderte datei diese öffnen Log("OK\n"); # Dateityp? my $type = checkfiletype($file); if ($type ne "UNKNOWN") { @ausgabe = interpret ($type, $file, $param); } else { Log("Type of file unknown\n"); } #$heap->{client}->put($input); } else { # fehler 404 wenn datei nicht existiert $senddata = error_html("404 Not found!"); Log("404\n"); $error=1; } # Datei ausgelesen und kein Fehler if (!$error) { # Parsen auf perl Tags $senddata = parseperl(@ausgabe); } # Ausgabe zum Browser senden print "###\n$senddata\n###\n"; ########################## $heap->{client}->put("Content-type: text/html\n");######################## $heap->{client}->put("$senddata\n"); $_[KERNEL]->yield("shutdown"); } else { #$heap->{client}->put($input); } }, ); } sub error_html { return "\n
\n