Configure a conexão que realmente transporta o fluxo XMPP. Definir um proxy em um URLConnection não relacionado não redireciona a conexão TCP do Smack para o serviço de mensagens.

O Smack 4.4 fornece fábricas ProxyInfo para HTTP, SOCKS4 e SOCKS5. Anexe o objeto resultante ao construtor de conexão 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();

Este é um fragmento de configuração para uma instalação existente do Smack 4.4. A aplicação envolvente trata das exceções verificadas do construtor e fornece as credenciais do proxy. O host e a porta explícitos representam o endpoint TCP real do serviço XMPP.

Há três nomes com funções diferentes:

  • proxy.example.net é o intermediário que recebe a conexão inicial.
  • xmpp-node.example.net é o endpoint do servidor que o proxy deve alcançar.
  • chat.example.net é o domínio do serviço XMPP, como o domínio após @ no JID de uma conta.

Um serviço pode usar o mesmo nome para os dois últimos, mas um nome de host de proxy não substitui nenhum deles. Preserve a identidade pretendida do serviço XMPP na conexão e na sua validação TLS.

Para um proxy HTTP, use ProxyInfo.forHttpProxy com a porta de proxy e as credenciais adequadas. Esse caminho exige um proxy capaz de tunelar a conexão XMPP e permitir sua porta de destino. Um proxy que trata navegação web HTTPS não permite automaticamente conexões TCP a um serviço XMPP na 5222.

O modo de segurança obrigatório no fragmento torna o TLS uma condição da conexão XMPP. Ele não realiza autenticação de proxy, e as credenciais do proxy não entram em uma conta XMPP. Configure a conta XMPP pelo fluxo de autenticação normal do Smack depois de estabelecer a rota e a sessão segura.

Mantenha os exemplos dentro de sua geração de API. Os exemplos mais antigos de ConnectionConfiguration baseados em construtor expressam o mesmo conceito de roteamento, mas o construtor do Smack 4.4 é a interface usada aqui. Não é preciso reproduzir nomes de host de um provedor de mensagens obsoleto para aplicar esse conceito a um serviço XMPP atual.

Artigos relacionados