Konfigurieren Sie die Verbindung, die tatsächlich den XMPP-Stream trägt. Das Setzen eines Proxys auf einer unabhängigen URLConnection leitet Smacks TCP-Verbindung nicht zum Messaging-Dienst um.

Smack 4.4 bietet ProxyInfo-Fabriken für HTTP, SOCKS4 und SOCKS5. Hängen Sie das resultierende Objekt an den XMPP-Verbindungs-Builder an:

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();

Dies ist ein Konfigurationsfragment für ein bestehendes Smack 4.4-Setup. Die umgebende Anwendung behandelt die geprüften Ausnahmen des Builders und liefert die Proxy-Zugangsdaten. Der explizite Host und Port stehen für den tatsächlichen TCP-Endpunkt des XMPP-Dienstes.

Es gibt drei Namen mit unterschiedlichen Rollen:

  • proxy.example.net ist der Vermittler, der die anfängliche Verbindung entgegennimmt.
  • xmpp-node.example.net ist der Server-Endpunkt, den der Proxy erreichen soll.
  • chat.example.net ist die XMPP-Dienstdomäne, etwa die Domäne nach @ in der JID eines Kontos.

Ein Dienst kann für die letzten beiden denselben Namen verwenden, aber ein Proxy-Hostname ersetzt keinen von beiden. Bewahren Sie die beabsichtigte Identität des XMPP-Dienstes in der Verbindung und ihrer TLS-Validierung.

Verwenden Sie für einen HTTP-Proxy ProxyInfo.forHttpProxy mit dem passenden Proxy-Port und den passenden Zugangsdaten. Dieser Weg erfordert einen Proxy, der die XMPP-Verbindung tunneln und ihren Zielport zulassen kann. Ein Proxy, der HTTPS-Webbrowsing verarbeitet, erlaubt nicht automatisch TCP-Verbindungen zu einem XMPP-Dienst auf 5222.

Der erforderliche Sicherheitsmodus im Fragment macht TLS zur Bedingung der XMPP-Verbindung. Er führt keine Proxy-Authentifizierung durch, und die Proxy-Zugangsdaten melden sich nicht an einem XMPP-Konto an. Konfigurieren Sie das XMPP-Konto nach dem Aufbau der Route und der sicheren Sitzung über den normalen Authentifizierungsablauf von Smack.

Halten Sie Beispiele innerhalb ihrer API-Generation. Die älteren konstruktorbasierten ConnectionConfiguration-Beispiele drücken dasselbe Routing-Konzept aus, aber der Builder von Smack 4.4 ist die hier verwendete Schnittstelle. Es ist nicht nötig, die Hostnamen eines veralteten Messaging-Anbieters nachzubilden, um dieses Konzept auf einen aktuellen XMPP-Dienst anzuwenden.

Ähnliche Artikel