diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/ping/PingManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/ping/PingManager.java index 76e89369a..89d4b5bb3 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/ping/PingManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/ping/PingManager.java @@ -447,6 +447,19 @@ public final class PingManager extends Manager { pingFuture.onError(new ExceptionCallback() { @Override public void processException(Exception exception) { + long lastStanzaReceived = connection.getLastStanzaReceived(); + if (lastStanzaReceived > 0) { + long now = System.currentTimeMillis(); + // Delta since the last stanza was received + int deltaInSeconds = (int) ((now - lastStanzaReceived) / 1000); + // If the delta is smaller then the ping interval, we have got an valid stanza in time + // So not error notification needed + if (deltaInSeconds < pingInterval) { + maybeSchedulePingServerTask(deltaInSeconds); + return; + } + } + for (PingFailedListener l : pingFailedListeners) { l.pingFailed(); }