             Краткое описание особенностей работы FTP плагина
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          для менеджера FAR и особенностей некоторых FTP серверов
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Этот файл содержит информацию двух типов:
  - особенности плагина или его неочевидные возможности;
  - известные проблемы и особенности некоторых FTP серверов;

Файл разделён на секции, каждая из которых описывает одну из операций плагина,
таких как:
  A) "Прокси"
      Как плагин работает через прокси-сервер и какие типы умеет использовать.

  1. "Скорость"
      советы по настройке плагина для получения максимальной/оптимальной
      скорости передачи файлов;

  2. "Листинг файлов"
      получение списка файлов в текущей директории с сервера;

  3. "Командная строка"
      особенности использования командной строки;

  4. "Копирование"
      особенности копирования;

  5. "Перемещение"
      особенности перемещения;

  6. "Удаление"
      особенности при удалении файлов на панели плагина;

  7. "Различная специфика "
      различные специфические особенности, которые не относятся к какой-то
      одной операции;

  8. "Различная специфика "
      Ответы на наиболее часто задаваемые вопросы и/или советы.

А) Прокси
~~~~~~~~~~~~
  - Плагин умеет использовать единственный тип прокси-соединения - установку
    соединения через дополнительную машину в сети.
    Многие программы, умеющие использовать прокси-соединения, называют этот
    метод "user@host".
    При этом методе плагин передаёт на проксирующую машину адрес ФТП сервера
    и имя пользователя для подключения к этому серверу.
    Удалённая машина устанавливает соединение и, в дальнейшем, напрямую
    транслирует команды ФТП от плагина к удалённому серверу и обратно.
  - Используемый плагином метод соединения НЕ поддерживает паролирование.
  - Мне известен единственный сервер под Windows, который поддерживает такой
    способ соединения - WinGate.
  - Плагин НЕ работает с другими типами прокси.
  - Плагин НЕ работает с "HTTP proxy с FTP-поддержкой".

 Дополнительно:
  - Множество типов соединения поддерживает плагин FarNavigator, который вы
    можете использовать, если вам нужен проксируемый доступ к ФТП.

1. Скорость
~~~~~~~~~~~~
  Плагин МОЖНО настроить так, что он будет, как минимум, не медленнее всех
  аналогичных FTP клиентов, работающих на этой же машине с тем же сервером
  со сходными настройками.

  Скорость передачи данных разными клиентами между двумя машинами зависит от
  следующих параметров:
    - количество данных, которые программа пытается передать операционной
      системе (sоcket АПИ) за один раз;
    - количество времени (процент от общего), которое программа потратит на
      приём/передачу данных и которое она отдаст остальным программам;

  Оба этих параметра можно настроить в плагине.

  Объём передаваемых данных для новых соединений настраивается в глобальных
  настройках плагина. Для каждого сервера на панели хостов это значение можно
  задать индивидуально.

  Количество времени, которое плагин будет отдавать системе, по умолчанию,
  установлено в значения оптимальные для среднескоростных соединений
  (до 10Мбит) и нуждается в настройке только если у вас значительно более
  высокие скорости (нормальная 100Мбит или выше).
  Регулируется этот параметр заданием значения в реестре используя описание
  из файла "TechInfo_rus.reg".

  Несколько советов:
    а) Размер буфера передачи - наиболее влиятельная характеристика.
       Экспериментируйте с этим значением в ШИРОКИХ пределах. От десятков
       байт до десятков мегабайт.

    б) Почти все FTP сервера на базе операционных систем *nix более успешно
       работают с небольшими буферами (рекорд скорости на одном из сайтов -
       буфер в 50 байт); тогда как для серверов на базе Windows, часто, лучше
       указывать большие размеры (IIS на локальной машине с размером буфера в
       "8М" отстал от копирования файла ФАРом на этой же машине всего на 30%).

    в) ВНИМАТЕЛЬНО прочитайте описание параметров и помните, что значения
       WaitХХХ связывают загруженность процессора и скорость копирования
       прямой зависимостью. Т.е. чем больше скорость - тем больше загрузка
       процессора, и наоборот - при меньшей загрузке процессора вы получите
       меньшую скорость.

    г) При настройке значений WaitХХХ обратите внимание на то, что после того,
       как вы подберёте максимальную скорость при текущем значении размера
       буфера копирования, для достижения максимальной скорости на вашей сети
       может потребоваться повторная настройка размера буфера, т.к. поведение
       socket API при сильной загрузке процессора может чувствительно
       отличаться.

    д) Не забывайте, что вы можете оказаться в локальной сети не одни. Не
       стоит бить тревогу и ругать плагин при внезапном падении скорости.
       Сначала убедитесь, что кто-то другой не тащит с того же сервера
       какой-нибудь фильм, забивая этим канал сетевой карты...


