You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by be...@apache.org on 2008/04/11 09:15:24 UTC

svn commit: r647070 - in /labs/vysper/src: main/config/ main/java/org/apache/vysper/xmpp/modules/core/base/handler/ main/java/org/apache/vysper/xmpp/modules/core/compatibility/jabber_iq_auth/handler/ main/java/org/apache/vysper/xmpp/protocol/ main/java...

Author: berndf
Date: Fri Apr 11 00:15:22 2008
New Revision: 647070

URL: http://svn.apache.org/viewvc?rev=647070&view=rev
Log:
[vysper] for the error response class make distinction between stanza and stream errors clear (LABS-119)
improve message stanza handling (LABS-100)
make IQ stanza handler return service-unavailable for unknown IQs (LABS-99)

Added:
    labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ServiceUnavailableStanzaErrorHandler.java
Modified:
    labs/vysper/src/main/config/spring-config.xml
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/compatibility/jabber_iq_auth/handler/IQAuthCompatibilityHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/SessionStateHolder.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/writer/DenseStanzaLogRenderer.java
    labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java

Modified: labs/vysper/src/main/config/spring-config.xml
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/config/spring-config.xml?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/config/spring-config.xml (original)
+++ labs/vysper/src/main/config/spring-config.xml Fri Apr 11 00:15:22 2008
@@ -67,6 +67,7 @@
                 <bean class="org.apache.vysper.xmpp.modules.core.bind.BindResourceDictionary"/>
                 <bean class="org.apache.vysper.xmpp.modules.core.session.SessionStanzaDictionary"/>
                 <bean class="org.apache.vysper.xmpp.modules.core.compatibility.jabber_iq_auth.JabberIQAuthDictionary"/>
+                <bean class="org.apache.vysper.xmpp.modules.roster.RosterDictionary"/>
             </list>
         </constructor-arg>
         <constructor-arg ref="resourceRegistry"/>
@@ -76,6 +77,7 @@
                 <constructor-arg index="0">
                     <map>
                         <entry key="user1@vysper.org" value="password1" />
+                        <entry key="user2@vysper.org" value="password1" />
                     </map>
                 </constructor-arg>
             </bean>

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandler.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandler.java Fri Apr 11 00:15:22 2008
@@ -59,8 +59,8 @@
         // rfc3920/9.2.3/1.
         String id = stanza.getID();
         if (id == null) {
-            return ServerErrorResponses.getInstance().getErrorResponse(stanza,
-                    StanzaErrorType.MODIFY, StanzaErrorCondition.BAD_REQUEST,
+            return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.BAD_REQUEST, stanza,
+                    StanzaErrorType.MODIFY,
                     "iq-stanza requires 'id' attribute to be present",
                     sessionContext.getXMLLang(), null);
         }
@@ -69,8 +69,8 @@
         IQStanzaType iqType = stanza.getIQType();
         if (iqType == null) {
             // missing or unknown type
-            return ServerErrorResponses.getInstance().getErrorResponse(stanza,
-                    StanzaErrorType.MODIFY, StanzaErrorCondition.BAD_REQUEST,
+            return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.BAD_REQUEST, stanza,
+                    StanzaErrorType.MODIFY,
                     "iq-stanza requires a valid 'type' attribute to be present",
                     sessionContext.getXMLLang(), null);
         }
@@ -79,8 +79,8 @@
             // assure, set or get contain one and only one element
             // rfc3920/9.2.3/5.
             if (!coreStanza.getVerifier().subElementsPresentExact(1)) {
-                return ServerErrorResponses.getInstance().getErrorResponse(stanza,
-                        StanzaErrorType.MODIFY, StanzaErrorCondition.BAD_REQUEST,
+                return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.BAD_REQUEST, stanza,
+                        StanzaErrorType.MODIFY,
                         "iq stanza of type get or set require exactly one child",
                         sessionContext.getXMLLang(), null);
             }
@@ -88,8 +88,8 @@
             // assure, result contains zero or one element
             // rfc3920/9.2.3/6.
             if (!coreStanza.getVerifier().subElementsPresentAtMost(1)) {
-                return ServerErrorResponses.getInstance().getErrorResponse(stanza,
-                        StanzaErrorType.MODIFY, StanzaErrorCondition.BAD_REQUEST,
+                return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.BAD_REQUEST, stanza,
+                        StanzaErrorType.MODIFY,
                         "iq stanza of type result may not have more than one child",
                         sessionContext.getXMLLang(), null);
             }
