User:RMN/File transfer

From Miranda NG
Jump to: navigation, search

Todo [en]: This article should be translated from Russian into English for Jabber/en/File transfer. Any help will be appreciated.


Theory

There are 4 methods for file transfers over the Jabber network.

In-Band Bytestreams (IBB)

File is being sent in XML stream, just like ordinary messages are. The parts of the file are marked with a special flag for the receiver's client to distinguish them from text messages (see XEPs 47 + 95/96). Plugin FileAsMessage works according to this principle too.

Benefits
  • It is the simplest and most reliable variant. It works in 99% of cases (on condition that both the sender's and the receiver's clients support this type of file transfers).
Drawbacks
  • Traffic is increased (by 33% in average), since IBB implies transferring of base64-encoded binary data as a text
  • It is the slowest.
  • While sending a file the sender experiences problems with messaging the contact to whom the file is being sent.

Over proxy

Файл передаётся через прокси jabber-сервера. Это — не обычный socks-прокси, а специально заточенный для передачи файлов джаббер-сервис! Этот способ подойдёт, если нет возможности прямого соединения с контактом (the sender is behind непрозрачным NAT, прокси) и у передающего правильно указан адрес данного сервиса (который может быть как на сервере передающего, так и на других серверах). It works as follows: the sender connects to the server (over modified SOCKS5 protocol) and requests file transfer инициализацию. The server выделяет IP or session ID, после чего передающий отправляет этот адрес принимающему. The receiver connects to the server and передает ID. If the IDs coincide, file transfer is инициализируется (see XEPs 65 + 95/96).

Benefits
  • It is useful when the sender is behind непрозрачным NAT или прокси.
  • The speed of передачи данных is higher than that of IBB.
  • It is devoid of IBB drawbacks.
Drawbacks
  • Не все серверы поддерживают эту возможность (хотя иногда встречаются серверы с таким сервисом, открытым для незарегистрированных на этом сервере пользователей)
  • In most cases it is slower than DC.

Direct Connect (DC)

Direct connection is established between the sender and the receiver (see XEPs 65 + 95/96).

Benefits
  • It is the fastest and most reliable method for file transfers.
Drawbacks
  • It does not work when the sender is behind непрозрачный NAT или прокси.

Out of Band Data (OOB)

Упрощённо это можно представить так: клиент передающей стороны открывает у себя HTTP-сервер и даёт HTTP-ссылку другому клиенту, тот подключается и скачивает файл (see XEP 66). The benefits and drawbacks are the same as those of Direct Connect.


Practice

Screen 1

The following section contains usage hints for the above described methods of sending files and options for each of them.

Receiving files

Чтобы принимать файлы способом, отличным от IBB, необходимо снять галку Accept only in band incoming filetransfers in your Jabber account settings (Screen 1).

Sending files

Screen 2

In-Band Bytestreams (IBB)

IBB works always and everywhere. The only условие required is that the receiver's клиент must have this feature implemented, many clients don't respond to it. To use IBB you should uncheck all the three options in File Transfer settings of your Jabber account (Screen 2).

Screen 3

Over proxy

Узнать, имеет ли ваш сервер прокси для передачи файлов, и, если имеет, то узнать его адрес, можно следующим образом: зайти в Service Discovery jabber-аккаунта и найти сервис with "SOCKS5 Bytestreams" or "Proxy bytestreams" identity (usually it looks like proxy.servername.domain, i. e. proxy.jabber.ru for jabber.ru server). Check the corresponding option on File Transfer options page and enter your proxy server address (Screen 3).

Screen 4
Screen 5

Direct Connect (DC)

Для успешной установки прямого соединения необходимо одно из следующих условий:

  • Прямое соединение вашего компьютера с интернетом (прямой канал от провайдера с real ("white") IP address)
  • Если у вас прямой канал от провайдера с real ("white") IP address, но установлен роутер, то роутер должен быть:
    • a) или с поддержкой и активированным UPnP, а в настройках сети Миранды для jabber-протокола должна стоять галка Enable UPnP port mapping
    • b) или сконфигурирован для приёма на определённый диапазон адресов, совпадающий с настройками сети Миранды для jabber-протокола (Screen 4).

Если вы подключены к интернету через прозрачный NAT, то нужно в настройках jabber прописать ваш real ("white") IP address (Screen 5).

Если выставлены галки на передаче файлов и через DC, и через proxy, то передача файла пойдет через прокси.

Out of Band Data (OOB)

Необходимы те же условия, что и для DC. Miranda automatically tries this method, it needs no additional settings. But OOB is rarely used since it has low priority.


Information for advanced users

Выбор способа передачи файлов

Как происходит выбор способа передачи файлов:

  • Получаем капсы от клиента.
  • Если умеет SI/FT (XEP 95/96), то отправляем список транспортов, через которые мы можем отправить файл. По умолчанию в списке всегда присутствует 47 XEP, если стоят галки директ-коннекта (BsDirect) или прокси (BsProxyManual), то еще дополнительно добавляем в список 65 XEP.
  • Клиент принимает этот список, решает какой транспорт для передачи файла выбрать. Если стоит галка IBB only, то выбирает 47 XEP, если галка не стоит, то выбирает 65 XEP.
  • После выбора получателем 47 XEP'а отправитель высылает файл, при выборе 65 XEP'а отправитель высылает список из одного IP-адреса (только direct-connect) или двух IP-адресов (direct-connect и proxy)
  • Получатель к этим IP коннектится (проверяет, куда удалось) и отправляет выбранный IP отправителю, отправитель передаёт файл.
  • Если же клиент не умеет SI/FT, то проверяем умеет ли OOB (XEP 66), если умеет OOB, то отправляем ссылку и через HTTP у нас забирают файл.
  • Если же не умеет ни SI/FT, ни OOB, то выдается ошибка передачи файла.

Priorities

(On condition that all the 3 items on File Transfers options page are checked and set up properly – the topmost has the higher priority):

  • IBB (if the receiver's client supports IBB only)
  • Proxy
  • DC
  • OOB
  • IBB (только если в настройках Jabber не выставлено ни одной из трех галок в секции File Transfers)

Proxy has priority over DC for privacy purposes.

Others

Both Proxy and DC are described in XEP 65. Протоколы там очень похожие, разница только в том, что в первом случае идет коннект до прокси, а во втором — до отправителя.

SI/FT (XEPs 95/96) в теории могут быть реализованы друг без друга, но по сути они идут вместе и существует проверка на их наличие в коде.

Miranda can receive IBB data sent using both message and iq stanzas, but uses only message stanza to send it.

Проблемы при передаче файлов через IBB обусловлены тем, что все данные отправляются в цикле в общем потоке, но на сервере есть лимит на количество kB/s от клиента. И, так как нет возможности проверить, принялись ли уже данные от клиента, банально забивается очередь. Все сообщения приходят и уходят, но из-за очереди и лимитов это происходит уже после появления окошка о таймауте.