Налаштуйте з'єднання, яке справді передає потік 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.

Схожі статті