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

184
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

Alcune parti di questo articolo sono state generate con l’aiuto dell’intelligenza artificiale.

🔥 Prodotti in promozione e articoli più venduti: Nintendo Switch

Vedi altri prodotti Nintendo Switch

Questo articolo contiene link affiliati a Amazon. Se acquisti tramite questi link, potrei guadagnare una commissione senza costi aggiuntivi per te.

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui
Captcha verification failed!
Punteggio utente captcha non riuscito. Ci contatti per favore!

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.