[Twisted-Python] xmlstream problem

Alvin Delagon adelagon at gmail.com
Tue May 20 13:50:59 EDT 2008


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 at 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 at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>



-- 
http://www.alvinatorsplayground.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20080521/ff4e23e5/attachment.htm 


More information about the Twisted-Python mailing list