#!/usr/bin/perl

use warnings;
use strict;

use IO::Socket;

# Puerto en el que voy a escuchar
my($server_port) = 8000;
# Directorio donde voy a guardar los archivos
my($outdir) = "./backups";

my($server, $cliente, $arch);

# Creo el servidor
$server = IO::Socket::INET->new(
		LocalPort => $server_port,
		Type      => SOCK_STREAM,
		Listen    => 5,
		Reuse     => 1)
	or die "No puedo tomar el puerto $server_port: $@\n";

# Espero una conexión
while ($cliente = $server->accept()) {
	print STDERR "Conexión de ", $cliente->peerhost(), "\n";
	# Leo la primera línea, reinicio si no lei nada.
	$arch = <$cliente>;
	unless($arch) {
		warn "Conexión cerrada prematuramente\n";
		next;
	}
	# Limpio de caracteres de control
	$arch =~ tr#\000-\037##d;
	# Reemplazo barras y espacios
	$arch =~ tr#\\/ #___#;
	# Abro el archivo de salida
	print STDERR "Grabando en $outdir/$arch\n";
	unless(open(FILE, ">", "$outdir/$arch")) {
		warn "No puedo crear $outdir/$arch: $!\n";
		next;
	}
	# Bajo el contenido
	while(<$cliente>) {
		print FILE $_;
	}
	close(FILE);
}

close($server);
