Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/XMPPContainer.java')
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/XMPPContainer.java85
1 files changed, 68 insertions, 17 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/XMPPContainer.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/XMPPContainer.java
index 75587760f..75362ae3a 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/XMPPContainer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/XMPPContainer.java
@@ -10,23 +10,40 @@ package org.eclipse.ecf.provider.xmpp;
import java.io.IOException;
import java.net.ConnectException;
-import java.util.*;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
import org.eclipse.ecf.core.ContainerConnectException;
import org.eclipse.ecf.core.events.ContainerDisconnectedEvent;
import org.eclipse.ecf.core.events.ContainerDisconnectingEvent;
-import org.eclipse.ecf.core.identity.*;
-import org.eclipse.ecf.core.security.*;
+import org.eclipse.ecf.core.identity.ID;
+import org.eclipse.ecf.core.identity.IDFactory;
+import org.eclipse.ecf.core.identity.Namespace;
+import org.eclipse.ecf.core.security.Callback;
+import org.eclipse.ecf.core.security.CallbackHandler;
+import org.eclipse.ecf.core.security.IConnectContext;
+import org.eclipse.ecf.core.security.ObjectCallback;
+import org.eclipse.ecf.core.security.UnsupportedCallbackException;
import org.eclipse.ecf.core.sharedobject.SharedObjectAddException;
import org.eclipse.ecf.core.sharedobject.util.IQueueEnqueue;
import org.eclipse.ecf.core.user.User;
import org.eclipse.ecf.core.util.Event;
import org.eclipse.ecf.filetransfer.ISendFileTransferContainerAdapter;
-import org.eclipse.ecf.internal.provider.xmpp.*;
import org.eclipse.ecf.internal.provider.xmpp.Messages;
-import org.eclipse.ecf.internal.provider.xmpp.events.*;
+import org.eclipse.ecf.internal.provider.xmpp.XMPPChatRoomContainer;
+import org.eclipse.ecf.internal.provider.xmpp.XMPPChatRoomManager;
+import org.eclipse.ecf.internal.provider.xmpp.XMPPContainerAccountManager;
+import org.eclipse.ecf.internal.provider.xmpp.XMPPContainerContext;
+import org.eclipse.ecf.internal.provider.xmpp.XMPPContainerPresenceHelper;
+import org.eclipse.ecf.internal.provider.xmpp.XmppPlugin;
+import org.eclipse.ecf.internal.provider.xmpp.events.IQEvent;
+import org.eclipse.ecf.internal.provider.xmpp.events.MessageEvent;
+import org.eclipse.ecf.internal.provider.xmpp.events.PresenceEvent;
import org.eclipse.ecf.internal.provider.xmpp.filetransfer.XMPPOutgoingFileTransferHelper;
import org.eclipse.ecf.internal.provider.xmpp.search.XMPPUserSearchManager;
-import org.eclipse.ecf.internal.provider.xmpp.smack.*;
+import org.eclipse.ecf.internal.provider.xmpp.smack.ECFConnection;
+import org.eclipse.ecf.internal.provider.xmpp.smack.ECFConnectionObjectPacketEvent;
+import org.eclipse.ecf.internal.provider.xmpp.smack.ECFConnectionPacketEvent;
import org.eclipse.ecf.presence.IAccountManager;
import org.eclipse.ecf.presence.IPresenceContainerAdapter;
import org.eclipse.ecf.presence.chatroom.IChatRoomContainer;
@@ -35,13 +52,23 @@ import org.eclipse.ecf.presence.im.IChatManager;
import org.eclipse.ecf.presence.roster.IRosterManager;
import org.eclipse.ecf.presence.search.IUserSearchManager;
import org.eclipse.ecf.presence.service.IPresenceService;
-import org.eclipse.ecf.provider.comm.*;
-import org.eclipse.ecf.provider.generic.*;
+import org.eclipse.ecf.provider.comm.AsynchEvent;
+import org.eclipse.ecf.provider.comm.ConnectionCreateException;
+import org.eclipse.ecf.provider.comm.ISynchAsynchConnection;
+import org.eclipse.ecf.provider.generic.ClientSOContainer;
+import org.eclipse.ecf.provider.generic.ContainerMessage;
+import org.eclipse.ecf.provider.generic.SOConfig;
+import org.eclipse.ecf.provider.generic.SOContainerConfig;
+import org.eclipse.ecf.provider.generic.SOContext;
+import org.eclipse.ecf.provider.generic.SOWrapper;
import org.eclipse.ecf.provider.xmpp.identity.XMPPID;
import org.eclipse.osgi.util.NLS;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.XMPPConnection;
-import org.jivesoftware.smack.packet.*;
+import org.jivesoftware.smack.packet.IQ;
+import org.jivesoftware.smack.packet.Message;
+import org.jivesoftware.smack.packet.Packet;
+import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.packet.MUCUser;
import org.jivesoftware.smackx.packet.XHTMLExtension;
@@ -57,8 +84,7 @@ public class XMPPContainer extends ClientSOContainer implements
.getNamespaceIdentifier();
public static final String CONTAINER_HELPER_ID = XMPPContainer.class
- .getName()
- + ".xmpphandler"; //$NON-NLS-1$
+ .getName() + ".xmpphandler"; //$NON-NLS-1$
protected static final String GOOGLE_SERVICENAME = "gmail.com"; //$NON-NLS-1$
@@ -239,9 +265,34 @@ public class XMPPContainer extends ClientSOContainer implements
return super.getAdapter(clazz);
}
+ private String trimResourceFromJid(String jid) {
+ int slashIndex = jid.indexOf('/');
+ if (slashIndex > 0) {
+ return jid.substring(slashIndex + 1);
+ } else
+ return null;
+ }
+
+ private void resetTargetResource(ID originalTarget, Object serverData) {
+ // Reset resource to that given by server
+ if (originalTarget instanceof XMPPID) {
+ XMPPID xmppOriginalTarget = (XMPPID) originalTarget;
+ if (serverData != null && serverData instanceof String) {
+ String jid = (String) serverData;
+ String jidResource = trimResourceFromJid(jid);
+ if (jidResource != null) {
+ xmppOriginalTarget.setResourceName(jidResource);
+ }
+ }
+ }
+ }
+
protected ID handleConnectResponse(ID originalTarget, Object serverData)
throws Exception {
if (originalTarget != null && !originalTarget.equals(getID())) {
+ // First reset target resource to whatever the server says it is
+ resetTargetResource(originalTarget, serverData);
+
addNewRemoteMember(originalTarget, null);
final ECFConnection conn = getECFConnection();
@@ -371,8 +422,8 @@ public class XMPPContainer extends ClientSOContainer implements
final Object extension = i.next();
if (extension instanceof XHTMLExtension) {
final XHTMLExtension xhtmlExtension = (XHTMLExtension) extension;
- deliverEvent(new MessageEvent((Message) packet, xhtmlExtension
- .getBodies()));
+ deliverEvent(new MessageEvent((Message) packet,
+ xhtmlExtension.getBodies()));
return true;
}
if (packet instanceof Presence && extension instanceof MUCUser) {
@@ -392,8 +443,9 @@ public class XMPPContainer extends ClientSOContainer implements
*/
protected SOContext createSharedObjectContext(SOConfig soconfig,
IQueueEnqueue queue) {
- return new XMPPContainerContext(soconfig.getSharedObjectID(), soconfig
- .getHomeContainerID(), this, soconfig.getProperties(), queue);
+ return new XMPPContainerContext(soconfig.getSharedObjectID(),
+ soconfig.getHomeContainerID(), this, soconfig.getProperties(),
+ queue);
}
/*
@@ -437,8 +489,7 @@ public class XMPPContainer extends ClientSOContainer implements
handleSharedObjectDisposeMessage(contMessage);
} else {
debug(NLS
- .bind(
- Messages.XMPPContainer_UNRECOGONIZED_CONTAINER_MESSAGE,
+ .bind(Messages.XMPPContainer_UNRECOGONIZED_CONTAINER_MESSAGE,
contMessage));
}
} else {

Back to the top