ProxyInfo を使った Smack 4.4 の XMPP プロキシ設定
ProxyInfo を XMPP 接続ビルダーに接続し、プロキシ、サービスドメイン、サーバーホストを個別に設定します。
実際に XMPP ストリームを運ぶ接続を構成します。無関係な URLConnection にプロキシを設定しても、Smack の TCP 接続はメッセージングサービスへリダイレクトされません。
Smack 4.4 は HTTP、SOCKS4、SOCKS5 用の ProxyInfo ファクトリを提供します。得られたオブジェクトを 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 環境向けの構成断片です。周囲のアプリケーションがビルダーの検査例外を処理し、プロキシの認証情報を供給します。明示的なホストとポートは、XMPP サービスの実際の TCP エンドポイントを表します。
役割の異なる 3 つの名前があります:
proxy.example.netは最初の接続を受け取る仲介者です。xmpp-node.example.netはプロキシが到達を求められるサーバーエンドポイントです。chat.example.netは XMPP サービスドメインで、アカウントの JID における@より後のドメインなどです。
サービスは後者 2 つに同じ名前を使えますが、プロキシのホスト名がどちらかを置き換えることはありません。接続とその TLS 検証において、意図した XMPP サービスの識別情報を保ってください。
HTTP プロキシの場合は、適切なプロキシポートと認証情報を指定して ProxyInfo.forHttpProxy を使います。この経路には、XMPP 接続をトンネルし、その宛先ポートを許可するプロキシが必要です。HTTPS の Web 閲覧を扱うプロキシが、5222 の XMPP サービスへの TCP 接続を自動的に許可するわけではありません。
断片の必須セキュリティモードは、TLS を XMPP 接続の条件にします。これはプロキシ認証を行うものではなく、プロキシの認証情報は XMPP アカウントにログインしません。経路と安全なセッションを確立した後、Smack の通常の認証フローで XMPP アカウントを構成してください。
例はそれぞれの API 世代の範囲内に保ちます。旧来のコンストラクタベースの ConnectionConfiguration の例も同じルーティングの考え方を表していますが、ここで使うのは Smack 4.4 のビルダーというインターフェースです。その考え方を現在の XMPP サービスに適用するために、廃れたメッセージングプロバイダーのホスト名を再現する必要はありません。