2. Листинг файлов
~~~~~~~~~~~~~~~~~~
  Некоторые FTP сервера генерируют разные листинги в ответ на одну и ту же
  стандартную команду.

  1. Некоторые сервера генерируют листинги, содержащие нестандартные символы
     разделители. В результате плагин ошибается при разборе полученного
     листинга.
     Решить эту проблему можно изменив используемую команду получения листинга
     ("LIST -la" вместо "LIST", или наоборот)

  2. Некоторые сервера не понимают параметры команды "LIST" и генерируют
     листинг, которые не содержит имён файлов вообще, только имена директорий.
     Один известный сервер с таким поведением - это "ftp.timus.ru".
     Чтобы избежать этого используйте команду "LIST" (или отключите
     использование расширенной команды листинга для этого сервера).

  3. Некоторые сервера возвращают неправильные даты и времена файлов или не
     возвращают их вовсе.
     Будьте готовы к тому, что дата файла не соответствует реальной дате файла
     на сервере.

  4. Размер файлов, созданных как связи на файловой системе сервера, имеет
     небольшое (несколько байт) значение и не имеет ничего общего с реальным
     размером файла, на который ссылается связь.
     Если вы копируете такой файл, то индикатор копирования дойдёт до 100% и
     будет показывать это значение до конца копирования.

3.1. Командная строка (общее)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1. Вы можете вызвать плагин используя префикс плагина ("ftp").
     См. помощь плагина для описания использования префикса.

  2. Вы можете установить ссылку ФАРа на каталог на любом сервере (используя
     стандартные сочетания клавиш Ctrl+Shift+<номер>) и использовать эти
     ссылки для быстрого соединения с сервером и перехода в каталог, для
     которого была создана ссылка.
     Плагин сохраняет все свойства текущего соединения в данных созданной
     ссылки и использует их для установления соединения.

  3. Плагин понимает префикс "http://", но пока НЕ РАБОТАЕТ с протоколом
     HTTP.
     Если Вы создали сервер с префиксом "http", плагин всё равно будет
     обращаться к этому серверу как к ftp-серверу.


3.2. Командная строка (FTP)
~~~~~~~~~~~~~~~~~~~~~~~~~
  Плагин умеет выполнять FTP команды, которые Вы набираете в командной строке.

  1. Плагин НЕ переводит и не изменяет текст, который Вы ввели в командной
     строке. Текст будет послан серверу в неизменённом виде, и после этого
     будет прочитан  текстовый ответ сервера.
     К примеру, Вы можете написать "HELP" (без кавычек) в командной строке и
     выполнить эту команду, чтобы посмотреть список и синтаксис используемых
     FTP команд текущего сервера. Большинство серверов понимают эту команду.

  2. При выполнении команды плагин посылает её текст серверу и читает ответ.
     Плагин НЕ создаёт соединения для передачи данных, поэтому Вы не можете
     корректно выполнить команду, требующую создания такого соединения.

  3. Плагин НЕ умеет передавать файлы используя технику PASV, но очень
     несложно организовать такое соединение вручную использую командную
     строку и две открытые панели плагина.


4 Копирование
~~~~~~~~~~~~~~
  1. По соображениям сохранности временных файлов, старайтесь НЕ копировать
     файлы с одного сервера на другой, открывая на обеих панелях плагин.
     Если Вы хотите скопировать файлы с одного сервера на другой, то
     используйте временный каталог, куда скопируйте файлы с сервера источника
     и залейте их на целевой сервер.

  2. Диалог процесса копирования может быть полностью изменён Вами. См.
     документацию на плагин для детального описания технологии создания
     собственного диалога копирования.

5. Перемещение
~~~~~~~~~~~~~~
  1. Плагин УМЕЕТ правильно перемещать файлы в:
    - родительский каталог ("..");
    - каталог, указанный в виде абсолютного пути ("/DestDir")
      (См. "Особенности");
    - каталог, указанный в виде относительного пути ("../DestDir");
    - с одной панели плагина на другую, если на обеих панелях открыт один и
      тот же сервер;

  2. Плагин успешно перемещает ТОЛЬКО в случае:
    - Исходным для переноса является файл (не каталог или связь);
    - Целевой каталог является доступным, и пользователь имеет права на
      создание файлов в этом каталоге;
    - Целевой каталог располагается на той же точке монтирования, что и
      каталог, откуда производится перенос.
   Другими словами, перенос осуществим там, где может отработать системная
   утилита "mv" в юниксо-подобных системах, или "move" в микрософтовских
   системах.

  3. Целевые директории могут начинаться с префикса плагина ("ftp:/DestDir").

  Особенности
  ***********
  Перемещение - специфичная для серверов операция.
  Не все сервера одинаково понимают все способы задания путей, которые Вы
  можете ввести.

  Известные особенности:
    - WarFTP
      Не умеет перемещать вообще: создаёт файл нулевого размера в месте, куда
      перемещают, и возвращает сообщение о системной ошибке.
      После такого ошибочного перемещения может перестать реагировать на
      команды вообще; самый надёжный способ починиться - разорвать соединение
      с сервером и соединиться заново.

    - BlackMoon FTP server
      Не понимает перемещение в относительные каталоги.
      Вы можете использовать полный путь для перемещения.

    - BlackMoon FTP server
      Молча и безошибочно переносит в каталог "..", реально не создавая нового
      файла. Т.е. файл просто теряется.
      Прямой перенос в каталог ".." плагин обработает корректно, однако если
      перенос в ".." осуществляется косвенно ("/Tmp/.."), то Вы потеряете свои
      файлы.

