Pues eso, estos días estoy entretenido con un nuevo
juguete, no se si recordáis el micro servidor que colgué por
aquí ya hace un año,
pico lo llame, pues ahora he intentando hacer algo similar en
linux (el pico original no funciona en linux porque wine no implementa todavía la API TransmitFile).
Así que he abierto el gedit, y comencé a escribir código en C. Por ahora llevo unas 500 lineas de código, y ya maneja correctamente el comando Get, puede enviar archivos, mensajes de texto, listar directorios, codificar/descodificar urls y además es multihilo. Faltan por implementar la autentificación, el comando Head y algún método de Timeout a la hora de leer el socket, pero eso ya lo haremos mas adelante si es necesario.
El funcionamiento es sencillo, solo hay que ejecutar pico en un terminal y luego en cualquier navegador utilizar la url
http://127.0.0.1:1978/ si es en el mismo equipo o
http://tuip:1978/ si es desde otro equipo de tu red. Se puede ejecutar sin usar el terminal, pero entonces el programa permanece oculto y no mostraría ni mensajes, ni errores (si los hubiera). Una vez que accedemos a esa url vemos un listado de todo el sistema de ficheros, aquí es importante recordar que el programa tiene los mismos permisos de lectura que el usuario que lo ejecuta (para mas adelante estoy pensando en utilizar algo como chroot para cambiar el directorio raíz del proceso).
Como siempre, se admiten sugerencias, consejos, criticas (sin pasarse

) pero siempre recordando que se trata de un
juguete y no de un servidor serio, yo al menos pienso utilizarlo como venia haciéndolo con su hermano gemelo en windows, para pasar archivos de un ordenador a otro rápidamente y sin tener que andar instalando nada, ni cambiando la configuración de las carpetas compartidas, etc ... un par de clicks y copiando, sin complicarse (muy útil cuando quieres pasar archivos al portátil de un amigo).
Cambios:
- 12/04/2006 - Primer bug corregido
. Solo era un problemilla de zombies ...
- 13/04/2006 - Ahora si no se realizan peticiones nuevas en 30 segundo la conexión de cierra.
- Se muestran mas mensajes con información, y se indica a que proceso pertenece.
- Arreglado un pequeño fallo en la función urldecode
- 15/04/2006 - Rehice algunas funciones.
- Ahora el puerto, el timeout y el tamaño de buffer se pueden cambiar desde la linea de comandos.
- Volvieron los zombies, pero ahora creo que ya los mato bien muertos ...
- Los mensajes de error http son mas precisos
- Ya manejo el comando HEAD
- 21/04/2006 - Pequeñas modificaciones para poder utilizarlo conjuntamente con xinetd ...