|
|
|
|
@ -89,7 +89,7 @@ public class OperationSetBasicInstantMessagingJabberImpl
|
|
|
|
|
provider.addRegistrationStateChangeListener(new RegistrationStateListener());
|
|
|
|
|
|
|
|
|
|
// register the KeepAlive Extension in the smack library
|
|
|
|
|
ProviderManager.addExtensionProvider(KeepAliveEventProvider.ELEMENT_NAME,
|
|
|
|
|
ProviderManager.addIQProvider(KeepAliveEventProvider.ELEMENT_NAME,
|
|
|
|
|
KeepAliveEventProvider.NAMESPACE,
|
|
|
|
|
new KeepAliveEventProvider());
|
|
|
|
|
}
|
|
|
|
|
@ -274,6 +274,11 @@ public void registrationStateChanged(RegistrationStateChangeEvent evt)
|
|
|
|
|
// run keepalive thread
|
|
|
|
|
if(keepAliveSendTask == null && keepAliveEnabled)
|
|
|
|
|
{
|
|
|
|
|
jabberProvider.getConnection().addPacketListener(
|
|
|
|
|
new KeepalivePacketListener(),
|
|
|
|
|
new PacketTypeFilter(
|
|
|
|
|
KeepAliveEvent.class));
|
|
|
|
|
|
|
|
|
|
keepAliveSendTask = new KeepAliveSendTask();
|
|
|
|
|
|
|
|
|
|
keepAliveTimer.scheduleAtFixedRate(
|
|
|
|
|
@ -340,17 +345,6 @@ public void processPacket(Packet packet)
|
|
|
|
|
+ msg.toXML());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
KeepAliveEvent keepAliveEvent =
|
|
|
|
|
(KeepAliveEvent)packet.getExtension(
|
|
|
|
|
KeepAliveEventProvider.ELEMENT_NAME,
|
|
|
|
|
KeepAliveEventProvider.NAMESPACE);
|
|
|
|
|
if(keepAliveEvent != null)
|
|
|
|
|
{
|
|
|
|
|
keepAliveEvent.setFromUserID(fromUserID);
|
|
|
|
|
receivedKeepAlivePackets.addLast(keepAliveEvent);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Message newMessage = createMessage(msg.getBody());
|
|
|
|
|
|
|
|
|
|
Contact sourceContact =
|
|
|
|
|
@ -400,6 +394,31 @@ public void processPacket(Packet packet)
|
|
|
|
|
fireMessageEvent(msgReceivedEvt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Receives incoming KeepAlive Packets
|
|
|
|
|
*/
|
|
|
|
|
private class KeepalivePacketListener
|
|
|
|
|
implements PacketListener
|
|
|
|
|
{
|
|
|
|
|
public void processPacket(Packet packet)
|
|
|
|
|
{
|
|
|
|
|
if(packet != null && !(packet instanceof KeepAliveEvent))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
KeepAliveEvent keepAliveEvent = (KeepAliveEvent)packet;
|
|
|
|
|
|
|
|
|
|
if(logger.isDebugEnabled())
|
|
|
|
|
{
|
|
|
|
|
logger.debug("Received keepAliveEvent from "
|
|
|
|
|
+ keepAliveEvent.getFromUserID()
|
|
|
|
|
+ " the message : "
|
|
|
|
|
+ keepAliveEvent.toXML());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
receivedKeepAlivePackets.addLast(keepAliveEvent);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Task sending packets on intervals.
|
|
|
|
|
@ -410,55 +429,32 @@ private class KeepAliveSendTask
|
|
|
|
|
{
|
|
|
|
|
public void run()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
// if we are not registerd do nothing
|
|
|
|
|
if(!jabberProvider.isRegistered())
|
|
|
|
|
{
|
|
|
|
|
// if we are not registerd do nothing
|
|
|
|
|
if(!jabberProvider.isRegistered())
|
|
|
|
|
{
|
|
|
|
|
logger.trace("provider not registered. "
|
|
|
|
|
+"won't send keep alive. acc.id="
|
|
|
|
|
+ jabberProvider.getAccountID()
|
|
|
|
|
.getAccountUniqueID());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Chat chat =
|
|
|
|
|
jabberProvider.getConnection().
|
|
|
|
|
createChat(jabberProvider.getAccountID().getUserID());
|
|
|
|
|
|
|
|
|
|
org.jivesoftware.smack.packet.Message msg = chat.createMessage();
|
|
|
|
|
|
|
|
|
|
//make the system message unique (emcho: I think some servers "
|
|
|
|
|
//may be ignoring repetitive messages.)
|
|
|
|
|
msg.setBody("SYSTEM MESSAGE! ("
|
|
|
|
|
+ System.currentTimeMillis()
|
|
|
|
|
+ ")");
|
|
|
|
|
logger.trace("provider not registered. "
|
|
|
|
|
+"won't send keep alive. acc.id="
|
|
|
|
|
+ jabberProvider.getAccountID()
|
|
|
|
|
.getAccountUniqueID());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
KeepAliveEvent keepAliveEvent = new KeepAliveEvent();
|
|
|
|
|
KeepAliveEvent keepAliveEvent =
|
|
|
|
|
new KeepAliveEvent(jabberProvider.getConnection().getUser());
|
|
|
|
|
|
|
|
|
|
keepAliveEvent.setSrcOpSetHash(
|
|
|
|
|
OperationSetBasicInstantMessagingJabberImpl.this.hashCode());
|
|
|
|
|
keepAliveEvent.setSrcProviderHash(jabberProvider.hashCode());
|
|
|
|
|
keepAliveEvent.setSrcOpSetHash(
|
|
|
|
|
OperationSetBasicInstantMessagingJabberImpl.this.hashCode());
|
|
|
|
|
keepAliveEvent.setSrcProviderHash(jabberProvider.hashCode());
|
|
|
|
|
|
|
|
|
|
// add keepalive data
|
|
|
|
|
msg.addExtension(keepAliveEvent);
|
|
|
|
|
// schedule the check task
|
|
|
|
|
keepAliveTimer.schedule(
|
|
|
|
|
new KeepAliveCheckTask(), KEEPALIVE_WAIT);
|
|
|
|
|
|
|
|
|
|
// schedule the check task
|
|
|
|
|
keepAliveTimer.schedule(
|
|
|
|
|
new KeepAliveCheckTask(), KEEPALIVE_WAIT);
|
|
|
|
|
logger.trace(
|
|
|
|
|
"send keepalive for acc: "
|
|
|
|
|
+ jabberProvider.getAccountID().getAccountUniqueID());
|
|
|
|
|
|
|
|
|
|
logger.trace(
|
|
|
|
|
"send keepalive for acc: "
|
|
|
|
|
+ jabberProvider.getAccountID().getAccountUniqueID());
|
|
|
|
|
chat.sendMessage(msg);
|
|
|
|
|
}
|
|
|
|
|
catch (XMPPException ex)
|
|
|
|
|
{
|
|
|
|
|
logger.error(
|
|
|
|
|
"Error sending keep alive packet for account"
|
|
|
|
|
+ jabberProvider.getAccountID().getAccountUniqueID()
|
|
|
|
|
, ex);
|
|
|
|
|
}
|
|
|
|
|
jabberProvider.getConnection().sendPacket(keepAliveEvent);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|