Drop stream state after stream error

Fixes SMACK-696.
This commit is contained in:
Florian Schmaus 2015-08-26 18:47:05 +02:00
parent b1e4884fbb
commit 8aa3f94c90
1 changed files with 21 additions and 1 deletions

View File

@ -16,6 +16,7 @@
*/
package org.jivesoftware.smack.tcp;
import org.jivesoftware.smack.AbstractConnectionListener;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
@ -295,6 +296,14 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
public XMPPTCPConnection(XMPPTCPConnectionConfiguration config) {
super(config);
this.config = config;
addConnectionListener(new AbstractConnectionListener() {
@Override
public void connectionClosedOnError(Exception e) {
if (e instanceof XMPPException.StreamErrorException) {
dropSmState();
}
}
});
}
/**
@ -402,7 +411,7 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
// connection instance though). This is used in writePackets to decide if stanzas should
// be added to the unacknowledged stanzas queue, because they have to be added right
// after the 'enable' stream element has been sent.
unacknowledgedStanzas = null;
dropSmState();
}
if (isSmAvailable() && useSm) {
// Remove what is maybe left from previously stream managed sessions
@ -1707,6 +1716,17 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
}
}
/**
* Drop the stream management state. Sets {@link #smSessionId} and
* {@link #unacknowledgedStanzas} to <code>null</code>.
*/
private void dropSmState() {
// clientHandledCount and serverHandledCount will be reset on <enable/> and <enabled/>
// respective. No need to reset them here.
smSessionId = null;
unacknowledgedStanzas = null;
}
/**
* Get the maximum resumption time in seconds after which a managed stream can be resumed.
* <p>