실제로 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 엔드포인트를 나타냅니다.

역할이 다른 세 가지 이름이 있습니다:

  • proxy.example.net 는 초기 연결을 받는 중개자입니다.
  • xmpp-node.example.net 는 프록시가 도달하도록 요청받는 서버 엔드포인트입니다.
  • chat.example.net 는 XMPP 서비스 도메인이며, 예를 들어 계정 JID에서 @ 뒤의 도메인입니다.

서비스는 마지막 두 개에 같은 이름을 사용할 수 있지만, 프록시 호스트 이름이 둘 중 어느 것도 대체하지는 않습니다. 연결과 그 TLS 검증에서 의도한 XMPP 서비스 ID를 유지하세요.

HTTP 프록시의 경우 적절한 프록시 포트와 자격 증명으로 ProxyInfo.forHttpProxy 을 사용합니다. 이 경로에는 XMPP 연결을 터널링하고 대상 포트를 허용할 수 있는 프록시가 필요합니다. HTTPS 웹 브라우징을 처리하는 프록시가 5222의 XMPP 서비스로 가는 TCP 연결을 자동으로 허용하지는 않습니다.

조각의 필수 보안 모드는 TLS를 XMPP 연결의 조건으로 만듭니다. 프록시 인증을 수행하지 않으며 프록시 자격 증명으로 XMPP 계정에 로그인하지 않습니다. 경로와 보안 세션을 설정한 후 Smack의 일반 인증 흐름으로 XMPP 계정을 구성하세요.

예제는 각자의 API 세대 안에 두세요. 이전 생성자 기반 ConnectionConfiguration 예제도 같은 라우팅 개념을 표현하지만, 여기서 사용하는 인터페이스는 Smack 4.4의 빌더입니다. 그 개념을 현재 XMPP 서비스에 적용하기 위해 사용되지 않는 메시징 공급자의 호스트 이름을 재현할 필요는 없습니다.

관련 글