I don't think that the method onDocumentEnd will be triggered on that error. I assume that the received xml is invalid and the code that is disconnecting the client is on the overridden dataReceived method of xmlstream.py:
def dataReceived(self, data):
""" Called whenever data is received.
Passes the data to the XML parser. This can result in calls to the
DOM handlers. If a parse error occurs, the L{STREAM_ERROR_EVENT} event
is called to allow for cleanup actions, followed by dropping the
connection.
"""
try:
if self.rawDataInFn: self.rawDataInFn(data)
self.stream.parse(data)
except domish.ParserError:
self.dispatch(self, STREAM_ERROR_EVENT)
### Put some code here that will write the received invalid xml data to a file
self.transport.loseConnection() --> Your clients get disconnected here when sending an invalid xml
Since it's a pyExpat/domish error your client gets disconnected by the transport.loseConnection() call. I suggest that you put something under except to check if your xmpp client is sending an invalid xml.
Cheers,
Alvin
Hello,
I am using xmlstream.XmlStream to process...XML streams :-)
I'm having a bit of a problem, I have a client and a server, both protocols inherit from xmlstream.XmlStream. When the client sends 4 messages, one after another, I get a parse error. I debugged my program, and the buffer the expat parser is given contains in effect, 4 messages consecutively like so :
str: <message>...</message><message>...</message><message>...</message><message>...</message>
(I replaced the child elements with "..." for your reading enjoyment)
and I get this Exception when debugging (otherwise it stays hidden) :
ExpatError: junk after document element: line 1, column 196
now column 196 is the end of the 1st msg's root element, I think it doesn't like the next message being right after the first. I did override xmlstream.XmlStream.onDocumentEnd()
because I didn't want it to close the connection in between messages, but in my method I told it to initialize the stream using :
self._initializeStream()
I did this since I noticed that closing the connection forces a new parser to be created when the previous statement is called. The reason I don't want the connection to be closed is that I'd like a persistent connection to be held.
Does anyone know how to either have the messages given to the parser as separate messages so that it doesn't freak out?
Thank you,
Gabriel
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python