Настройки прокси XMPP в Smack 4.4 с ProxyInfo
Прикрепите ProxyInfo к конструктору подключения XMPP с отдельными настройками прокси, домена службы и хоста сервера.
Настройте соединение, которое действительно передаёт поток XMPP. Установка прокси на несвязанном URLConnection не перенаправляет TCP-соединение Smack к службе обмена сообщениями.
Smack 4.4 предоставляет фабрики ProxyInfo для HTTP, SOCKS4 и SOCKS5. Прикрепите полученный объект к конструктору подключения XMPP:
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.proxy.ProxyInfo;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
ProxyInfo proxy = ProxyInfo.forSocks5Proxy(
"proxy.example.net", 1080, proxyUser, proxyPassword
);
XMPPTCPConnectionConfiguration config =
XMPPTCPConnectionConfiguration.builder()
.setXmppDomain("chat.example.net")
.setHost("xmpp-node.example.net")
.setPort(5222)
.setProxyInfo(proxy)
.setSecurityMode(
ConnectionConfiguration.SecurityMode.required
)
.build();Это фрагмент конфигурации для существующей установки Smack 4.4. Окружающее приложение обрабатывает проверяемые исключения конструктора и передаёт учётные данные прокси. Явно заданные хост и порт обозначают фактическую конечную точку TCP службы XMPP.
Есть три имени с разными ролями:
proxy.example.net— посредник, который принимает начальное соединение.xmpp-node.example.net— конечная точка сервера, до которой прокси должен добраться.chat.example.net— домен службы XMPP, например домен после@в JID учётной записи.
Служба может использовать одно и то же имя для двух последних, но имя хоста прокси не заменяет ни одного из них. Сохраняйте предполагаемую идентичность службы XMPP в соединении и его проверке TLS.
Для прокси HTTP используйте ProxyInfo.forHttpProxy с соответствующим портом прокси и учётными данными. Этот путь требует прокси, способного туннелировать соединение XMPP и разрешать его порт назначения. Прокси, обслуживающий веб-просмотр по HTTPS, не разрешает автоматически TCP-соединения к службе XMPP на порту 5222.
Обязательный режим безопасности во фрагменте делает TLS условием соединения XMPP. Он не выполняет аутентификацию прокси, и учётные данные прокси не выполняют вход в учётную запись XMPP. Настройте учётную запись XMPP через обычный поток аутентификации Smack после установления маршрута и защищённого сеанса.
Держите примеры в пределах их поколения API. Более старые примеры ConnectionConfiguration на основе конструктора выражают ту же концепцию маршрутизации, но интерфейсом, используемым здесь, является конструктор Smack 4.4. Нет необходимости воспроизводить имена хостов устаревшего поставщика сообщений, чтобы применить эту концепцию к текущей службе XMPP.