@@ -107,8 +107,8 @@
      */
     protected Stanza executeIQLogic(IQStanza stanza, SessionContext sessionContext) {
         // this is default behavior and must be replaced by overrider
-        return ServerErrorResponses.getInstance().getErrorResponse(stanza,
-                StanzaErrorType.CANCEL, StanzaErrorCondition.FEATURE_NOT_IMPLEMENTED,
+        return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.FEATURE_NOT_IMPLEMENTED, stanza,
+                StanzaErrorType.CANCEL,
                 null, null, null);
     }
 

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java Fri Apr 11 00:15:22 2008
@@ -23,6 +23,9 @@
 import org.apache.vysper.xmpp.stanza.MessageStanza;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.XMPPCoreStanza;
+import org.apache.vysper.xmpp.stanza.XMPPCoreStanzaVerifier;
+import org.apache.vysper.xmpp.xmlfragment.XMLElement;
+import org.apache.vysper.xmpp.xmlfragment.XMLSemanticError;
 
 /**
  * handling message stanzas
@@ -38,7 +41,45 @@
 
 
     protected Stanza executeCore(XMPPCoreStanza stanza, SessionContext sessionContext) {
+
+        XMPPCoreStanzaVerifier stanzaVerifier = stanza.getCoreVerifier();
+        
+        // (try to) read thread id
+        String threadId = null;
+        XMLElement threadElement = null;
+        try {
+            threadElement = stanza.getSingleInnerElementsNamed("thread");
+            try {
+                threadId = threadElement.getSingleInnerText().getText();
+            } catch (Exception _) {
+                threadId = null;
+            }
+        } catch (XMLSemanticError _) {
+            threadId = null; 
+        }
+        
+        // (try to) read subject id
+        String subject = null;
+        XMLElement subjectElement = null;
+        try {
+            subjectElement = stanza.getSingleInnerElementsNamed("subject");
+            try {
+                subject = subjectElement.getSingleInnerText().getText();
+            } catch (Exception _) {
+                subject = null;
+            }
+        } catch (XMLSemanticError _) {
+            subject = null; 
+        }
+        
+        // TODO inspect all BODY elements and make sure they conform to the spec 
+
         Entity to = stanza.getTo();
+        
+        // TODO check if to is empty.
+        
+        // TODO check if the user should be on this server. relay if not.
+        
         StanzaRelay stanzaRelay = sessionContext.getServerRuntimeContext().getStanzaRelay();
         if (!stanzaRelay.receiverExists(to)) {
             // TODO return error stanza

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/StreamStartHandler.java Fri Apr 11 00:15:22 2008
@@ -116,7 +116,7 @@
                     toEntity = EntityImpl.parse(stanza.getAttribute("to").getValue());
                 } catch (EntityFormatException e) {
                     return new ResponseStanzaContainerImpl(
-                                ServerErrorResponses.getInstance().getError(StreamErrorCondition.IMPROPER_ADDRESSING,
+                                ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.IMPROPER_ADDRESSING,
                                                                     sessionContext.getXMLLang(),
                                                                     "could not parse incoming stanza's TO attribute",
                                                                     null));
@@ -140,7 +140,7 @@
                     entity = EntityImpl.parse(stanza.getAttribute("from").getValue());
                 } catch (EntityFormatException e) {
                     return new ResponseStanzaContainerImpl(
-                                ServerErrorResponses.getInstance().getError(StreamErrorCondition.INVALID_FROM,
+                                ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.INVALID_FROM,
                                                                     sessionContext.getXMLLang(),
                                                                     "could not parse incoming stanza's FROM attribute",
                                                                     null));
@@ -175,7 +175,7 @@
 
     private ResponseStanzaContainer respondIllegalNamespaceError(String descriptiveText) {
         return new ResponseStanzaContainerImpl(
-                    ServerErrorResponses.getInstance().getError(StreamErrorCondition.INVALID_NAMESPACE,
+                    ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.INVALID_NAMESPACE,
                                                         null,
                                                         descriptiveText,
                                                         null));
@@ -183,7 +183,7 @@
 
     private ResponseStanzaContainer respondUnsupportedStanzaType(String descriptiveText) {
         return new ResponseStanzaContainerImpl(
-                    ServerErrorResponses.getInstance().getError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE,
+                    ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE,
                                                         null,
                                                         descriptiveText,
                                                         null));
@@ -191,7 +191,7 @@
 
     private ResponseStanzaContainer respondUnsupportedVersionError(String xmlLang, String versionAttributeValue, String errorMessage) {
         if (xmlLang == null) xmlLang = "en_US";
-        Stanza error = ServerErrorResponses.getInstance().getError(StreamErrorCondition.UNSUPPORTED_VERSION, xmlLang,
+        Stanza error = ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.UNSUPPORTED_VERSION, xmlLang,
                 errorMessage + versionAttributeValue, null);
         return new ResponseStanzaContainerImpl(error);
     }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/XMPPCoreStanzaHandler.java Fri Apr 11 00:15:22 2008
@@ -88,7 +88,7 @@
         Entity to = stanza.getTo();
         if (sessionContext.isServerToServer() && to == null) {
             // "to" MUST be present for jabber:server
-            return new ResponseStanzaContainerImpl(ServerErrorResponses.getInstance().getError(StreamErrorCondition.IMPROPER_ADDRESSING, stanza.getXMLLang(), "missing to attribute", null));
+            return new ResponseStanzaContainerImpl(ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.IMPROPER_ADDRESSING, stanza.getXMLLang(), "missing to attribute", null));
         }
 
         if (to != null) {

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/compatibility/jabber_iq_auth/handler/IQAuthCompatibilityHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/compatibility/jabber_iq_auth/handler/IQAuthCompatibilityHandler.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/compatibility/jabber_iq_auth/handler/IQAuthCompatibilityHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/core/compatibility/jabber_iq_auth/handler/IQAuthCompatibilityHandler.java Fri Apr 11 00:15:22 2008
@@ -20,17 +20,11 @@
 import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 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.IQStanza;
 import org.apache.vysper.xmpp.stanza.Stanza;
-import org.apache.vysper.xmpp.stanza.StanzaBuilder;
-import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.StanzaErrorType;
 import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
-import org.apache.vysper.xmpp.resourcebinding.BindException;
-import org.apache.vysper.xmpp.addressing.Entity;
-import org.apache.vysper.xmpp.addressing.EntityImpl;
 
 /**
  * handles bind requests
@@ -53,9 +47,9 @@
 
             case GET:
             case SET:
-                return ServerErrorResponses.getInstance().getErrorResponse(stanza,
-                StanzaErrorType.CANCEL, StanzaErrorCondition.SERVICE_UNAVAILABLE,
-                "jabber:iq:auth not supported", "en", 
+                return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.SERVICE_UNAVAILABLE, stanza,
+                StanzaErrorType.CANCEL,
+                        "jabber:iq:auth not supported", "en", 
                 null);
 
             case ERROR:

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java Fri Apr 11 00:15:22 2008
@@ -32,7 +32,7 @@
     
     public void writeStreamNotOpenedError(SessionContext sessionContext) {
 
-        Stanza errorStanza = ServerErrorResponses.getInstance().getError(StreamErrorCondition.BAD_FORMAT,
+        Stanza errorStanza = ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.BAD_FORMAT,
                 sessionContext.getXMLLang(),
                 "could not parse incoming stanza",
                 null);
@@ -65,7 +65,7 @@
         if (protocolException != null) errorStanza = protocolException.getErrorStanza();
 
         if (errorStanza == null) {
-            errorStanza = ServerErrorResponses.getInstance().getError(StreamErrorCondition.BAD_FORMAT,
+            errorStanza = ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.BAD_FORMAT,
                                                               sessionContext.getXMLLang(),
                                                               "could not process incoming stanza",
                                                               receivedStanza);
@@ -74,7 +74,7 @@
     }
 
     public void handleUnsupportedStanzaType(SessionContext sessionContext, Stanza receivedStanza) {
-        Stanza errorStanza = ServerErrorResponses.getInstance().getError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE,
+        Stanza errorStanza = ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE,
                                                           sessionContext.getXMLLang(),
                                                           "could not process incoming stanza",
                                                           receivedStanza);
@@ -82,7 +82,7 @@
     }
 
     public void handleNotAuthorized(SessionContext sessionContext, Stanza receivedStanza) {
-        Stanza errorStanza = ServerErrorResponses.getInstance().getError(StreamErrorCondition.NOT_AUTHORIZED,
+        Stanza errorStanza = ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.NOT_AUTHORIZED,
                                                           sessionContext.getXMLLang(),
                                                           "could not process incoming stanza",
                                                           receivedStanza);
@@ -92,7 +92,7 @@
     public void handleParsingException(SessionContext sessionContext, ParsingException e) {
         //TODO write the __right__ error response, not bad-format default only
         if (e.getErrorCondition() != ParsingErrorCondition.BAD_FORMAT) throw new RuntimeException("cannot handle this error condition yet");
-        Stanza errorStanza = ServerErrorResponses.getInstance().getError(StreamErrorCondition.BAD_FORMAT,
+        Stanza errorStanza = ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.BAD_FORMAT,
                 sessionContext.getXMLLang(),
                 "could not parse incoming stanza",
                 null);

Added: labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ServiceUnavailableStanzaErrorHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ServiceUnavailableStanzaErrorHandler.java?rev=647070&view=auto
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ServiceUnavailableStanzaErrorHandler.java (added)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/ServiceUnavailableStanzaErrorHandler.java Fri Apr 11 00:15:22 2008
@@ -0,0 +1,45 @@
+/***********************************************************************
+ * Copyright (c) 2006-2007 The Apache Software Foundation.             *
+ * All rights reserved.                                                *
+ * ------------------------------------------------------------------- *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you *
+ * may not use this file except in compliance with the License. You    *
+ * may obtain a copy of the License at:                                *
+ *                                                                     *
+ *     http://www.apache.org/licenses/LICENSE-2.0                      *
+ *                                                                     *
+ * Unless required by applicable law or agreed to in writing, software *
+ * distributed under the License is distributed on an "AS IS" BASIS,   *
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or     *
+ * implied.  See the License for the specific language governing       *
+ * permissions and limitations under the License.                      *
+ ***********************************************************************/
+package org.apache.vysper.xmpp.protocol;
+
+import org.apache.vysper.xmpp.server.SessionContext;
+import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
+import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
+import org.apache.vysper.xmpp.stanza.XMPPCoreStanza;
+
+/**
+ */
+public class ServiceUnavailableStanzaErrorHandler implements StanzaHandler {
+    public String getName() {
+        return "stanza_not_supported_error";
+    }
+
+    public boolean verify(Stanza stanza) {
+        return true;
+    }
+
+    public ResponseStanzaContainer execute(Stanza stanza, SessionContext sessionContext, SessionStateHolder sessionStateHolder) throws ProtocolException {
+        if (!(stanza instanceof XMPPCoreStanza)) {
+            stanza = XMPPCoreStanza.getWrapper(stanza);
+        }
+        XMPPCoreStanza coreStanza = (XMPPCoreStanza) stanza;
+        Stanza errorStanza = ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.SERVICE_UNAVAILABLE, coreStanza, StanzaErrorType.CANCEL, "namespace not supported", null, null);
+        return new ResponseStanzaContainerImpl(errorStanza);
+    }
+}

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/SessionStateHolder.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/SessionStateHolder.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/SessionStateHolder.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/SessionStateHolder.java Fri Apr 11 00:15:22 2008
@@ -33,9 +33,5 @@
     public void setState(SessionState newState) {
         currentState = newState;
         System.err.println("session state changed to = " + newState);
-if (currentState == SessionState.CLOSED) {
-    currentState = SessionState.AUTHENTICATED;    
-}        
-        System.err.println("session state changed to = " + newState);
     }
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/protocol/StanzaHandlerLookup.java Fri Apr 11 00:15:22 2008
@@ -39,6 +39,7 @@
     private IQHandler iqHandler = new IQHandler();
     private MessageHandler messageHandler = new MessageHandler();
     private PresenceHandler presenceHandler = new PresenceHandler();
