# Documentación técnica de Sunfish

Punto de entrada para desarrolladores y agentes de IA. Para el uso como usuario, ver el
[README principal](../README.md). El resumen de decisiones y estado que leen los agentes de IA
está en [AGENTS.md](../AGENTS.md).

## Qué es Sunfish

Servidor web y de ficheros ligero y portable, en C# (.NET 10). Publica carpetas del disco a la
vez por **web** (con un navegador de directorios en HTML4 que funciona en navegadores de los
90), **FTP** y **WebDAV**. Su uso principal es mover ficheros entre equipos modernos y
**máquinas muy antiguas** (DOS, Windows 3.1 y 9x, Mac clásico) en una red de confianza. La
versión 3 es una reescritura completa de la 2.0.

## Índice

| Documento | Contenido |
|---|---|
| [ARQUITECTURA.md](ARQUITECTURA.md) | Biblioteca común y aplicaciones, estructura del repo, publicación, módulos, AOT |
| [SHARES-Y-RUTAS.md](SHARES-Y-RUTAS.md) | El share, *locations* por prefijo más largo, validación de rutas, permisos, configuración, importación de la 2.0 |
| [WEB.md](WEB.md) | Motor HTTP propio, interfaz clásica/moderna, juegos de caracteres, subidas, ZIP, panel de administración |
| [FTP-Y-WEBDAV.md](FTP-Y-WEBDAV.md) | Servidor FTP (activo/pasivo, comandos, juegos de caracteres) y WebDAV |
| [CLIENTES.md](CLIENTES.md) | Plataformas de destino, perfiles de cliente automáticos, alias 8.3, fuente |
| [MAC-CLASICO.md](MAC-CLASICO.md) | MacBinary, BinHex y AppleDouble transparentes para no perder *resource forks* |
| [SEGURIDAD.md](SEGURIDAD.md) | Alcance (en claro, redes de confianza) y medidas de protección del servidor |
| [APLICACIONES.md](APLICACIONES.md) | `Sunfish.exe` (WinForms), `sunfish-cli` (TUI/consola), futuras GTK y macOS |
| [COMPILACION-Y-PRUEBAS.md](COMPILACION-Y-PRUEBAS.md) | Estado, publicación, requisitos, scripts y pruebas previstas |
| [LEGACY-2.0.md](LEGACY-2.0.md) | Qué tenía la 2.0 y qué se mantiene, cambia o elimina |

## Hechos clave (leer antes de tocar nada)

- **Fase de diseño:** solo documentación. El código de la carpeta `Sunfish/` es la 2.0 (.NET
  Framework 4.5) y **no se porta**: se reescribe.
- **Toda la lógica** va en `Sunfish.Core` (compatible con Native AOT); las aplicaciones solo son
  interfaz.
- **Motor HTTP propio sobre `Socket`:** ni `HttpListener` (exige administrador) ni Kestrel (es
  estricto con clientes antiguos y no permite AOT).
- **Web, FTP y WebDAV** sirven el mismo árbol de shares; gana la *location* más específica.
- **Modo clásico** de la web: HTML 3.2/4.01, sin JavaScript, ISO-8859-1 con entidades, iconos
  GIF, fuente sin serifa.
- **Adaptación automática al cliente** (perfiles `dos`, `win16`, `mac`, `text`, `classic`,
  `modern`): alias 8.3, MacBinary, juegos de caracteres. Las opciones del share solo sirven para
  desactivarla (`Mac = false`, `ShortNames = false`).
- **Sunfish a Sunfish por WebDAV** + DNS-SD; no hay protocolo propio.
- **En claro y sin TLS**, a propósito; nunca se requiere administrador; nunca se ejecuta nada en
  el servidor.
- **Textos de usuario** en español e inglés; claves del fichero de configuración en inglés.

## Decisiones pendientes

Recogidas con la marca **pendiente** en cada documento. Las principales:

- Permisos por usuario dentro de un share.
- GUI y panel web: iniciar con Windows y lista de conexiones activas (diseñadas, no hechas).
- Juego de caracteres de los formularios enviados por clientes antiguos (probar con clientes
  reales).
- Firmas de User-Agent de cada perfil (se completan al probar).
- Sección `[MacTypes]` para ampliar la tabla de tipos y creadores de Mac.
- Convivencia del mDNS propio con el del sistema.
- Regla del cortafuegos de Windows desde la GUI; servicio de Windows para `sunfish-cli`.
- Bindings para las interfaces GTK y macOS.
