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


On Tue, May 20, 2008 at 11:50 PM, Gabriel Rossetti <mailing_lists@evotex.ch> wrote:
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



--
http://www.alvinatorsplayground.blogspot.com/