[ 
https://issues.apache.org/jira/browse/VYSPER-254?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12924205#action_12924205
 ] 

Niklas Gustavsson commented on VYSPER-254:
------------------------------------------

Proposed patch:

Index: 
src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java
===================================================================
--- 
src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java  
    (revision
991211)
+++ 
src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java  
    (working
copy)
@@ -64,7 +64,7 @@

        if (languageCode == null)
            languageCode = "en_US";
-        StanzaBuilder stanzaBuilder = new StanzaBuilder("error");
+        StanzaBuilder stanzaBuilder = new StanzaBuilder("error",
NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STREAMS);

        stanzaBuilder.startInnerElement(definedErrorCondition.value(),

NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STREAMS).endInnerElement();
Index: src/main/java/org/apache/vysper/mina/XmppIoHandlerAdapter.java
===================================================================
--- src/main/java/org/apache/vysper/mina/XmppIoHandlerAdapter.java      
(revision
991211)
+++ src/main/java/org/apache/vysper/mina/XmppIoHandlerAdapter.java      (working
copy)
@@ -22,14 +22,18 @@
 import org.apache.mina.core.service.IoHandler;
 import org.apache.mina.core.session.IdleStatus;
 import org.apache.mina.core.session.IoSession;
+import org.apache.mina.core.write.WriteToClosedSessionException;
 import org.apache.mina.filter.ssl.SslFilter;
 import org.apache.vysper.xml.fragment.XMLText;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.protocol.StreamErrorCondition;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
+import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.xml.sax.SAXParseException;

 /**
 *
@@ -109,7 +113,7 @@
    public void sessionClosed(IoSession ioSession) throws Exception {
        SessionContext sessionContext = extractSession(ioSession);
        String sessionId = "UNKNOWN";
-        if (sessionContext != null) {
+        if (sessionContext != null && ioSession.isConnected()) {
            sessionId = sessionContext.getSessionId();
            
sessionContext.endSession(SessionContext.SessionTerminationCause.CONNECTION_ABORT);
        }
@@ -122,6 +126,23 @@
    }

    public void exceptionCaught(IoSession ioSession, Throwable
throwable) throws Exception {
-        logger.warn("error caught on transportation layer: {}", throwable);
+        SessionContext sessionContext = extractSession(ioSession);
+
+        Stanza errorStanza;
+        if(throwable.getCause() != null && throwable.getCause()
instanceof SAXParseException) {
+            logger.info("Client sent not well-formed XML, closing
session: {}", throwable);
+            errorStanza =
ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.XML_NOT_WELL_FORMED,
+                    sessionContext.getXMLLang(), "Stanza not
well-formed", null);
+        } else if(throwable instanceof WriteToClosedSessionException) {
+            // ignore
+            return;
+        } else {
+            logger.warn("error caught on transportation layer: {}", throwable);
+            errorStanza =
ServerErrorResponses.getInstance().getStreamError(StreamErrorCondition.UNDEFINED_CONDITION,
+                    sessionContext.getXMLLang(), "Unknown error", null);
+
+        }
+        sessionContext.getResponseWriter().write(errorStanza);
+        
sessionContext.endSession(SessionContext.SessionTerminationCause.STREAM_ERROR);
    }
 }
Index: src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java
===================================================================
--- src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java  
(revision
991211)
+++ src/main/java/org/apache/vysper/mina/MinaBackedSessionContext.java  (working
copy)
@@ -93,7 +93,8 @@
    public void close() {
        logger.info("session will be closed now");
        closeFuture.setClosed();
-        minaSession.close();
+        minaSession.close(false);
+        logger.info("session closed");
    }

    public void operationComplete(IoFuture ioFuture) {

> Disconnect on not-well-formed stanza
> ------------------------------------
>
>                 Key: VYSPER-254
>                 URL: https://issues.apache.org/jira/browse/VYSPER-254
>             Project: VYSPER
>          Issue Type: Bug
>          Components: connection handshake
>            Reporter: Bernd Fondermann
>
> The spec mandates to terminate the connection when not-wellformed stanzas are 
> encountered

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to