Home Homebrew Rilasciato ftpsrv v1.0.0: Un server FTP leggero e multipiattaforma per console Nintendo

Rilasciato ftpsrv v1.0.0: Un server FTP leggero e multipiattaforma per console Nintendo

62
0

Il developer ITotalJustice ha creato un nuovo server FTP leggero, veloce e single-threaded scritto in linguaggio C, compatibile con diverse console, tra cui Nintendo Wii, 3DS, DS e Switch.

Questo progetto è stato sviluppato per imparare il protocollo FTP e implementa un server con basso utilizzo di memoria, nessuna allocazione dinamica e overhead ridotto grazie all’uso di funzioni come poll() o, in assenza di questa, select().

Il server FTP è configurabile, con un file di configurazione situato in /config/ftpsrv/config.ini. Ogni release include un template per evitare di sovrascrivere le configurazioni esistenti durante gli aggiornamenti.

Sulla Nintendo Switch, per motivi di sicurezza, è obbligatorio impostare un nome utente e una password, a meno che non venga abilitata l’opzione anonima (anon=1).

Questo è particolarmente importante se usato con ldn-mitm, che potrebbe altrimenti permettere modifiche non autorizzate alla scheda SD.

Piattaforme supportate

Il server è stato portato sulle seguenti piattaforme:

  • Nintendo Switch: Sia come applicazione che come sys-module.
  • Nintendo Wii.
  • Nintendo 3DS: Necessita di ottimizzazioni, poiché utilizza attualmente I/O POSIX con overhead.
  • Nintendo DS: La build risolve un problema con dswifi e il supporto WPS, che non è attualmente supportato ufficialmente da devkitPro.

Pianificato anche un porting per console PlayStation 4, ma richiede ulteriori competenze nella creazione di servizi in background (daemon).

Problematiche note e workaround

  1. Bug con Dolphin (KDE): Un problema specifico con il comando LIST e file .jpg/.png in directory. Il workaround consiste nel non inviare il pathname nella risposta del comando LIST.
  2. Compatibilità con ffmpeg/mpv: I client come ffmpeg utilizzano il comando ABOR durante i trasferimenti, causando blocchi. La soluzione implementata separa i comandi e gli argomenti utilizzando il delimitatore \r\n.

Comandi supportati senza autenticazione

Sono supportati comandi FTP standard come USER, PASS, QUIT, ABOR e HELP. Tuttavia, il comando PWD, secondo l’RFC959, dovrebbe essere disponibile senza autenticazione, ma in questa implementazione richiede l’autenticazione e restituisce un errore 530 se non soddisfatta.

Funzionalità future

Tra le funzionalità in programma vi sono il supporto per TLS, l’aggiunta di comandi FTP avanzati come ACCT, STOU e SITE, oltre alla validazione della sequenza di comandi come RNTO dopo RNFR.

Changelog

Fix “vfs_unistd close” e socket non bloccanti

  • Precedentemente, molti socket erano bloccanti, causando potenziali blocchi su alcune piattaforme come Nintendo Switch. Ora, i socket di controllo vengono sottoposti a polling per i dati in uscita, migliorando la reattività.
  • Risolto un bug grave nei socket unistd che chiudeva erroneamente STDIN (fd=0) durante il comando LIST.

Rimozione di sscanf e miglioramenti nei messaggi di errore

  • Sostituiti gli utilizzi di sscanf con snprintf e strtol per migliorare le prestazioni.
  • Risolto un errore di polling sul comando PORT.
  • Migliorati i messaggi di errore per i comandi RETR e STOR, includendo il percorso completo.

Messaggi di controllo asincroni

  • I messaggi verso i client ora vengono inviati in modalità asincrona. Aggiunto un buffer aggiuntivo per gestire gli errori di invio.

Timeout delle sessioni e rimozione di sendfile

  • Aggiunto un timeout per le sessioni inattive, per prevenire il consumo di tutte le risorse disponibili.
  • Rimosso temporaneamente il supporto a sendfile (Linux), che offriva velocità elevate, ma non era supportato su altre piattaforme.

Nuove funzionalità e fix per Nintendo Switch (Nx)

  • Supporto a opzioni separate per porte tra applicazione e sys-module.
  • Montaggio e visualizzazione dei salvataggi, dump del firmware, e velocità di trasferimento migliorate nel sys-module.
  • Il LED lampeggia durante i trasferimenti di dati.
  • Nuove opzioni di montaggio per bis, hdd, e sistemi di salvataggio.
  • Risolto un bug con il sysmod che esauriva la memoria dei socket.
  • Aggiunto supporto per il montaggio di “gc”, romfs, e archiviazione zip per salvataggi.

Timeout nel ciclo di trasferimento dati

  • Inserito un timeout di 1ms per gestire situazioni in cui la velocità del disco è inferiore a quella della rete, come nel caso di trasferimenti da HDD.

Ottimizzazioni e aggiornamenti generali

  • Miglioramenti nello stile del codice e aggiunta di informazioni di versione e commit nel sistema di build con CMake.
  • Aggiunto supporto UTF-8 per i comandi OPTS.
  • Il backend VFS gestisce ora i dispositivi virtuali.

Download: ftpsrv v1.0.0 (3DS)

Download: ftpsrv v1.0.0 (NDS)

Download: ftpsrv v1.0.0 (Wii)

Download: ftpsrv v1.0.0 (Switch app) (Switch sysmodule)

Download: Source code ftpsrv v1.0.0

Fonte: gbatemp.net

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.