Реализация «ТИПА А» на FTP-сервере

Я пишу FTP-сервер (в Qt / C ++), и сейчас я с «200 Ok» для «TYPE A», но я действительно трактую это так же, как «TYPE I» — файлы отправляются как есть.

Как мне правильно реализовать ТИП А? Достаточно ли будет открыть файлы в текстовом режиме вместо двоичного?

Кроме того, я предполагаю, что метод SIZE должен быть более сложным, чем возвращать размер файла на диске, он должен читать его, выполнять подстановки текста и возвращать размер таким образом?

Редактировать: В ответ на комментарий вот соответствующая выдержка из спецификация RFC959:

     3.1.1.1.  ASCII TYPE

This is the default type and must be accepted by all FTP
implementations.  It is intended primarily for the transfer
of text files, except when both hosts would find the EBCDIC
type more convenient.

The sender converts the data from an internal character
representation to the standard 8-bit NVT-ASCII
representation (see the Telnet specification).  The receiver
will convert the data from the standard form to his own
internal form.

In accordance with the NVT standard, the <CRLF> sequence
should be used where necessary to denote the end of a line
of text.  (See the discussion of file structure at the end
of the Section on Data Representation and Storage.)

Using the standard NVT-ASCII representation means that data
must be interpreted as 8-bit bytes.

The Format parameter for ASCII and EBCDIC types is discussed
below.

1

Решение

Для передачи файлов в режиме ASCII (тип A) вам необходимо открыть файлы в текстовом режиме, а затем перенести их с завершающей строкой CRLF. Если вы реализуете команду SIZE, вам потребуется сообщить размер в соответствии с типом передачи. Потому что это явно слишком много, чтобы сканировать весь файл только для того, чтобы получить правильный размер сервера, который часто возвращается 550 SIZE not allowed in ASCII mode если команда используется не в режиме изображения.

3

Другие решения


По вопросам рекламы [email protected]