Наладзьце злучэнне, якое сапраўды перадае паток 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.

Падобныя артыкулы