2016-07-03 30 views
8

Ho un'applicazione Java che implementa Smack 4.1.7 che sto usando come client fittizio per Openfire 4.0.2. Al momento, Openfire è in esecuzione sul mio localhost. Smack può fare il login e l'autenticazione correttamente con questo collegamento:Errore di routing tra Smack e Openfire su localhost

XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder() 
     .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 
     .setServiceName(XMPP_HOST_NAME) // equals xmppDomain on server 
     .setUsernameAndPassword("user1", "pwd1") 
     .setResource("tester") 
     .setDebuggerEnabled(true) 
     .build(); 

Ora, quando Smack tenta di creare o partecipare a un MUC, i tempi di richiesta out (SmackException $ NoResponseException) e openfire registra i seguenti:

2016.07.03 18:58:54 org.jivesoftware.openfire.spi.RoutingTableImpl - 
Unable to route packet. Packet should only be sent to available sessions and the 
route is not available. 
<presence id="WrkXH-6" from="[email protected]/tester" to="[email protected]/tester"> 
    <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="NfJ3flI83zSdUDzCEICtbypursw="/> 
</presence> 
2016.07.03 18:58:54 org.jivesoftware.openfire.spi.RoutingTableImpl - 
Failed to route packet to JID: [email protected]/tester packet: 
<presence id="WrkXH-6" from="[email protected]/tester" to="[email protected]/tester"> 
    <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="NfJ3flI83zSdUDzCEICtbypursw="/> 
</presence> 

Ho usato "localhost", "127.0.0.1" e il nome della mia macchina come XMPP_HOST_NAME sia sul lato server che sul lato client, e continuo a ricevere lo stesso errore. Qualsiasi aiuto sarebbe apprezzato.

+0

mi dispiace, hai effettuato il login con l'utente? localhost non funzionerà, il nome della macchina (ma devi controllare il nome del server openfire nel pannello di controllo) funzionerà. Per me la presenza da e per la stessa persona sembra strana ma devo controllare – MrPk

+0

sì, il login funziona bene. Funziona sia con localhost, 127.0.0.1 sia con il nome della macchina (indipendentemente da cosa sia configurato sul lato openfire btw). C'è un avviso sul lato Smack quando si stabilisce la connessione: org.jivesoftware.smack.util.DNSUtil resolveDomain AVVISO: Eccezione durante il ripristino dei record SRV per localhost. Prendi in considerazione l'aggiunta di '_xmpp- (server | client) ._ tcp' DNS SRV Records, ma appart da quella connessione e l'autenticazione è ok. – guik

+0

Forse hai un proxy e devi aggiungere localhost (sì, 127.0.0.1) come eccezione ... – MrPk

risposta

0

Ho trovato il problema e un bug. Come gestire:

Openfire ha 2 valori:

http.connection.timeout 
http.socket.timeout 

entrambi settati con un valore predefinito di 2000/3000/5000 millisecs se non disponibile in proprietà.

Quindi è necessario impostare questi valori da console di amministrazione (o database) a uno superiore, come 15000/20000 o più se necessario.

Più, in Openfire 4.0.2 (AD probabilmente le vecchie versioni troppo) in index.jsp c'è una chiamata per verificare RSSfeed (attivata per impostazione predefinita), ma questa chiamata sarà ripristinare quei valori a 3000, in modo da in pratica i timeout saranno inutili.

Per disabilitare set RSS feed per falso

rss.enabled 

e riavviare Openfire.