#!/usr/bin/perl use HTTP::Daemon; use HTTP::Status; use HTTP::Request; use LWP::UserAgent; use URI::Escape; use CGI; use FindBin; chdir $FindBin::Bin; # chdir to the directory of this perl script my $d = new HTTP::Daemon LocalPort => 8083; print "Please contact me at: url, ">\n"; $SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes while (my $c = $d->accept) { if (fork() == 0) { while (my $r = $c->get_request) { if ($r->method eq 'GET' && $r->url->path eq "/draw") { my $http_query = $r->url->equery; my $cgi = new CGI("$http_query"); my $url = $cgi->param('url'); $url = $url.'¶m.PID='.$$; print "URL: $url\n"; my $ua = LWP::UserAgent->new; my $request = HTTP::Request->new(GET => "$url"); my $response = $ua->request($request, "prova0.$$.dot"); if (system("make PID=$$ > log.$$") == 0) { $c->send_file_response("prova.$$.html"); } else { $c->send_error(RC_INTERNAL_SERVER_ERROR); } } elsif ($r->method eq 'GET' && $r->url->path eq "/get_gif") { my $http_query = $r->url->equery; my $cgi = new CGI("$http_query"); my $pid = $cgi->param('pid'); print "Returning GIF: $pid\n"; $c->send_file_response("prova.$pid.gif"); system("make PID=$pid clean ; rm -f prova0.$pid.dot"); } elsif ($r->method eq 'GET' && $r->url->path eq "/help"){ print "Help requested!\n"; my $response = new HTTP::Response; $response->content("Graph Drawer Version: ???"); $c->send_response($response); } else { $c->send_error(RC_FORBIDDEN) } } $c->close; undef($c); exit; } # fork }