It happened again. There were multiple connection attempts, with the funniest of excuses for why they couldn’t be connected.
It started with a SSLException: Read error: ssl=0x7b11645680: I/O error during system call, Software caused connection abort
caused by bad connectivity.
Then it failed to connect at all:
Caused by: org.jivesoftware.smack.SmackException$ConnectionException: The following addresses failed: 'xmpp.yaxim.org:5222' failed because: /212.21.75.16 exception: java.net.ConnectException: failed to connect to /212.21.75.16 (port 5222) from /:: (port 0) after 30000ms: connect failed: ENETUNREACH (Network is unreachable), xmpp.yaxim.org/2a01:30:2000:100::16 exception: java.net.ConnectException: failed to connect to xmpp.yaxim.org/2a01:30:2000:100::16 (port 5222) from /:: (port 0) after 30000ms: connect failed: ENETUNREACH (Network is unreachable)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPConnection.java:661)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:936)
at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:411)
at org.yaxim.androidclient.service.SmackableImp.connectAndLogin(SmackableImp.java:718)
... 2 more
On the next attempt after network became “available” again, it ran into the 30s TLS handshake timeout:
01-30 08:16:09.548 D/SMACK (21303): SENT (0): <stream:stream xmlns='jabber:client' to='yax.im' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
01-30 08:16:11.190 D/SMACK (21303): RECV (0): <?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xml:lang='en' from='yax.im' id='726d44e9-59fa-40a5-a034-ef76842a10cf' version='1.0' xmlns='jabber:client'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'><required/></starttls></stream:features>
01-30 08:16:11.192 D/SMACK (21303): SENT (0): <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'></starttls>
01-30 08:16:12.172 D/SMACK (21303): RECV (0): <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
01-30 08:16:39.538 E/yaxim.SmackableImp(21303): onDisconnected: org.yaxim.androidclient.exceptions.YaximXMPPException: connectAndLogin failed
01-30 08:16:39.539 W/System.err(21303): org.yaxim.androidclient.exceptions.YaximXMPPException: connectAndLogin failed
01-30 08:16:39.540 W/System.err(21303): at org.yaxim.androidclient.service.SmackableImp.connectAndLogin(SmackableImp.java:730)
01-30 08:16:39.540 W/System.err(21303): at org.yaxim.androidclient.service.SmackableImp.doConnect(SmackableImp.java:303)
01-30 08:16:39.540 W/System.err(21303): at org.yaxim.androidclient.service.SmackableImp$5.run(SmackableImp.java:388)
01-30 08:16:39.541 W/System.err(21303): Caused by: org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 30000ms (~30s). While waiting for establishing TLS
01-30 08:16:39.541 W/System.err(21303): at org.jivesoftware.smack.SynchronizationPoint.checkForResponse(SynchronizationPoint.java:272)
01-30 08:16:39.541 W/System.err(21303): at org.jivesoftware.smack.SynchronizationPoint.checkIfSuccessOrWait(SynchronizationPoint.java:157)
01-30 08:16:39.542 W/System.err(21303): at org.jivesoftware.smack.SynchronizationPoint.checkIfSuccessOrWaitOrThrow(SynchronizationPoint.java:128)
01-30 08:16:39.542 W/System.err(21303): at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:942)
01-30 08:16:39.542 W/System.err(21303): at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:411)
01-30 08:16:39.542 W/System.err(21303): at org.yaxim.androidclient.service.SmackableImp.connectAndLogin(SmackableImp.java:718)
01-30 08:16:39.542 W/System.err(21303): ... 2 more
After a 5s delay, yaxim reconnected again and sent two streams after TLS, immediately crashing with a String NPE (unfortunately, my logger doesn’t write thread PIDs to disk, but I’m pretty sure we have two threads sending things here):
01-30 08:16:49.691 D/SMACK (21303): SENT (0): <stream:stream xmlns='jabber:client' to='yax.im' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
01-30 08:16:52.364 D/SMACK (21303): RECV (0): <?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xml:lang='en' from='yax.im' id='27ac7399-17ec-4ef2-83f7-fa9e6c0c3102' version='1.0' xmlns='jabber:client'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'><required/></starttls></stream:features>
01-30 08:16:52.367 D/SMACK (21303): SENT (0): <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'></starttls>
01-30 08:16:54.911 D/SMACK (21303): RECV (0): <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
[TLS cert snipped]
01-30 08:17:00.974 D/SMACK (21303): SENT (0): <stream:stream xmlns='jabber:client' to='yax.im' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
01-30 08:17:01.511 D/SMACK (21303): SENT (0): <stream:stream xmlns='jabber:client' to='yax.im' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
01-30 08:17:19.690 E/yaxim.SmackableImp(21303): onDisconnected: org.yaxim.androidclient.exceptions.YaximXMPPException: connectAndLogin failed
01-30 08:17:19.690 W/System.err(21303): org.yaxim.androidclient.exceptions.YaximXMPPException: connectAndLogin failed
01-30 08:17:19.691 W/System.err(21303): at org.yaxim.androidclient.service.SmackableImp.connectAndLogin(SmackableImp.java:730)
01-30 08:17:19.691 W/System.err(21303): at org.yaxim.androidclient.service.SmackableImp.doConnect(SmackableImp.java:303)
01-30 08:17:19.691 W/System.err(21303): at org.yaxim.androidclient.service.SmackableImp$5.run(SmackableImp.java:388)
01-30 08:17:19.693 W/System.err(21303): Caused by: org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 30000ms (~30s). While waiting for establishing TLS
01-30 08:17:19.693 W/System.err(21303): at org.jivesoftware.smack.SynchronizationPoint.checkForResponse(SynchronizationPoint.java:272)
01-30 08:17:19.693 W/System.err(21303): at org.jivesoftware.smack.SynchronizationPoint.checkIfSuccessOrWait(SynchronizationPoint.java:157)
01-30 08:17:19.693 W/System.err(21303): at org.jivesoftware.smack.SynchronizationPoint.checkIfSuccessOrWaitOrThrow(SynchronizationPoint.java:128)
The String NPE is from XMPPTCPConnection trying to process the XML tag name:
final String name = parser.getName();
switch (name) {
After that, it’s not possible any more to connect this instance of XMPPTCPConnection, it will always send XML mix garbage:
01-30 08:33:10.759 D/SMACK (21303): SENT (0):
<iq id='4JLnJ-114289' type='get'><query xmlns='jabber:iq:roster'></query></iq>
01-30 08:33:10.759 D/SMACK (21303): SENT (0):
<<r xmlns='urn:xmpp:sm:3'/>
01-30 08:33:10.760 D/SMACK (21303): SENT (0):
iq to='yax.im' id='4JLnJ-114290' type='get'><query xmlns='http://jabber.org/protocol/disco#items'></query></iq>
01-30 08:33:59.205 D/SMACK (21303): SENT (0):
<iq to='yax.im' id='4JLnJ-114295' type='get'><query xmlns='http://jabber.org/protocol/disco#items'></query></iq>
<stream:stream xmlns='jabber:client' to='yax.im' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>