diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/keepalive/KeepAliveManager.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/keepalive/KeepAliveManager.java index 3ebe8f7ef..5f99a18c0 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/keepalive/KeepAliveManager.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/keepalive/KeepAliveManager.java @@ -112,6 +112,7 @@ public void registrationStateChanged(RegistrationStateChangeEvent evt) } keepAliveSendTask = new KeepAliveSendTask(); + waitingForPacketWithID = null; keepAliveCheckInterval = SmackConfiguration.getKeepAliveInterval(); @@ -129,6 +130,8 @@ else if(evt.getNewState() == RegistrationState.UNREGISTERED || evt.getNewState() == RegistrationState.CONNECTION_FAILED || evt.getNewState() == RegistrationState.AUTHENTICATION_FAILED) { + waitingForPacketWithID = null; + if(parentProvider.getConnection() != null) parentProvider.getConnection().removePacketListener(this); @@ -216,19 +219,26 @@ public void run() return; } - // lets send a ping - KeepAliveEvent ping = new KeepAliveEvent( - parentProvider.getOurJID(), - parentProvider.getAccountID().getService() - ); - - waitingForPacketWithID = ping.getPacketID(); - - if (logger.isTraceEnabled()) - logger.trace("send keepalive for acc: " - + parentProvider.getAccountID().getDisplayName()); - - parentProvider.getConnection().sendPacket(ping); + try + { + // lets send a ping + KeepAliveEvent ping = new KeepAliveEvent( + parentProvider.getOurJID(), + parentProvider.getAccountID().getService() + ); + + if (logger.isTraceEnabled()) + logger.trace("send keepalive for acc: " + + parentProvider.getAccountID().getDisplayName()); + + waitingForPacketWithID = ping.getPacketID(); + parentProvider.getConnection().sendPacket(ping); + } + catch(Throwable t) + { + logger.error("Error sending ping request!", t); + waitingForPacketWithID = null; + } } } }