#!/usr/bin/perl -w

use strict;
use HTTP::Daemon;
use HTTP::Status;
use File::Spec;

my $daemon = new HTTP::Daemon 
			LocalPort => 8000 or die;
my $prefix="/var/www";

print "Dirección y puerto reservados: ", $daemon->url, "\n";
# Este while espera conexiones eternamente.
while (my $conexion = $daemon->accept) {
	while (my $request = $conexion->get_request) {
		unless($request->method eq 'GET') {
			$conexion->send_error(RC_METHOD_NOT_ALLOWED);
		}
		# Ruta completa del archivo pedido.
		my $archivo = $prefix . File::Spec->canonpath($request->url->path);
		print "Sirviendo: $archivo\n";
		# Si el archivo no existe, se indica que no se encontró.
		unless(-e $archivo) {
			$conexion->send_error(RC_NOT_FOUND);
			print "NOT_FOUND\n";
		}
		# Si el archivo no se puede leer, no se muestra al usuario.
		unless(-r $archivo) {
			$conexion->send_error(RC_FORBIDDEN);
			print "FORBIDDEN\n";
		}
		# Si llegó hasta acá, se envía el archivo.
		$conexion->send_file_response($archivo);
		print "Listo.\n";
	}
	$conexion->close;
	undef($conexion);
}

