Forgive me for sounding like an idiot, but I seem to be missing the point here:

On Mon Nov  5 17:45:53 2007, Rachel Blackman wrote:
Expat (a fairly common XML parser out there) will do the job just fine. Your network engine has to separate each stanza out, sure, but that's not hard. And then you can pass each stanza unaltered through expat and get back your usual XML structures.

Is this saying that given a string containing multiple stanzas, you need to seperate them out into one stanza per string, before feeding them in? I thought that with a SAX-like XML parser, you needn't bother doing that.

You would no longer be able to do that with binary blobs; you would have to special-case blob stanzas fairly heavily, since I guarantee you that if the characters '<' or '>' appear un-escaped in the binary blob, Expat will choke and die.


Sure, but there's two options with an escaping mechanism - either synchronized or non-synchronized - and they can be negotiated easily.

With a non-synch mechanism, the sender just sends out the <blob/> element, then sends out the binary data, then continues with XML. It can be done in a single TCP packet, but it requires that the receiver processes the data into stanzas prior to processing through the XML parser. Some receivers already do this, so it seems reasonable that this can be an option.

With a synch mechanism, the sender sends out a <blob/> element, and then waits. The receiver then says it's ready for binary data (sending a stanza to indicate this), and the sender then sends the binary data - followed immediately by more XML as required, since a "binary parser" is going to be octet counting anyway. For people who parse all the network traffic at once through a SAX-like parser, this should work fine, at the expense of some efficiency.

Note that anyone can send non-synchronized blobs, but not everyone can receive them, so a client (for instance) which is built to stream network data directly into a SAX parser can still *send* blobs efficiently.

If we really need a non-BASE64 method of sending binary data between clients, I suggest we re-use Jingle. That already is a mechanism for negotiation of 'I want to send you this type of data, how do I get it to you?' There's very few cases I can think of where we would want to be sending binary blobs in a server-cached manner anyway.

Server-proxied, not cached.

This implies that encrypted chat sessions don't go via the server, for example, meaning that a client intending to encrypt all conversations by default is going to use XMPP purely as a session initiation protocol, and lose all efficiency (and a degree of privacy) as a result. Or else it'll be base64 encoding the entire conversation, and lose efficiency that way.

Either way, it will directly impact the usage of encryption - and that's ignoring the other ways that binary data is commonly used within XMPP.

Dave.
--
Dave Cridland - mailto:[EMAIL PROTECTED] - xmpp:[EMAIL PROTECTED]
 - acap://acap.dave.cridland.net/byowner/user/dwd/bookmarks/
 - http://dave.cridland.net/
Infotrope Polymer - ACAP, IMAP, ESMTP, and Lemonade

Reply via email to