+    private static final ServiceUnavailableStanzaErrorHandler SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER = new ServiceUnavailableStanzaErrorHandler();
 
     public void addDictionary(NamespaceHandlerDictionary namespaceHandlerDictionary) {
         String namespace = namespaceHandlerDictionary.getNamespaceURI();
@@ -101,13 +102,14 @@
         String namespace = xmlElement.getVerifier().getUniqueXMLNSValue();
         NamespaceHandlerDictionary namespaceHandlerDictionary = dictionaries.get(namespace);
 
+        // another try to get a dictionary
         if (namespaceHandlerDictionary == null) {
             namespace = xmlElement.getNamespace();
             namespaceHandlerDictionary = dictionaries.get(namespace);
         } 
         if (namespaceHandlerDictionary != null) return namespaceHandlerDictionary.get(stanza); 
 
-        return null;
+        return SERVICE_UNAVAILABLE_STANZA_ERROR_HANDLER;
     }
 
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java Fri Apr 11 00:15:22 2008
@@ -44,7 +44,7 @@
         // empty
     }
 
-    public Stanza getError(StreamErrorCondition definedErrorCondition, String languageCode, String descriptiveText, XMLElement applicationSpecificError) {
+    public Stanza getStreamError(StreamErrorCondition definedErrorCondition, String languageCode, String descriptiveText, XMLElement applicationSpecificError) {
 
         /*
            <stream:jabber>
@@ -81,20 +81,20 @@
 
     /**
      * TODO move to a more general error handling
+     * @param errorCondition - corresponds to one of the defined stanza error conditions
      * @param stanza
      * @param type
-     * @param errorCondition - corresponds to one of the defined stanza error conditions
      * @param errorText - is optional together with errorLang, both together might be NULL
      * @param errorLang - must be present, if errorText is not NULL
      * @param errorConditionElement - optional application specific error condition element
      * @return error response stanza
      */
-    public Stanza getErrorResponse(XMPPCoreStanza stanza, StanzaErrorType type, StanzaErrorCondition errorCondition,
-                                   String errorText, String errorLang,
-                                   XMLElement errorConditionElement) {
+    public Stanza getStanzaError(StanzaErrorCondition errorCondition, XMPPCoreStanza stanza, StanzaErrorType type,
+                                 String errorText, String errorLang,
+                                 XMLElement errorConditionElement) {
 
         if ("error".equals(stanza.getType())) {
-            return ServerErrorResponses.getInstance().getError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE, errorLang,
+            return ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE, errorLang,
                                                                "cannot respond to IQ stanza of type error with the same", null);
         }
 

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/writer/DenseStanzaLogRenderer.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/writer/DenseStanzaLogRenderer.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/writer/DenseStanzaLogRenderer.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/writer/DenseStanzaLogRenderer.java Fri Apr 11 00:15:22 2008
@@ -66,7 +66,10 @@
         IQStanza iq = (IQStanza) XMPPCoreStanza.getWrapper((Stanza) stanza);
         renderAttribute(stringBuilder, iq, "id");
         renderAttribute(stringBuilder, iq, "type");
-        if (firstInnerElement != null) stringBuilder.append(ELEMENT_SEPARATOR).append(firstInnerElement.getName());
+        if (firstInnerElement != null) {
+            stringBuilder.append(ELEMENT_SEPARATOR).append(firstInnerElement.getName());
+            renderAttribute(stringBuilder, firstInnerElement, "xmlns");
+        }
     }
 
     private static void renderAuth(StringBuilder stringBuilder, XMLElement stanza, XMLElement firstInnerElement) {

Modified: labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java?rev=647070&r1=647069&r2=647070&view=diff
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java (original)
+++ labs/vysper/src/test/java/org/apache/vysper/smack/BasicClient.java Fri Apr 11 00:15:22 2008
@@ -16,19 +16,25 @@
  ***********************************************************************/
 package org.apache.vysper.smack;
 
+import org.jivesoftware.smack.Chat;
 import org.jivesoftware.smack.ConnectionConfiguration;
+import org.jivesoftware.smack.MessageListener;
 import org.jivesoftware.smack.SASLAuthentication;
 import org.jivesoftware.smack.XMPPConnection;
 import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smack.MessageListener;
-import org.jivesoftware.smack.Chat;
 import org.jivesoftware.smack.packet.Message;
 
+import java.util.Date;
+import java.util.Random;
+
 /**
  */
 public class BasicClient {
     public static void main(String[] args) throws XMPPException {
 
+        String me = args[0];
+        String to = args[1];
+        
         try {
             ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration("localhost");
 //            ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration("xmpp.eu");
@@ -48,15 +54,18 @@
 
 //            if (!saslAuthentication.isAuthenticated()) return;
             
-            connection.login("user1@vysper.org", "password1");
-/*
-            Chat chat = connection.getChatManager().createChat("user2@vysper.org", new MessageListener() {
+            connection.login(me + "@vysper.org", "password1");
+
+            Chat chat = connection.getChatManager().createChat(to + "@vysper.org", new MessageListener() {
                 public void processMessage(Chat chat, Message message) { 
-                    System.out.println("log received message: " + message); } 
-                 }); 
-            chat.sendMessage("Hello Vysper!"); 
-*/
-            connection.disconnect(); 
+                    System.out.println("log received message: " + message.getBody()); } 
+                 });
+            while (true) {
+                chat.sendMessage("Hello " + to + " at " + new Date());
+                try { Thread.sleep((new Random().nextInt(9)+1)*1000 ); } catch (InterruptedException e) { ; }
+            }
+
+            //connection.disconnect(); 
         } catch (Throwable e) {
             e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org