Fix issues with reconnecting some jabber accounts (e.g. after sleeping and resuming the computer).

cusax-fix
Damian Minkov 16 years ago
parent ad58c334cd
commit da87a7f210

@ -455,9 +455,21 @@ private void assertConnected() throws IllegalStateException
"The provider must be non-null and signed on the "
+"service before being able to communicate.");
if (!jabberProvider.isRegistered())
{
// if we are not registered but the current status is online
// change the current status
if(opSetPersPresence.getPresenceStatus().isOnline())
{
opSetPersPresence.fireProviderStatusChangeEvent(
opSetPersPresence.getPresenceStatus(),
jabberProvider.getJabberStatusEnum().getStatus(
JabberStatusEnum.OFFLINE));
}
throw new IllegalStateException(
"The provider must be signed on the service before "
+"being able to communicate.");
}
}
/**

@ -15,6 +15,7 @@
import net.java.sip.communicator.service.protocol.FileTransfer;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.service.protocol.event.FileTransferListener;
import net.java.sip.communicator.service.protocol.jabberconstants.*;
import net.java.sip.communicator.util.*;
import org.jivesoftware.smack.*;
@ -47,6 +48,11 @@ public class OperationSetFileTransferJabberImpl
*/
private final ProtocolProviderServiceJabberImpl jabberProvider;
/**
* An active instance of the opSetPersPresence operation set.
*/
private OperationSetPersistentPresenceJabberImpl opSetPersPresence = null;
/**
* The Jabber file transfer manager.
*/
@ -210,9 +216,21 @@ private void assertConnected()
"The provider must be non-null and signed on the "
+"service before being able to send a file.");
else if (!jabberProvider.isRegistered())
{
// if we are not registered but the current status is online
// change the current status
if(opSetPersPresence.getPresenceStatus().isOnline())
{
opSetPersPresence.fireProviderStatusChangeEvent(
opSetPersPresence.getPresenceStatus(),
jabberProvider.getJabberStatusEnum().getStatus(
JabberStatusEnum.OFFLINE));
}
throw new IllegalStateException(
"The provider must be signed on the service before "
+"being able to send a file.");
}
}
/**
@ -247,6 +265,10 @@ public void registrationStateChanged(RegistrationStateChangeEvent evt)
if (evt.getNewState() == RegistrationState.REGISTERED)
{
opSetPersPresence =
(OperationSetPersistentPresenceJabberImpl) jabberProvider
.getOperationSet(OperationSetPersistentPresence.class);
// Create the Jabber FileTransferManager.
manager = new FileTransferManager(
jabberProvider.getConnection());
@ -300,6 +322,10 @@ else if (evt.getNewState() == RegistrationState.UNREGISTERED)
*/
private class FileTransferRequestListener implements PacketListener
{
/**
* Listens for file transfer packets.
* @param packet
*/
public void processPacket(Packet packet)
{
if (!(packet instanceof StreamInitiation))

@ -644,9 +644,21 @@ private void assertConnected() throws IllegalStateException
"The provider must be non-null and signed on the Jabber "
+"service before being able to communicate.");
if (!parentProvider.isRegistered())
{
// if we are not registered but the current status is online
// change the current status
if(currentStatus.isOnline())
{
fireProviderStatusChangeEvent(
currentStatus,
parentProvider.getJabberStatusEnum().getStatus(
JabberStatusEnum.OFFLINE));
}
throw new IllegalStateException(
"The provider must be signed on the Jabber service before "
+"being able to communicate.");
}
}
public void fireProviderStatusChangeEvent(

@ -10,6 +10,7 @@
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.service.protocol.jabberconstants.*;
import net.java.sip.communicator.util.*;
import org.jivesoftware.smack.*;
@ -26,6 +27,9 @@
public class OperationSetTypingNotificationsJabberImpl
extends AbstractOperationSetTypingNotifications<ProtocolProviderServiceJabberImpl>
{
/**
* The logger.
*/
private static final Logger logger =
Logger.getLogger(OperationSetTypingNotificationsJabberImpl.class);
@ -36,7 +40,7 @@ public class OperationSetTypingNotificationsJabberImpl
private OperationSetPersistentPresenceJabberImpl opSetPersPresence = null;
/**
* We use this listener to ceise the moment when the protocol provider
* We use this listener to cease the moment when the protocol provider
* has been successfully registered.
*/
private ProviderRegListener providerRegListener = new ProviderRegListener();
@ -178,6 +182,30 @@ else if(state == STATE_PAUSED)
}
}
/**
* Utility method throwing an exception if the stack is not properly
* initialized.
*
* @throws java.lang.IllegalStateException
* if the underlying stack is not registered and initialized.
*/
protected void assertConnected()
throws IllegalStateException
{
if(parentProvider != null && !parentProvider.isRegistered()
&& opSetPersPresence.getPresenceStatus().isOnline())
{
// if we are not registered but the current status is online
// change the current status
opSetPersPresence.fireProviderStatusChangeEvent(
opSetPersPresence.getPresenceStatus(),
parentProvider.getJabberStatusEnum().getStatus(
JabberStatusEnum.OFFLINE));
}
super.assertConnected();
}
/**
* Our listener that will tell us when we're registered and
* ready to accept us as a listener.

@ -108,6 +108,9 @@ public class ProtocolProviderServiceJabberImpl
*/
private ServiceDiscoveryManager discoveryManager = null;
/**
* The statuses.
*/
private JabberStatusEnum jabberStatusEnum;
/**
@ -402,6 +405,11 @@ private synchronized void connectAndLogin(SecurityAuthority authority,
{}
// and connect again
connection.connect();
// as disconnect clears all listeners lets add it again
connection.addConnectionListener(
new JabberConnectionListener());
// logging in to google need and service name
connection.login(userID + "@" + serviceName,
password, accountResource);

Loading…
Cancel
Save