6. Удаление
~~~~~~~~~~~
  Особенности
  ***********
    - BlackMoon FTP server
      a) Иногда не удаляет файлы не сообщая никакой ошибки.
      b) Сразу после операций с файлом отказывается удалять сообщая об ошибке
         системы:
           "The process cannot access the file because it is being used by
           other process"
         Через некоторое время, когда плагин освободит только что
         использовавшиеся файлы удаление можно повторить. Или повторять до тех
         пор пока она не пройдёт успешно.

7. Различная специфика (FTP)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 BlackMoon FTP server
      a) Часто генерирует ошибку:
           SIZE /HomeAlone3.avi
           550 Requested action not taken
         если пытаться докачать файл на сервер после восстановления
         соединения. Такое чувство, что ошибка из той же оперы, что и "file is
         being used by other process", возникающая при удалении.
      б) Кажется, что сервер производит реальные файловые операции в отдельном,
         медленном триде. В результате, если Вы залили или прервали заливку
         файла, то не сможете получить к нему доступ пока сервер полностью не
         освободит его.
         К примеру, если Вы заливаете файл и прервали закачку, то потом
         несколько секунд не сможете его удалить.

8. FAQ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1  Q: Нельзя прервать плагин при операции "Определяю адрес"
    A: Возможность корректного прерывания этой операции пока не
       реализована. В предыдущих версиях использовался некорректный способ
       прерывания, поэтому он был убран.

 2  Q: При копировании каталогов плагин не показывает диалог процесса
       копирования
    A: Плагин использует диалог процесса копирования, чтобы отобразить
       процесс копирования данных ФАЙЛОВ, поэтому если Вы копируете ПУСТУЮ
       структуру каталогов, процесс копирования не отображается.

 3  Q: При копировании файлов плагин не показывает диалог процесса
       копирования
    A: Для того, чтобы уменьшить использование медленных функций вывода на
       экран, плагин рисует диалог процесса копирования не чаще установленного
       внутреннего кванта времени.
       В данный момент квант времени установлен в плагине в 0.4 секунды.
       Т.е. плагин будет рисовать диалог не чаще чем (примерно) 3 раза в
       секунду.
       Поэтому, если полное время копирования отдельного файла оказывается
       меньше заданного периода обновления диалога копирования на экране, то
       плагин может нарисовать этот диалог для такого файла только один раз
       или не нарисовать вообще.

 4  Q: Захожу в каталог, в котором много файлов (несколько тысяч).
       Плагин показывает сообщение о заходе в каталог, долго чего-то ждёт
       и прерывает операцию по тайм-ауту, так и не дождавшись.
       ФАР в этот каталог заходит примерно за 5 секунд.
       Чего ждёт плагин, у меня же 100Мбита ?!
    A: Во-первых, не все FTP сервера оптимизированы для работы с большим
       количеством файлов. Если ФАР заходит в каталог 5 секунд, то другим
       программам на это может потребоваться на порядок больше времени.
       Во-вторых, некоторые сервера (WarFTP, к примеру) отдают список файлов
       не по одному, по мере считывания, а только после того, как прочитают
       его целиком.
       Если бы плагин получал какие-то данные, то счётчик ожидания данных бы
       сбрасывался. Но данные не посылаются до тех пор, пока сервер не
       прочитает содержимое всего каталога. Т.е. всё время, которое тратит
       сервер на формирование списка, воспринимается плагином как один
       длительный перебой в связи.
       Если вы работаете в достаточно скоростной локальной сети и у Вас
       задан маленький период ожидания, то эту проблему можно решить только
       увеличив значение этого периода так, чтобы плагину хватало времени
       дождаться когда сервер сформирует и пошлёт список файлов для такого
       каталога.

 5  Q: Вижу каталог а зайти в него не могу. Все права точно стоят правильно.
       У меня на сервере стоит FTP сервер Windows (IIS).
    A: Если у Вас каталог называется русскими буквами в виндовой кодировке,
       то выхода я не знаю.
       Плагин передаёт имя ИМЕННО в той кодировке, в которой имя было
       получено, и которая нужна при передаче, но IIS её не понимает.
       Вот типичный пример:
         ->CWD Игры разума
         <-550 Иг азма: Не удаётся найти указанный файл.

 6  Q: Есть у нас два Sun-овских сервера. Почему плагин _значительно_
       медленнее качает файлы с одного из серверов чем простейший клиент
       с другого Sun-а ?
       Все машины стоят в одной сети с аналогичными сетевыми возможностями.
    A: А Вы, чтобы сравнить, смогли запустить плагин на Sun-е ?...
       Нельзя сравнивать работу TCP/IP стека разных операционных систем.
       Любые две ОДИНАКОВЫЕ системы всегда будут работать не так, как две
       РАЗЛИЧНЫЕ. Не хуже или лучше - по разному.
       Наивно сравнивать такие настолько интегральные характеристики, как
       скорость передачи файлов в столь различных условиях и, в результате,
       делать выводы о виновности плагина.
       Сравнивать можно только в сходных условиях.
       Вот если вы найдёте ВИНДОВОГО клиента, который будет _значительно_
       быстрее, милости просим с багрепортом.

 7  Q: Как в FTP клиенте получить список файлов начинающихся на ".",
       к примеру ".bash_profile" ?
    A: Использовать расширенную команду листинга.
       Общепринятая команда для этого: "LIST -la"

 8  Q: При смене каталога на "directory", в который нет доступа наблюдаем:
         | -> CWD directory
         | <- 550 directory: No such file or directory
         | -> CWD directory/
         | <- 550 directory/: No such file or directory
         | -> CWD /directory/
         | <- 550 /directory/: No such file or directory
       что это за чушь и зачем так много?
    A: Короткий ответ:
        Некоторые сервера не понимают относительные пути при смене каталога, а
        некоторые, наоборот, не понимают абсолютные.
        Чтобы так или иначе сменить каталог плагин пытается попробовать все
        возможные способы указать какой именно каталог ему нужен.

       Развёрнутый ответ:
        Вспоминаем, что сервер, к которому вы обращаетесь может быть запущен
        на различных операционных системах и сам софт, тоже, может иметь
        собственное представление о текущем каталоге.
        Поэтому когда плагин посылает команду сменить каталог на "directory"
        сервер может считать что: это подкаталог в текущем каталоге, это
        абсолютный путь, и т.д. (вариантов несколько).
        Поэтому, если плагин получил "невозможно" пытаясь сменить каталог одним
        из способов он пытается сменить его другим и т.д. пока не кончатся
        способы указания каталогов.
        Окончательной ошибкой считается, если ни один из способов не завершился
        успешно.

 9  Q: При смене каталога на несуществующий "directory":
         | -> CWD directory
         | <- 550 directory: No such file or directory
       но плагин указывает как ошибку "Access denied", хотя логичнее было бы
       "Директория или файл не найдены"?
    A: А что плагин должен писать, если вы зашли на фтп, который располагается
       на, к примеру, китайской локализации операционной системы?... :)
       Если серьёзно, текст, который сопровождает код результата произвольный и
       определяется сервером. Нет никакого стандарта на то что там будет
       написано и будет ли написано вообще.
       Зато есть стандарт на значение кодов результата операции.
       Код "550" обозначает именно "Access denied" и его и показывает плагин.

 10 Q: Плагин неправильно работает с файлами и каталогами, которые
       начинаются или оканчиваются пробелом.
    A: Есть следующие соображения на эту тему:
       1. Не все сервера отдают реальное число пробелов. Особенно это
          касается пробелов в конце имени.
       2. Если сервер отдаёт имя правильно (т.е. так как оно реально и
          представлено), то плагин работает _именно_ с ним. Так что если у вас
          проблемы с именами начинающимися или оканчивающимися пробелом, то это
          значит что сервер неправильно передал листинг файлов или не понимает
          команд с пробелами.
          Проверить содержимое листинга можно используя меню утилит,
          пункт "Directory listing".
       3. Команды манипулирования файлами текстовые. В стандарте не
          предусмотрено квотирование, т.е. заключение имени в кавычки для
          указания точных границ имени, поэтому практически ни один FTP сервер
          не умеет понимать имена файлов/каталогов, которые начинаются или
          заканчиваются пробелами. Во всяком случае я не знаю ни одного
          сервера, который бы понимал пробелы вначале файла.
          Если Ваш сервер имеет некие расширения, которые позволяют
          использовать кавычки или какой-то другой способ указания границ
          имени, то вы можете посылать нужные команды серверу вручную из
          командной строки.
