You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2011/01/03 23:29:10 UTC
svn commit: r1054811 - in /mina/vysper/branches/s2s/server/core/src:
main/java/org/apache/vysper/xmpp/modules/core/base/handler/
main/java/org/apache/vysper/xmpp/server/response/
main/java/org/apache/vysper/xmpp/server/s2s/ test/java/org/apache/vysper/...
Author: ngn
Date: Mon Jan 3 22:29:10 2011
New Revision: 1054811
URL: http://svn.apache.org/viewvc?rev=1054811&view=rev
Log:
Fix s2s interoperability with older servers (e.g. GTalk)
Modified:
mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java
mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java
mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java
mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java
Modified: mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java?rev=1054811&r1=1054810&r2=1054811&view=diff
==============================================================================
--- mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java (original)
+++ mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java Mon Jan 3 22:29:10 2011
@@ -20,6 +20,7 @@
package org.apache.vysper.xmpp.modules.core.base.handler;
+import org.apache.vysper.mina.MinaBackedSessionContext;
import org.apache.vysper.xml.fragment.XMLElementVerifier;
import org.apache.vysper.xmpp.addressing.EntityFormatException;
import org.apache.vysper.xmpp.addressing.EntityImpl;
@@ -158,9 +159,7 @@ public class StreamStartHandler implemen
"could not parse incoming stanza's FROM attribute", null));
}
}
-
- // TODO set version correctly
- responseVersion = XMPPVersion.VERSION_1_0;
+
responseStanza = new ServerResponses().getStreamOpenerForServerAcceptor(sessionContext.getServerJID(),
responseVersion, sessionContext, serverRuntimeContext.getSslContext() != null);
} else {
Modified: mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java?rev=1054811&r1=1054810&r2=1054811&view=diff
==============================================================================
--- mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java (original)
+++ mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java Mon Jan 3 22:29:10 2011
@@ -62,19 +62,26 @@ public class ServerResponses {
}
public Stanza getStreamOpenerForServerAcceptor(Entity from, XMPPVersion version, SessionContext sessionContext, boolean tlsConfigured) {
- StanzaBuilder featureBuilder = startFeatureStanza();
- if (sessionContext.getState() == SessionState.INITIATED) {
- featureBuilder.startInnerElement("starttls", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_TLS).endInnerElement();
- featureBuilder.startInnerElement("dialback", NamespaceURIs.URN_XMPP_FEATURES_DIALBACK).endInnerElement();
-
- } else if (sessionContext.getState() == SessionState.ENCRYPTED) {
- featureBuilder.startInnerElement("dialback", NamespaceURIs.URN_XMPP_FEATURES_DIALBACK).endInnerElement();
- } else {
- throw new IllegalStateException("unsupported state for responding with stream opener");
+
+ Stanza features = null;
+
+ // only include <features> if the other server support version 1.0
+ if(XMPPVersion.VERSION_1_0.equals(version)) {
+ StanzaBuilder featureBuilder = startFeatureStanza();
+ if (sessionContext.getState() == SessionState.INITIATED) {
+ featureBuilder.startInnerElement("starttls", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_TLS).endInnerElement();
+ featureBuilder.startInnerElement("dialback", NamespaceURIs.URN_XMPP_FEATURES_DIALBACK).endInnerElement();
+
+ } else if (sessionContext.getState() == SessionState.ENCRYPTED) {
+ featureBuilder.startInnerElement("dialback", NamespaceURIs.URN_XMPP_FEATURES_DIALBACK).endInnerElement();
+ } else {
+ throw new IllegalStateException("unsupported state for responding with stream opener");
+ }
+ features = featureBuilder.build();
}
StanzaBuilder stanzaBuilder = getStreamOpener(false, from, sessionContext.getXMLLang(), version,
- sessionContext.getSessionId(), featureBuilder.build());
+ sessionContext.getSessionId(), features);
stanzaBuilder.declareNamespace("db", NamespaceURIs.JABBER_SERVER_DIALBACK);
return stanzaBuilder.build();
Modified: mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java?rev=1054811&r1=1054810&r2=1054811&view=diff
==============================================================================
--- mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java (original)
+++ mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java Mon Jan 3 22:29:10 2011
@@ -25,6 +25,8 @@ import org.apache.vysper.xmpp.modules.ex
import org.apache.vysper.xmpp.modules.extension.xep0119_xmppping.XmppPingModule;
import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DbResultHandler;
import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DbVerifyHandler;
+import org.apache.vysper.xmpp.modules.extension.xep0220_server_dailback.DialbackIdGenerator;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
@@ -35,6 +37,7 @@ import org.apache.vysper.xmpp.server.XMP
import org.apache.vysper.xmpp.server.response.ServerResponses;
import org.apache.vysper.xmpp.server.s2s.XmppEndpointResolver.ResolvedAddress;
import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -243,14 +246,27 @@ public class DefaultXMPPServerConnector
// none of the handlers matched, stream start is handled separately
} else if(stanza.getName().equals("stream")) {
sessionContext.setSessionId(stanza.getAttributeValue("id"));
- sessionContext.setInitiatingEntity(stanza.getFrom());
+ sessionContext.setInitiatingEntity(otherServer);
+
+ String version = stanza.getAttributeValue("version");
+ if(version == null) {
+ // old protocol, assume dialback
+ String dailbackId = new DialbackIdGenerator().generate(otherServer, serverRuntimeContext.getServerEnitity(), sessionContext.getSessionId());
+
+ Stanza dbResult = new StanzaBuilder("result", NamespaceURIs.JABBER_SERVER_DIALBACK, "db")
+ .addAttribute("from", serverRuntimeContext.getServerEnitity().getDomain())
+ .addAttribute("to", otherServer.getDomain())
+ .addText(dailbackId)
+ .build();
+ write(dbResult);
+ }
if(dialbackSessionContext != null) {
// connector is being used for dialback verification, don't do further authentication
sessionContext.putAttribute("DIALBACK_SESSION_CONTEXT", dialbackSessionContext);
sessionContext.putAttribute("DIALBACK_SESSION_STATE_HOLDER", dialbackSessionStateHolder);
- sessionContext.setInitiatingEntity(stanza.getFrom());
+ sessionContext.setInitiatingEntity(otherServer);
sessionStateHolder.setState(SessionState.AUTHENTICATED);
authenticatedLatch.countDown();
}
Modified: mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java?rev=1054811&r1=1054810&r2=1054811&view=diff
==============================================================================
--- mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java (original)
+++ mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java Mon Jan 3 22:29:10 2011
@@ -15,6 +15,7 @@ import org.apache.vysper.xmpp.stanza.Sta
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
+import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
@@ -69,20 +70,30 @@ public class Server2Server {
Thread.sleep(2000);
-// XMPPServerConnectorRegistry registry = serverRuntimeContext.getServerConnectorRegistry();
-//
-// XMPPServerConnector connector = registry.getConnector(remoteServer);
-//
-// Stanza stanza = new StanzaBuilder("message", NamespaceURIs.JABBER_SERVER)
-// .addAttribute("from", localUser.getFullQualifiedName())
-// .addAttribute("to", remoteUser.getFullQualifiedName())
-// .startInnerElement("body", NamespaceURIs.JABBER_SERVER)
-// .addText("Hello world")
-// .endInnerElement()
-// .build();
-//
-// connector.write(stanza);
+ XMPPServerConnectorRegistry registry = serverRuntimeContext.getServerConnectorRegistry();
+ XMPPServerConnector connector = registry.connect(remoteServer);
+
+ Stanza stanza = new StanzaBuilder("message", NamespaceURIs.JABBER_SERVER)
+ .addAttribute("from", localUser.getFullQualifiedName())
+ .addAttribute("to", remoteUser.getFullQualifiedName())
+ .startInnerElement("body", NamespaceURIs.JABBER_SERVER)
+ .addText("Hello world")
+ .endInnerElement()
+ .build();
+
+ connector.write(stanza);
+
+ //sendMessagesUsingClients(localUser, remoteServer, remoteUser, remotePassword, keystorePath, keystorePassword);
+
+ Thread.sleep(50000);
+
+ server.stop();
+ }
+
+ private static void sendMessagesUsingClients(Entity localUser, Entity remoteServer, Entity remoteUser,
+ String remotePassword, String keystorePath, String keystorePassword) throws XMPPException,
+ InterruptedException {
ConnectionConfiguration localConnectionConfiguration = new ConnectionConfiguration("localhost", 5222);
localConnectionConfiguration.setKeystorePath(keystorePath);
localConnectionConfiguration.setTruststorePath(keystorePath);
@@ -124,10 +135,6 @@ public class Server2Server {
Thread.sleep(8000);
remoteClient.disconnect();
localClient.disconnect();
-
- Thread.sleep(50000);
-
- server.stop();
}
}