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/04 00:06:39 UTC
svn commit: r1054817 [1/2] - in /mina/vysper/trunk: ./ server/core-inttest/
server/core-inttest/src/test/java/org/apache/vysper/xmpp/server/
server/core-inttest/src/test/java/org/apache/vysper/xmpp/server/s2s/
server/core-inttest/src/test/resources/ se...
Author: ngn
Date: Mon Jan 3 23:06:37 2011
New Revision: 1054817
URL: http://svn.apache.org/viewvc?rev=1054817&view=rev
Log:
Merge in s2s branch, all fingers crossed
Added:
mina/vysper/trunk/server/core-inttest/src/test/java/org/apache/vysper/xmpp/server/
- copied from r1054813, mina/vysper/branches/s2s/server/core-inttest/src/test/java/org/apache/vysper/xmpp/server/
mina/vysper/trunk/server/core-inttest/src/test/java/org/apache/vysper/xmpp/server/s2s/
- copied from r1054813, mina/vysper/branches/s2s/server/core-inttest/src/test/java/org/apache/vysper/xmpp/server/s2s/
mina/vysper/trunk/server/core-inttest/src/test/java/org/apache/vysper/xmpp/server/s2s/RunS2SServers.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core-inttest/src/test/java/org/apache/vysper/xmpp/server/s2s/RunS2SServers.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelay.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/delivery/StanzaRelay.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/RemoteServerNotFoundException.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/RemoteServerNotFoundException.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/RemoteServerTimeoutException.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/RemoteServerTimeoutException.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/SmartDeliveryException.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/SmartDeliveryException.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java (props changed)
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/RelayResult.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/RelayResult.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingListener.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingListener.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPinger.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPinger.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/
- copied from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbResultHandler.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbResultHandler.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbVerifyHandler.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbVerifyHandler.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DialbackIdGenerator.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DialbackIdGenerator.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/DefaultHandlerDictionary.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/protocol/DefaultHandlerDictionary.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/
- copied from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnector.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistry.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/DefaultXMPPServerConnectorRegistry.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/FeaturesHandler.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/FeaturesHandler.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/TlsProceedHandler.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/TlsProceedHandler.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/XMPPServerConnector.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/XMPPServerConnector.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/XMPPServerConnectorRegistry.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/XMPPServerConnectorRegistry.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/XmppEndpointResolver.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/server/s2s/XmppEndpointResolver.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/delivery/failure/
- copied from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/delivery/failure/
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/delivery/failure/ReturnErrorToSenderFailureStrategyTestCase.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/delivery/failure/ReturnErrorToSenderFailureStrategyTestCase.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java
- copied, changed from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/RecordingDeliveryFailureStrategy.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/RecordingDeliveryFailureStrategy.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/RelayResultTestCase.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/RelayResultTestCase.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/TestExecutorService.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/TestExecutorService.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/
- copied from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbVerifyHandlerTestCase.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbVerifyHandlerTestCase.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DialbackIdGeneratorTestCase.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DialbackIdGeneratorTestCase.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/
- copied from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/ServerMain.java
- copied unchanged from r1054813, mina/vysper/branches/s2s/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/ServerMain.java
Removed:
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInboundStanzaRelay.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/AbstractHandlerDictionary.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringStanzaRelayTestCase.java
Modified:
mina/vysper/trunk/pom.xml
mina/vysper/trunk/server/core/ (props changed)
mina/vysper/trunk/server/core-inttest/ (props changed)
mina/vysper/trunk/server/core-inttest/src/test/resources/log4j.properties
mina/vysper/trunk/server/core/pom.xml
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/StanzaLoggingFilter.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/TCPEndpoint.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/spring/SpringCompatibleDefaultServerRuntimeContext.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSession.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionContext.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/ReturnErrorToSenderFailureStrategy.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java (props changed)
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/starttls/handler/StartTLSHandler.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingIQHandler.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingModule.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/AbstractStanzaHandlerLookup.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceHandlerDictionary.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceURIs.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/exception/AuthorizationFailedException.java (props changed)
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptedProtocolWorker.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/StartedProtocolWorker.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerFeatures.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/SessionContext.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaHandlerLookup.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java
mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/stanzasession/StanzaSessionTestCase.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailInitialOutHandlerTestCase.java (props changed)
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubRequestOutHandlerTestCase.java (props changed)
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AuthHandlerPlainMechanismTestCase.java (props changed)
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/server/TestSessionContext.java
mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/stanza/StanzaBuilderTestCase.java
mina/vysper/trunk/server/core/src/test/resources/log4j.properties
mina/vysper/trunk/server/extensions/xep0045-muc/ (props changed)
mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/TestSessionContext.java
mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/TestSessionContext.java
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
Modified: mina/vysper/trunk/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/pom.xml?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/pom.xml (original)
+++ mina/vysper/trunk/pom.xml Mon Jan 3 23:06:37 2011
@@ -120,7 +120,7 @@
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
- <version>1.3</version>
+ <version>1.4</version>
</dependency>
<dependency>
@@ -216,6 +216,13 @@
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.8.5</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
Propchange: mina/vysper/trunk/server/core/
------------------------------------------------------------------------------
svn:mergeinfo = /mina/vysper/branches/s2s/server/core:1050957-1054813
Propchange: mina/vysper/trunk/server/core-inttest/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Mon Jan 3 23:06:37 2011
@@ -2,3 +2,5 @@
target
.classpath
.project
+s2s-jabber.org.properties
+s2s-protocol7.com.properties
Propchange: mina/vysper/trunk/server/core-inttest/
------------------------------------------------------------------------------
svn:mergeinfo = /mina/vysper/branches/s2s/server/core-inttest:1050957-1054813
Modified: mina/vysper/trunk/server/core-inttest/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core-inttest/src/test/resources/log4j.properties?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core-inttest/src/test/resources/log4j.properties (original)
+++ mina/vysper/trunk/server/core-inttest/src/test/resources/log4j.properties Mon Jan 3 23:06:37 2011
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-log4j.rootLogger=DEBUG, C
+log4j.rootLogger=INFO, C
log4j.logger.org.apache.vysper.mina.XmppIoHandlerAdapter=WARN,C
log4j.logger.org.apache.mina.filter.executor.ExecutorFilter=WARN,C
Modified: mina/vysper/trunk/server/core/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/pom.xml?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/pom.xml (original)
+++ mina/vysper/trunk/server/core/pom.xml Mon Jan 3 23:06:37 2011
@@ -97,6 +97,12 @@
</dependency>
+ <dependency>
+ <groupId>dnsjava</groupId>
+ <artifactId>dnsjava</artifactId>
+ <version>2.0.8</version>
+ </dependency>
+
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
@@ -140,6 +146,24 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>jivesoftware</groupId>
+ <artifactId>smack</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>jivesoftware</groupId>
+ <artifactId>smackx</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java Mon Jan 3 23:06:37 2011
@@ -19,6 +19,8 @@
*/
package org.apache.vysper.mina;
+import java.util.concurrent.TimeUnit;
+
import org.apache.mina.core.future.CloseFuture;
import org.apache.mina.core.future.IoFuture;
import org.apache.mina.core.future.IoFutureListener;
@@ -48,6 +50,7 @@ public class MinaBackedSessionContext ex
private boolean openingStanzaWritten = false;
private boolean switchToTLS = false;
+ private boolean clientTLS = false;
protected CloseFuture closeFuture;
@@ -64,25 +67,38 @@ public class MinaBackedSessionContext ex
return this;
}
- public void switchToTLS() {
- switchToTLS = true;
+ public void switchToTLS(boolean delayed, boolean clientTls) {
+ this.clientTLS = clientTls;
+
+ if(delayed) {
+ switchToTLS = true;
+ } else {
+ addSslFilter();
+ }
}
public void setIsReopeningXMLStream() {
openingStanzaWritten = false;
}
+
+ private void addSslFilter() {
+ minaSession.suspendRead();
+ minaSession.suspendWrite();
+ SslFilter filter = new SslFilter(getServerRuntimeContext().getSslContext());
+ filter.setUseClientMode(clientTLS);
+ minaSession.getFilterChain().addFirst("sslFilter", filter);
+ if(!clientTLS) {
+ minaSession.setAttribute(SslFilter.DISABLE_ENCRYPTION_ONCE, Boolean.TRUE);
+ }
+ minaSession.setAttribute(SslFilter.USE_NOTIFICATION, Boolean.TRUE);
+ minaSession.resumeWrite();
+ minaSession.resumeRead();
+
+ }
public void write(Stanza stanza) {
if (switchToTLS) {
- minaSession.suspendRead();
- minaSession.suspendWrite();
- SslFilter filter = new SslFilter(getServerRuntimeContext().getSslContext());
- filter.setUseClientMode(false);
- minaSession.getFilterChain().addFirst("sslFilter", filter);
- minaSession.setAttribute(SslFilter.DISABLE_ENCRYPTION_ONCE, Boolean.TRUE);
- minaSession.setAttribute(SslFilter.USE_NOTIFICATION, Boolean.TRUE);
- minaSession.resumeWrite();
- minaSession.resumeRead();
+ addSslFilter();
switchToTLS = false;
}
@@ -93,7 +109,15 @@ public class MinaBackedSessionContext ex
public void close() {
logger.info("session will be closed now");
closeFuture.setClosed();
- minaSession.close(false);
+ try {
+ // allow some time to flush before closibng
+ if(!minaSession.close(false).await(5000, TimeUnit.MILLISECONDS)) {
+ // no really close if necessary
+ minaSession.close(true);
+ }
+ } catch (InterruptedException e) {
+ // ignore
+ }
logger.info("session closed");
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/StanzaLoggingFilter.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/StanzaLoggingFilter.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/StanzaLoggingFilter.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/StanzaLoggingFilter.java Mon Jan 3 23:06:37 2011
@@ -44,9 +44,9 @@ public class StanzaLoggingFilter extends
XMLElement element = (XMLElement) message;
if (clientLogger.isInfoEnabled()) {
- clientLogger.info(DenseStanzaLogRenderer.render(element));
+ //clientLogger.info(DenseStanzaLogRenderer.render(element));
}
- if (clientLogger.isDebugEnabled()) {
+// if (clientLogger.isDebugEnabled()) {
boolean openElement = true;
boolean closeElement = true;
// this is somewhat of a hack, can we detect opening and closing elements only cleaner?
@@ -62,8 +62,8 @@ public class StanzaLoggingFilter extends
String xml = toXml(element, openElement, closeElement);
clientLogger.debug("Received stanza: " + xml);
- }
-
+ clientLogger.info("< " + xml);
+// }
}
nextFilter.messageReceived(session, message);
@@ -75,14 +75,15 @@ public class StanzaLoggingFilter extends
StanzaWriteInfo stanzaWriteInfo = (StanzaWriteInfo) message;
if (serverLogger.isInfoEnabled()) {
- serverLogger.info(DenseStanzaLogRenderer.render(stanzaWriteInfo.getStanza()));
+ //serverLogger.info(DenseStanzaLogRenderer.render(stanzaWriteInfo.getStanza()));
}
- if (serverLogger.isDebugEnabled()) {
+// if (serverLogger.isDebugEnabled()) {
String xml = toXml(stanzaWriteInfo.getStanza(), stanzaWriteInfo.isWriteOpeningElement(),
stanzaWriteInfo.isWriteClosingElement());
- serverLogger.info("Sent stanza: " + xml);
- }
+ //serverLogger.info("Sent stanza: " + xml);
+ clientLogger.info("> " + xml);
+// }
}
nextFilter.messageSent(session, request);
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/TCPEndpoint.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/TCPEndpoint.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/TCPEndpoint.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina/TCPEndpoint.java Mon Jan 3 23:06:37 2011
@@ -77,5 +77,6 @@ public class TCPEndpoint implements Endp
public void stop() {
acceptor.unbind();
+ acceptor.dispose();
}
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/spring/SpringCompatibleDefaultServerRuntimeContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/spring/SpringCompatibleDefaultServerRuntimeContext.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/spring/SpringCompatibleDefaultServerRuntimeContext.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/spring/SpringCompatibleDefaultServerRuntimeContext.java Mon Jan 3 23:06:37 2011
@@ -26,7 +26,7 @@ import org.apache.vysper.xmpp.delivery.S
import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy;
import org.apache.vysper.xmpp.modules.Module;
-import org.apache.vysper.xmpp.protocol.NamespaceHandlerDictionary;
+import org.apache.vysper.xmpp.protocol.HandlerDictionary;
import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
import org.apache.vysper.xmpp.server.ServerFeatures;
import org.apache.vysper.xmpp.stanza.Stanza;
@@ -51,7 +51,7 @@ public class SpringCompatibleDefaultServ
}
public SpringCompatibleDefaultServerRuntimeContext(Entity serverEntity, ServerFeatures serverFeatures,
- List<NamespaceHandlerDictionary> dictionaries, ResourceRegistry resourceRegistry) {
+ List<HandlerDictionary> dictionaries, ResourceRegistry resourceRegistry) {
super(serverEntity, new StanzaRelayHull(), serverFeatures, dictionaries, resourceRegistry);
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSession.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSession.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSession.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSession.java Mon Jan 3 23:06:37 2011
@@ -38,7 +38,7 @@ public class StanzaSession {
}
public void setIsSecure() {
- sessionContext.switchToTLS();
+ sessionContext.switchToTLS(true, false);
}
public Stanza poll() {
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionContext.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionContext.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/stanzasession/StanzaSessionContext.java Mon Jan 3 23:06:37 2011
@@ -52,7 +52,7 @@ public class StanzaSessionContext extend
sessionStateHolder);
}
- public void switchToTLS() {
+ public void switchToTLS(boolean delayed, boolean clientTls) {
if (sessionStateHolder.getState() == SessionState.ENCRYPTION_STARTED)
sessionStateHolder.setState(SessionState.ENCRYPTED);
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/ReturnErrorToSenderFailureStrategy.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/ReturnErrorToSenderFailureStrategy.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/ReturnErrorToSenderFailureStrategy.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/failure/ReturnErrorToSenderFailureStrategy.java Mon Jan 3 23:06:37 2011
@@ -65,15 +65,17 @@ public class ReturnErrorToSenderFailureS
@SpecCompliant(spec = "rfc3921bis-08", section = "4.3", status = NOT_STARTED, coverage = UNKNOWN) })
public void process(Stanza failedToDeliverStanza, List<DeliveryException> deliveryExceptions)
throws DeliveryException {
-
StanzaErrorCondition stanzaErrorCondition = StanzaErrorCondition.SERVICE_UNAVAILABLE;
StanzaErrorType errorType = StanzaErrorType.CANCEL;
+ // TODO would it be better to check for the correct stanzas instead of assuming the stanza is wrapped?
if (!(failedToDeliverStanza instanceof XMPPCoreStanza)) {
throw new DeliveryException("could not return to sender");
}
+
+
XMPPCoreStanza failedCoreStanza = (XMPPCoreStanza) failedToDeliverStanza;
- if (failedCoreStanza.getType() != null && failedCoreStanza.getType().equals("error")) {
+ if ("error".equals(failedCoreStanza.getType())) {
return; // do not answer these
}
@@ -112,6 +114,15 @@ public class ReturnErrorToSenderFailureS
return;
}
}
+ } else if (deliveryException instanceof SmartDeliveryException) {
+ // RFC3921bis#10.4.3: return remote server error to sender
+ SmartDeliveryException smartDeliveryException = (SmartDeliveryException) deliveryException;
+ XMPPCoreStanza error = XMPPCoreStanza
+ .getWrapper(ServerErrorResponses.getInstance().getStanzaError(
+ smartDeliveryException.getStanzaErrorCondition(), failedCoreStanza,
+ smartDeliveryException.getStanzaErrorType(), smartDeliveryException.getErrorText(),
+ "en", null));
+ stanzaRelay.relay(error.getTo(), error, IgnoreFailureStrategy.IGNORE_FAILURE_STRATEGY);
}
} else if (deliveryExceptions.size() > 1) {
throw new RuntimeException("cannot return to sender for multiple failed deliveries");
Propchange: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Mon Jan 3 23:06:37 2011
@@ -0,0 +1 @@
+/mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java:1050957-1054813
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java Mon Jan 3 23:06:37 2011
@@ -103,7 +103,7 @@ public class MessageHandler extends XMPP
if (resource == null)
throw new IllegalStateException("could not determine unique resource");
from = new EntityImpl(sessionContext.getInitiatingEntity(), resource);
- StanzaBuilder stanzaBuilder = new StanzaBuilder(stanza.getName());
+ StanzaBuilder stanzaBuilder = new StanzaBuilder(stanza.getName(), stanza.getNamespaceURI());
for (Attribute attribute : stanza.getAttributes()) {
if ("from".equals(attribute.getName()))
continue;
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java Mon Jan 3 23:06:37 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;
@@ -36,6 +37,7 @@ import org.apache.vysper.xmpp.server.XMP
import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
import org.apache.vysper.xmpp.server.response.ServerResponses;
import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
/**
*
@@ -69,6 +71,7 @@ public class StreamStartHandler implemen
boolean clientCall = xmlElementVerifier.namespacePresent(NamespaceURIs.JABBER_CLIENT);
boolean serverCall = xmlElementVerifier.namespacePresent(NamespaceURIs.JABBER_SERVER);
+ // TODO is it better to derive c2s or s2s from the type of endpoint and verify the namespace here?
if (clientCall && serverCall)
serverCall = false; // silently ignore ambiguous attributes
if (serverCall)
@@ -128,9 +131,8 @@ public class StreamStartHandler implemen
// RFC3920: 'to' attribute SHOULD be used by the initiating entity
String toValue = stanza.getAttributeValue("to");
if (toValue != null) {
- EntityImpl toEntity = null;
try {
- toEntity = EntityImpl.parse(toValue);
+ EntityImpl.parse(toValue);
} catch (EntityFormatException e) {
return new ResponseStanzaContainerImpl(ServerErrorResponses.getInstance().getStreamError(
StreamErrorCondition.IMPROPER_ADDRESSING, sessionContext.getXMLLang(),
@@ -143,23 +145,23 @@ public class StreamStartHandler implemen
// TODO RFC3920: 'from' attribute SHOULD be silently ignored by the receiving entity
// TODO RFC3920bis: 'from' attribute SHOULD be not ignored by the receiving entity and used as 'to' in responses
}
- responseStanza = new ServerResponses().getStreamOpener(clientCall, sessionContext.getServerJID(),
+ responseStanza = new ServerResponses().getStreamOpenerForClient(sessionContext.getServerJID(),
responseVersion, sessionContext);
} else if (serverCall) {
// RFC3920: 'from' attribute SHOULD be used by the receiving entity
String fromValue = stanza.getAttributeValue("from");
if (fromValue != null) {
- EntityImpl entity = null;
try {
- entity = EntityImpl.parse(fromValue);
+ EntityImpl.parse(fromValue);
} catch (EntityFormatException e) {
return new ResponseStanzaContainerImpl(ServerErrorResponses.getInstance().getStreamError(
StreamErrorCondition.INVALID_FROM, sessionContext.getXMLLang(),
"could not parse incoming stanza's FROM attribute", null));
-
}
}
- throw new RuntimeException("server connection not yet supported");
+
+ responseStanza = new ServerResponses().getStreamOpenerForServerAcceptor(sessionContext.getServerJID(),
+ responseVersion, sessionContext, serverRuntimeContext.getSslContext() != null);
} else {
String descriptiveText = "one of the two namespaces must be present: " + NamespaceURIs.JABBER_CLIENT
+ " or " + NamespaceURIs.JABBER_SERVER;
Propchange: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jan 3 23:06:37 2011
@@ -0,0 +1 @@
+/mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java:1050957-1054813
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/starttls/handler/StartTLSHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/starttls/handler/StartTLSHandler.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/starttls/handler/StartTLSHandler.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/starttls/handler/StartTLSHandler.java Mon Jan 3 23:06:37 2011
@@ -70,7 +70,7 @@ public class StartTLSHandler implements
// if all is correct, go to next phase
sessionStateHolder.setState(SessionState.ENCRYPTION_STARTED);
- sessionContext.switchToTLS();
+ sessionContext.switchToTLS(true, false);
return new ResponseStanzaContainerImpl(responseStanza);
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingIQHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingIQHandler.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingIQHandler.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingIQHandler.java Mon Jan 3 23:06:37 2011
@@ -19,6 +19,9 @@
*/
package org.apache.vysper.xmpp.modules.extension.xep0119_xmppping;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.vysper.compliance.SpecCompliant;
import org.apache.vysper.xmpp.modules.core.base.handler.DefaultIQHandler;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
@@ -47,10 +50,38 @@ import org.apache.vysper.xmpp.stanza.Sta
@SpecCompliant(spec = "xep-0199", status = SpecCompliant.ComplianceStatus.IN_PROGRESS, coverage = SpecCompliant.ComplianceCoverage.PARTIAL)
public class XmppPingIQHandler extends DefaultIQHandler {
+ private List<XmppPinger> pingers = new ArrayList<XmppPinger>();
+
public XmppPingIQHandler() {
}
@Override
+ public boolean verify(Stanza stanza) {
+ boolean extension = super.verify(stanza);
+ if(extension) {
+ return true;
+ } else {
+ String type = stanza.getAttributeValue("type");
+ if(type != null && type.equals("result")) {
+ String id = stanza.getAttributeValue("id");
+ if(id != null && id.startsWith("xmppping-")) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ protected void addPinger(XmppPinger pinger) {
+ pingers.add(pinger);
+ }
+
+ protected void removePinger(XmppPinger pinger) {
+ pingers.remove(pinger);
+ }
+
+ @Override
protected boolean verifyNamespace(Stanza stanza) {
return verifyInnerNamespace(stanza, NamespaceURIs.URN_XMPP_PING);
}
@@ -68,4 +99,16 @@ public class XmppPingIQHandler extends D
return stanzaBuilder.build();
}
+
+ @Override
+ protected Stanza handleResult(IQStanza stanza, ServerRuntimeContext serverRuntimeContext,
+ SessionContext sessionContext) {
+ for(XmppPinger pinger : pingers) {
+ pinger.pong(stanza.getID());
+ }
+
+ return null;
+ }
+
+
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingModule.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingModule.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingModule.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0119_xmppping/XmppPingModule.java Mon Jan 3 23:06:37 2011
@@ -23,14 +23,16 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
+import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.modules.DefaultDiscoAwareModule;
import org.apache.vysper.xmpp.modules.servicediscovery.management.Feature;
import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoElement;
import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
import org.apache.vysper.xmpp.modules.servicediscovery.management.ServerInfoRequestListener;
+import org.apache.vysper.xmpp.protocol.DefaultHandlerDictionary;
import org.apache.vysper.xmpp.protocol.HandlerDictionary;
-import org.apache.vysper.xmpp.protocol.NamespaceHandlerDictionary;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.writer.StanzaWriter;
/**
* A module for <a href="http://xmpp.org/extensions/xep-0199.html">XEP-0199 XMPP Ping</a>.
@@ -39,6 +41,8 @@ import org.apache.vysper.xmpp.protocol.N
*/
public class XmppPingModule extends DefaultDiscoAwareModule implements ServerInfoRequestListener {
+ private XmppPingIQHandler handler = new XmppPingIQHandler();
+
@Override
public String getName() {
return "XEP-0199 XMPP Ping";
@@ -64,6 +68,13 @@ public class XmppPingModule extends Defa
@Override
protected void addHandlerDictionaries(List<HandlerDictionary> dictionary) {
- dictionary.add(new NamespaceHandlerDictionary(NamespaceURIs.URN_XMPP_PING, new XmppPingIQHandler()));
+ dictionary.add(new DefaultHandlerDictionary(handler));
}
+
+ public void ping(StanzaWriter stanzaWriter, Entity from, Entity to, int timeoutMillis, XmppPingListener listener) {
+ XmppPinger pinger = new XmppPinger(handler);
+ pinger.ping(stanzaWriter, from, to, timeoutMillis, listener);
+ }
+
+
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/AbstractStanzaHandlerLookup.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/AbstractStanzaHandlerLookup.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/AbstractStanzaHandlerLookup.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/AbstractStanzaHandlerLookup.java Mon Jan 3 23:06:37 2011
@@ -19,8 +19,9 @@
*/
package org.apache.vysper.xmpp.protocol;
+import java.util.ArrayList;
import java.util.LinkedHashMap;
-import java.util.Map;
+import java.util.List;
import org.apache.vysper.xml.fragment.XMLElement;
import org.apache.vysper.xmpp.stanza.Stanza;
@@ -29,13 +30,10 @@ import org.apache.vysper.xmpp.stanza.Sta
* basic facility to collect and query a set of namespace-based handlers
*/
public abstract class AbstractStanzaHandlerLookup {
- protected Map<String, NamespaceHandlerDictionary> namespaceDictionaries = new LinkedHashMap<String, NamespaceHandlerDictionary>();
+ protected List<HandlerDictionary> namespaceDictionaries = new ArrayList<HandlerDictionary>();
- public void addDictionary(NamespaceHandlerDictionary namespaceHandlerDictionary) {
- String namespace = namespaceHandlerDictionary.getNamespaceURI();
- if (namespaceDictionaries.containsKey(namespace))
- throw new IllegalArgumentException("dictionary already exists covering namespace " + namespace);
- namespaceDictionaries.put(namespace, namespaceHandlerDictionary);
+ public void addDictionary(HandlerDictionary namespaceHandlerDictionary) {
+ namespaceDictionaries.add(namespaceHandlerDictionary);
}
public abstract StanzaHandler getHandler(Stanza stanza);
@@ -46,18 +44,10 @@ public abstract class AbstractStanzaHand
* 2. xmlElements namespace, if the element name has a namespace prefix
*/
protected StanzaHandler getHandlerForElement(Stanza stanza, XMLElement xmlElement) {
-
- String namespace = xmlElement.getNamespaceURI();
- NamespaceHandlerDictionary namespaceHandlerDictionary = namespaceDictionaries.get(namespace);
-
- // another try to get a dictionary
- if (namespaceHandlerDictionary == null) {
- namespace = xmlElement.getNamespacePrefix();
- namespaceHandlerDictionary = namespaceDictionaries.get(namespace);
+ for(HandlerDictionary dictionary : namespaceDictionaries) {
+ StanzaHandler stanzaHandler = dictionary.get(stanza);
+ if(stanzaHandler != null) return stanzaHandler;
}
- if (namespaceHandlerDictionary != null)
- return namespaceHandlerDictionary.get(stanza);
-
return null;
}
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceHandlerDictionary.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceHandlerDictionary.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceHandlerDictionary.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceHandlerDictionary.java Mon Jan 3 23:06:37 2011
@@ -21,12 +21,14 @@ package org.apache.vysper.xmpp.protocol;
import java.util.List;
+import org.apache.vysper.xmpp.stanza.Stanza;
+
/**
* holds all stanza handlers for a distinct namespace
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public class NamespaceHandlerDictionary extends AbstractHandlerDictionary {
+public class NamespaceHandlerDictionary extends DefaultHandlerDictionary {
private String namespaceURI;
@@ -47,4 +49,20 @@ public class NamespaceHandlerDictionary
public String getNamespaceURI() {
return namespaceURI;
}
+
+ @Override
+ public StanzaHandler get(Stanza stanza) {
+ String namespace;
+ if(stanza.getVerifier().subElementsPresentExact(1)) {
+ namespace = stanza.getFirstInnerElement().getNamespaceURI();
+ } else {
+ namespace = stanza.getNamespaceURI();
+ }
+
+ if(namespace != null && namespace.equals(namespaceURI)) {
+ return super.get(stanza);
+ } else {
+ return null;
+ }
+ }
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceURIs.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceURIs.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceURIs.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/NamespaceURIs.java Mon Jan 3 23:06:37 2011
@@ -70,6 +70,8 @@ public class NamespaceURIs {
public static final String URN_XMPP_XBOSH = "urn:xmpp:xbosh";
+ public static final String URN_XMPP_FEATURES_DIALBACK = "urn:xmpp:features:dialback";
+
public static final String VCARD_TEMP = "vcard-temp";
public static final String XEP0030_SERVICE_DISCOVERY_ITEMS = "http://jabber.org/protocol/disco#items";
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ProtocolWorker.java Mon Jan 3 23:06:37 2011
@@ -35,7 +35,11 @@ import org.apache.vysper.xmpp.protocol.w
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionContext;
import org.apache.vysper.xmpp.server.SessionState;
+import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
import org.apache.vysper.xmpp.stanza.XMPPCoreStanza;
import org.apache.vysper.xmpp.writer.DenseStanzaLogRenderer;
import org.slf4j.Logger;
@@ -109,39 +113,79 @@ public class ProtocolWorker implements S
}
}
- // make sure that 'from' (if present) matches the bare authorized entity
- // else repond with a stanza error 'unknown-sender'
- // see rfc3920_draft-saintandre-rfc3920bis-04.txt#8.5.4
Entity from = stanza.getFrom();
- if (from != null && sessionContext.getInitiatingEntity() != null) {
- Entity fromBare = from.getBareJID();
- Entity initiatingEntity = sessionContext.getInitiatingEntity();
- if (!initiatingEntity.equals(fromBare)) {
- responseWriter.handleWrongFromJID(sessionContext, stanza);
- return;
+ if(sessionContext.isServerToServer()) {
+ XMPPCoreStanza coreStanza = XMPPCoreStanza.getWrapper(stanza);
+
+ if(coreStanza != null) {
+ // stanza must come from the origin server
+ if(from == null) {
+ Stanza errorStanza = ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.UNKNOWN_SENDER,
+ coreStanza, StanzaErrorType.MODIFY, "Missing from attribute", null, null);
+ ResponseWriter.writeResponse(sessionContext, errorStanza);
+ return;
+ } else if(!from.getDomain().equals(sessionContext.getInitiatingEntity().getDomain())) {
+ // make sure the from attribute refers to the correct remote server
+
+ Stanza errorStanza = ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.UNKNOWN_SENDER,
+ coreStanza, StanzaErrorType.MODIFY, "Incorrect from attribute", null, null);
+ ResponseWriter.writeResponse(sessionContext, errorStanza);
+ return;
+ }
+
+ Entity to = stanza.getTo();
+ if(to == null) {
+ // TODO what's the appropriate error? StreamErrorCondition.IMPROPER_ADDRESSING?
+ Stanza errorStanza = ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.BAD_REQUEST,
+ coreStanza, StanzaErrorType.MODIFY, "Missing to attribute", null, null);
+ ResponseWriter.writeResponse(sessionContext, errorStanza);
+ return;
+ } else if(!to.getDomain().equals(serverRuntimeContext.getServerEnitity().getDomain())) {
+ // TODO what's the appropriate error? StreamErrorCondition.IMPROPER_ADDRESSING?
+ Stanza errorStanza = ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.BAD_REQUEST,
+ coreStanza, StanzaErrorType.MODIFY, "Invalid to attribute", null, null);
+ ResponseWriter.writeResponse(sessionContext, errorStanza);
+ return;
+
+ }
+
+ // rewrite namespace
+ stanza = StanzaBuilder.rewriteNamespace(stanza, NamespaceURIs.JABBER_SERVER, NamespaceURIs.JABBER_CLIENT);
+ }
+ } else {
+ // make sure that 'from' (if present) matches the bare authorized entity
+ // else respond with a stanza error 'unknown-sender'
+ // see rfc3920_draft-saintandre-rfc3920bis-04.txt#8.5.4
+ if (from != null && sessionContext.getInitiatingEntity() != null) {
+ Entity fromBare = from.getBareJID();
+ Entity initiatingEntity = sessionContext.getInitiatingEntity();
+ if (!initiatingEntity.equals(fromBare)) {
+ responseWriter.handleWrongFromJID(sessionContext, stanza);
+ return;
+ }
}
- }
- // make sure that there is a bound resource entry for that from's resource id attribute!
- if (from != null && from.getResource() != null) {
- List<String> boundResources = sessionContext.getServerRuntimeContext().getResourceRegistry()
- .getBoundResources(from, false);
- if (boundResources.size() == 0) {
- responseWriter.handleWrongFromJID(sessionContext, stanza);
- return;
+ // make sure that there is a bound resource entry for that from's resource id attribute!
+ if (from != null && from.getResource() != null) {
+ List<String> boundResources = sessionContext.getServerRuntimeContext().getResourceRegistry()
+ .getBoundResources(from, false);
+ if (boundResources.size() == 0) {
+ responseWriter.handleWrongFromJID(sessionContext, stanza);
+ return;
+ }
}
- }
- // make sure that there is a full from entity given in cases where more than one resource is bound
- // in the same session.
- // see rfc3920_draft-saintandre-rfc3920bis-04.txt#8.5.4
- if (from != null && from.getResource() == null) {
- List<String> boundResources = sessionContext.getServerRuntimeContext().getResourceRegistry()
- .getResourcesForSession(sessionContext);
- if (boundResources.size() > 1) {
- responseWriter.handleWrongFromJID(sessionContext, stanza);
- return;
+ // make sure that there is a full from entity given in cases where more than one resource is bound
+ // in the same session.
+ // see rfc3920_draft-saintandre-rfc3920bis-04.txt#8.5.4
+ if (from != null && from.getResource() == null) {
+ List<String> boundResources = sessionContext.getServerRuntimeContext().getResourceRegistry()
+ .getResourcesForSession(sessionContext);
+ if (boundResources.size() > 1) {
+ responseWriter.handleWrongFromJID(sessionContext, stanza);
+ return;
+ }
}
}
-
+
try {
stateAwareProtocolWorker.processStanza(sessionContext, sessionStateHolder, stanza, stanzaHandler);
} catch (Exception e) {
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java Mon Jan 3 23:06:37 2011
@@ -27,6 +27,8 @@ import org.apache.vysper.xmpp.modules.co
import org.apache.vysper.xmpp.modules.core.base.handler.StreamStartHandler;
import org.apache.vysper.xmpp.modules.core.base.handler.XMLPrologHandler;
import org.apache.vysper.xmpp.modules.core.im.handler.PresenceHandler;
+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.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.XMPPCoreStanza;
@@ -66,31 +68,33 @@ public class StanzaHandlerLookup extends
if (stanza == null)
return null;
- String name = stanza.getName();
- if ("xml".equals(name))
- return new XMLPrologHandler();
- else if ("stream".equals(name))
- return new StreamStartHandler();
- else if (iqHandler.verify(stanza))
- return getIQHandler(stanza);
- else if (messageHandler.verify(stanza))
- return getMessageHandler(stanza);
- else if (presenceHandler.verify(stanza))
- return getPresenceHandler(stanza);
- else {
- // this is not a core stanza (RFC3920), but something like the following
- // (in descending-probability order):
- // a. a custom extension of iq, message, presence
- // b. some handshake stanza other than iq, message, presence
- // c. an arbitrary test stanza
- // d. an evil forged stanza
- // e. some extension we don't know yet
- // ...so we delegate:
- StanzaHandler stanzaHandler = getHandlerForElement(stanza, stanza);
- // ... and if we could not resolve and it's a core stanza, we can safely return an error
- if (stanzaHandler == null && XMPPCoreStanza.getWrapper(stanza) != null)
- return SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER;
+ // allow extensions to override default handling
+ StanzaHandler stanzaHandler = getHandlerForElement(stanza, stanza);
+
+ if(stanzaHandler != null) {
return stanzaHandler;
+ } else {
+ String name = stanza.getName();
+
+ if ("xml".equals(name)) {
+ return new XMLPrologHandler();
+ } else if ("stream".equals(name)) {
+ return new StreamStartHandler();
+ } else if ("verify".equals(name)) {
+ return new DbVerifyHandler();
+ } else if ("result".equals(name)) {
+ return new DbResultHandler();
+ } else if (iqHandler.verify(stanza)) {
+ return getIQHandler(stanza);
+ } else if (messageHandler.verify(stanza)) {
+ return getMessageHandler(stanza);
+ } else if (presenceHandler.verify(stanza)) {
+ return getPresenceHandler(stanza);
+ } else {
+ // ... and if we could not resolve and it's a core stanza, we can safely return an error
+ if (XMPPCoreStanza.getWrapper(stanza) != null) return SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER;
+ else return null;
+ }
}
}
Propchange: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/exception/AuthorizationFailedException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jan 3 23:06:37 2011
@@ -0,0 +1 @@
+/mina/vysper/branches/s2s/server/core/src/main/java/org/apache/vysper/xmpp/protocol/exception/AuthorizationFailedException.java:1050957-1054813
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptedProtocolWorker.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptedProtocolWorker.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptedProtocolWorker.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/EncryptedProtocolWorker.java Mon Jan 3 23:06:37 2011
@@ -22,6 +22,8 @@ package org.apache.vysper.xmpp.protocol.
import org.apache.vysper.xmpp.modules.core.base.handler.StreamStartHandler;
import org.apache.vysper.xmpp.modules.core.base.handler.XMLPrologHandler;
import org.apache.vysper.xmpp.modules.core.sasl.handler.AbstractSASLHandler;
+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.protocol.ResponseWriter;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
@@ -43,12 +45,17 @@ public class EncryptedProtocolWorker ext
@Override
protected boolean checkState(SessionContext sessionContext, SessionStateHolder sessionStateHolder, Stanza stanza,
StanzaHandler stanzaHandler) {
+
if (stanzaHandler instanceof StreamStartHandler)
return true;
if (stanzaHandler instanceof AbstractSASLHandler)
return true;
if (stanzaHandler instanceof XMLPrologHandler)
return true; // PSI client sends that.
+ if (sessionContext.isServerToServer() && stanzaHandler instanceof DbResultHandler)
+ return true;
+ if (sessionContext.isServerToServer() && stanzaHandler instanceof DbVerifyHandler)
+ return true;
ResponseWriter.writeUnsupportedStanzaError(sessionContext);
return false;
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/StartedProtocolWorker.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/StartedProtocolWorker.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/StartedProtocolWorker.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/StartedProtocolWorker.java Mon Jan 3 23:06:37 2011
@@ -20,6 +20,8 @@
package org.apache.vysper.xmpp.protocol.worker;
import org.apache.vysper.xmpp.modules.core.starttls.handler.StartTLSHandler;
+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.protocol.ResponseWriter;
import org.apache.vysper.xmpp.protocol.SessionStateHolder;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
@@ -41,8 +43,13 @@ public class StartedProtocolWorker exten
@Override
protected boolean checkState(SessionContext sessionContext, SessionStateHolder sessionStateHolder, Stanza stanza,
StanzaHandler stanzaHandler) {
+
if (stanzaHandler instanceof StartTLSHandler)
return true;
+ if (sessionContext.isServerToServer() && stanzaHandler instanceof DbVerifyHandler)
+ return true;
+ if (sessionContext.isServerToServer() && stanzaHandler instanceof DbResultHandler)
+ return true;
ResponseWriter.writeUnsupportedStanzaError(sessionContext);
return false;
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/AbstractSessionContext.java Mon Jan 3 23:06:37 2011
@@ -116,6 +116,11 @@ public abstract class AbstractSessionCon
return sessionId;
}
+ public void setSessionId(String sessionId) {
+ this.sessionId = sessionId;
+ }
+
+
public String getXMLLang() {
return xmlLang;
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java Mon Jan 3 23:06:37 2011
@@ -20,6 +20,8 @@
package org.apache.vysper.xmpp.server;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -38,13 +40,14 @@ import org.apache.vysper.xmpp.modules.Mo
import org.apache.vysper.xmpp.modules.ModuleRegistry;
import org.apache.vysper.xmpp.modules.ServerRuntimeContextService;
import org.apache.vysper.xmpp.protocol.HandlerDictionary;
-import org.apache.vysper.xmpp.protocol.NamespaceHandlerDictionary;
import org.apache.vysper.xmpp.protocol.ProtocolWorker;
import org.apache.vysper.xmpp.protocol.QueuedStanzaProcessor;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
import org.apache.vysper.xmpp.protocol.StanzaHandlerLookup;
import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.components.Component;
+import org.apache.vysper.xmpp.server.s2s.DefaultXMPPServerConnectorRegistry;
+import org.apache.vysper.xmpp.server.s2s.XMPPServerConnectorRegistry;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.state.presence.LatestPresenceCache;
import org.apache.vysper.xmpp.state.presence.SimplePresenceCache;
@@ -111,6 +114,8 @@ public class DefaultServerRuntimeContext
*/
private LatestPresenceCache presenceCache = new SimplePresenceCache();
+ private XMPPServerConnectorRegistry serverConnectorRegistry = new DefaultXMPPServerConnectorRegistry(this);
+
/**
* holds the storage services
*/
@@ -121,6 +126,8 @@ public class DefaultServerRuntimeContext
*/
final private Map<String, ServerRuntimeContextService> serverRuntimeContextServiceMap = new HashMap<String, ServerRuntimeContextService>();
+ private List<Module> modules = new ArrayList<Module>();
+
/**
* map of all registered components, index by the subdomain they are registered for
*/
@@ -140,7 +147,7 @@ public class DefaultServerRuntimeContext
}
public DefaultServerRuntimeContext(Entity serverEntity, StanzaRelay stanzaRelay, ServerFeatures serverFeatures,
- List<NamespaceHandlerDictionary> dictionaries, ResourceRegistry resourceRegistry) {
+ List<HandlerDictionary> dictionaries, ResourceRegistry resourceRegistry) {
this(serverEntity, stanzaRelay);
this.serverFeatures = serverFeatures;
this.resourceRegistry = resourceRegistry;
@@ -186,12 +193,16 @@ public class DefaultServerRuntimeContext
return serverFeatures;
}
- public void addDictionary(NamespaceHandlerDictionary namespaceHandlerDictionary) {
+ public XMPPServerConnectorRegistry getServerConnectorRegistry() {
+ return serverConnectorRegistry;
+ }
+
+ public void addDictionary(HandlerDictionary namespaceHandlerDictionary) {
stanzaHandlerLookup.addDictionary(namespaceHandlerDictionary);
}
- protected void addDictionaries(List<NamespaceHandlerDictionary> dictionaries) {
- for (NamespaceHandlerDictionary dictionary : dictionaries) {
+ protected void addDictionaries(List<HandlerDictionary> dictionaries) {
+ for (HandlerDictionary dictionary : dictionaries) {
addDictionary(dictionary);
}
}
@@ -321,12 +332,7 @@ public class DefaultServerRuntimeContext
if (handlerDictionaryList != null) {
for (HandlerDictionary handlerDictionary : handlerDictionaryList) {
- if (handlerDictionary instanceof NamespaceHandlerDictionary) {
- addDictionary((NamespaceHandlerDictionary) handlerDictionary);
- } else {
- throw new RuntimeException("arbitrary HandlerDictionary implementations not supported yet, "
- + "only NamespaceHandlerDictionary.");
- }
+ addDictionary(handlerDictionary);
}
}
@@ -334,8 +340,21 @@ public class DefaultServerRuntimeContext
if (module instanceof Component) {
registerComponent((Component) module);
}
+
+ modules.add(module);
+ }
+
+ public List<Module> getModules() {
+ return Collections.unmodifiableList(modules);
}
+ public <T> T getModule(Class<T> clazz) {
+ for(Module module : modules) {
+ if(module.getClass().equals(clazz)) return (T) module;
+ }
+ return null;
+ }
+
public void registerComponent(Component component) {
componentMap.put(component.getSubdomain(), component);
}
@@ -353,4 +372,5 @@ public class DefaultServerRuntimeContext
return component.getStanzaProcessor();
}
+
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerFeatures.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerFeatures.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerFeatures.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerFeatures.java Mon Jan 3 23:06:37 2011
@@ -49,7 +49,7 @@ public class ServerFeatures {
/**
* flag indicating whether stanzas are sent to remote servers or not
*/
- private boolean relayToFederationServers = false;
+ private boolean relayToFederationServers = true;
/**
* counter, how many times a session can try authentication before session is terminated
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java Mon Jan 3 23:06:37 2011
@@ -20,16 +20,20 @@
package org.apache.vysper.xmpp.server;
+import java.util.List;
+
import javax.net.ssl.SSLContext;
import org.apache.vysper.storage.StorageProvider;
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.authorization.UserAuthorization;
import org.apache.vysper.xmpp.delivery.StanzaRelay;
+import org.apache.vysper.xmpp.modules.Module;
import org.apache.vysper.xmpp.modules.ServerRuntimeContextService;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
import org.apache.vysper.xmpp.protocol.StanzaProcessor;
import org.apache.vysper.xmpp.server.components.Component;
+import org.apache.vysper.xmpp.server.s2s.XMPPServerConnectorRegistry;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.state.presence.LatestPresenceCache;
import org.apache.vysper.xmpp.state.resourcebinding.ResourceRegistry;
@@ -71,4 +75,10 @@ public interface ServerRuntimeContext {
void registerComponent(Component component);
StanzaProcessor getComponentStanzaProcessor(Entity entity);
+
+ XMPPServerConnectorRegistry getServerConnectorRegistry();
+
+ List<Module> getModules();
+
+ <T> T getModule(Class<T> clazz);
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/SessionContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/SessionContext.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/SessionContext.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/SessionContext.java Mon Jan 3 23:06:37 2011
@@ -29,7 +29,7 @@ import org.apache.vysper.xmpp.writer.Sta
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public interface SessionContext {
+public interface SessionContext extends StanzaWriter {
static final String SESSION_ATTRIBUTE_MESSAGE_STANZA_NO_RECEIVE = "stanza.message.no_receive";
@@ -77,12 +77,12 @@ public interface SessionContext {
boolean isRemotelyInitiatedSession();
/**
- * @return the initiating {@link Entity}
+ * @return the initiating {@link Entity}. For c2s, this is the client {@link Entity}. For s2s, this is the server {@link Entity}
*/
Entity getInitiatingEntity();
/**
- * Sets the initiating entity.
+ * Sets the initiating entity. For c2s, this is the client {@link Entity}. For s2s, this is the server {@link Entity}
*
* @param entity
*/
@@ -150,7 +150,7 @@ public interface SessionContext {
/**
* signals the underlying transport to handle TLS handshake
*/
- void switchToTLS();
+ void switchToTLS(boolean delayed, boolean clientTls);
/**
* this method signals that from now on a new <stream:stream>... xml stream
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java Mon Jan 3 23:06:37 2011
@@ -32,15 +32,15 @@ import org.apache.vysper.xmpp.authorizat
import org.apache.vysper.xmpp.authorization.Plain;
import org.apache.vysper.xmpp.authorization.SASLMechanism;
import org.apache.vysper.xmpp.cryptography.BogusTrustManagerFactory;
-import org.apache.vysper.xmpp.cryptography.FileBasedTLSContextFactory;
import org.apache.vysper.xmpp.cryptography.InputStreamBasedTLSContextFactory;
import org.apache.vysper.xmpp.delivery.RecordingStanzaRelay;
import org.apache.vysper.xmpp.delivery.StanzaRelayBroker;
-import org.apache.vysper.xmpp.delivery.inbound.DeliveringInboundStanzaRelay;
+import org.apache.vysper.xmpp.delivery.inbound.DeliveringInternalInboundStanzaRelay;
+import org.apache.vysper.xmpp.delivery.inbound.DeliveringExternalInboundStanzaRelay;
import org.apache.vysper.xmpp.modules.Module;
import org.apache.vysper.xmpp.modules.roster.RosterModule;
import org.apache.vysper.xmpp.modules.servicediscovery.ServiceDiscoveryModule;
-import org.apache.vysper.xmpp.protocol.NamespaceHandlerDictionary;
+import org.apache.vysper.xmpp.protocol.HandlerDictionary;
import org.apache.vysper.xmpp.state.resourcebinding.ResourceRegistry;
/**
@@ -72,6 +72,7 @@ public class XMPPServer {
private String tlsCertificatePassword;
private final List<Endpoint> endpoints = new ArrayList<Endpoint>();
+
public XMPPServer(String domain) {
this.serverDomain = domain;
@@ -109,7 +110,7 @@ public class XMPPServer {
tlsContextFactory.setPassword(tlsCertificatePassword);
tlsContextFactory.setTrustManagerFactory(bogusTrustManagerFactory);
- List<NamespaceHandlerDictionary> dictionaries = new ArrayList<NamespaceHandlerDictionary>();
+ List<HandlerDictionary> dictionaries = new ArrayList<HandlerDictionary>();
addCoreDictionaries(dictionaries);
ResourceRegistry resourceRegistry = new ResourceRegistry();
@@ -118,9 +119,9 @@ public class XMPPServer {
AccountManagement accountManagement = (AccountManagement) storageProviderRegistry
.retrieve(AccountManagement.class);
- DeliveringInboundStanzaRelay internalStanzaRelay = new DeliveringInboundStanzaRelay(serverEntity,
+ DeliveringInternalInboundStanzaRelay internalStanzaRelay = new DeliveringInternalInboundStanzaRelay(serverEntity,
resourceRegistry, accountManagement);
- RecordingStanzaRelay externalStanzaRelay = new RecordingStanzaRelay();
+ DeliveringExternalInboundStanzaRelay externalStanzaRelay = new DeliveringExternalInboundStanzaRelay();
StanzaRelayBroker stanzaRelayBroker = new StanzaRelayBroker();
stanzaRelayBroker.setInternalRelay(internalStanzaRelay);
@@ -139,6 +140,7 @@ public class XMPPServer {
stanzaRelayBroker.setServerRuntimeContext(serverRuntimeContext);
internalStanzaRelay.setServerRuntimeContext(serverRuntimeContext);
+ externalStanzaRelay.setServerRuntimeContext(serverRuntimeContext);
if (endpoints.size() == 0)
throw new IllegalStateException("server must have at least one endpoint");
@@ -152,13 +154,15 @@ public class XMPPServer {
for (Endpoint endpoint : endpoints) {
endpoint.stop();
}
+
+ serverRuntimeContext.getServerConnectorRegistry().close();
}
public void addModule(Module module) {
serverRuntimeContext.addModule(module);
}
- private void addCoreDictionaries(List<NamespaceHandlerDictionary> dictionaries) {
+ private void addCoreDictionaries(List<HandlerDictionary> dictionaries) {
dictionaries.add(new org.apache.vysper.xmpp.modules.core.base.BaseStreamStanzaDictionary());
dictionaries.add(new org.apache.vysper.xmpp.modules.core.starttls.StartTLSStanzaDictionary());
dictionaries.add(new org.apache.vysper.xmpp.modules.core.sasl.SASLStanzaDictionary());
@@ -166,4 +170,8 @@ public class XMPPServer {
dictionaries.add(new org.apache.vysper.xmpp.modules.core.session.SessionStanzaDictionary());
dictionaries.add(new org.apache.vysper.xmpp.modules.core.compatibility.jabber_iq_auth.JabberIQAuthDictionary());
}
+
+ public ServerRuntimeContext getServerRuntimeContext() {
+ return serverRuntimeContext;
+ }
}
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaHandlerLookup.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaHandlerLookup.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaHandlerLookup.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/components/ComponentStanzaHandlerLookup.java Mon Jan 3 23:06:37 2011
@@ -20,7 +20,7 @@
package org.apache.vysper.xmpp.server.components;
import org.apache.vysper.xml.fragment.XMLElement;
-import org.apache.vysper.xmpp.protocol.AbstractHandlerDictionary;
+import org.apache.vysper.xmpp.protocol.DefaultHandlerDictionary;
import org.apache.vysper.xmpp.protocol.AbstractStanzaHandlerLookup;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
import org.apache.vysper.xmpp.stanza.Stanza;
@@ -30,7 +30,7 @@ import org.apache.vysper.xmpp.stanza.Sta
*/
public class ComponentStanzaHandlerLookup extends AbstractStanzaHandlerLookup {
- private static class ComponentHandlerDictionary extends AbstractHandlerDictionary {
+ private static class ComponentHandlerDictionary extends DefaultHandlerDictionary {
public ComponentHandlerDictionary() {
super();
Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java?rev=1054817&r1=1054816&r2=1054817&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerResponses.java Mon Jan 3 23:06:37 2011
@@ -41,7 +41,7 @@ public class ServerResponses {
return getStreamOpener(forClient, from, null, version, errorStanza).build();
}
- public Stanza getStreamOpener(boolean forClient, Entity from, XMPPVersion version, SessionContext sessionContext) {
+ public Stanza getStreamOpenerForClient(Entity from, XMPPVersion version, SessionContext sessionContext) {
Stanza innerFeatureStanza;
if (sessionContext.getState() == SessionState.INITIATED)
innerFeatureStanza = getFeaturesForEncryption(sessionContext);
@@ -55,12 +55,47 @@ public class ServerResponses {
throw new IllegalStateException("unsupported state for responding with stream opener");
}
- StanzaBuilder stanzaBuilder = getStreamOpener(forClient, from, sessionContext.getXMLLang(), version,
+ StanzaBuilder stanzaBuilder = getStreamOpener(true, from, sessionContext.getXMLLang(), version,
sessionContext.getSessionId(), innerFeatureStanza);
return stanzaBuilder.build();
}
+ public Stanza getStreamOpenerForServerAcceptor(Entity from, XMPPVersion version, SessionContext sessionContext, boolean tlsConfigured) {
+
+ 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(), features);
+
+ stanzaBuilder.declareNamespace("db", NamespaceURIs.JABBER_SERVER_DIALBACK);
+ return stanzaBuilder.build();
+ }
+
+ public Stanza getStreamOpenerForServerConnector(Entity from, Entity to, XMPPVersion version, SessionContext sessionContext) {
+ StanzaBuilder stanzaBuilder = getStreamOpener(false, from, sessionContext.getXMLLang(), version,
+ null, null);
+ stanzaBuilder.addAttribute("to", to.getDomain());
+ stanzaBuilder.declareNamespace("db", NamespaceURIs.JABBER_SERVER_DIALBACK);
+ return stanzaBuilder.build();
+ }
+
+
public StanzaBuilder getStreamOpener(boolean forClient, Entity from, String xmlLang, XMPPVersion version,
Stanza innerStanza) {
return getStreamOpener(forClient, from, xmlLang, version, null, innerStanza);
@@ -75,7 +110,7 @@ public class ServerResponses {
stanzaBuilder.addAttribute(NamespaceURIs.XML, "lang", xmlLang);
if (version != null)
stanzaBuilder.addAttribute("version", version.toString());
- if (forClient && sessionId != null)
+ if (sessionId != null)
stanzaBuilder.addAttribute("id", sessionId);
if (innerStanza != null)
stanzaBuilder.addPreparedElement(innerStanza);