[
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.