On Fri Feb 15 20:16:32 2008, Tony Finch wrote:
(1) In XMPP the client speaks first. This is a win for XMPP compared to SMTP, since it allows the client to piggyback useful information in the first data-carrying packet of the TCP connection. SMTP requires evil hacks to persuade paranoid servers not to reject clients that want to speak
earlier than is traditional.


Not evil, just misunderstood. :-)

For really tight optimisation, I expect the trickiest part will be dealing with the stream restart after SASL negotiation, especially when there is a failure. The simplest solution is to require a round trip at that point. Otherwise you'd have to introduce a new error response to deal gracefully with what looks to the server like an attempt to nest streams after a SASL failure, when the client expected a stream restart after a SASL success.


Or you simply tell clients they MUST NOT attempt pipelining without reasonable grounds for knowing the authentication will succeed.

I think my nefarious use of EXTERNAL+TLS session resume essentially requires a round-trip before, whereas PLAIN would need a previous authentication success, and DIGEST-MD5 fast-reauth would need a round-trip during.


Resource binding is interesting because either end can choose the
resource. It's much easier to pipeline if the client specifies it, since that means it doesn't have to wait for information from the server. How
common is it for clients to let servers choose their resource?
Latency-sensitive clients should be encouraged not to.


There's also the odd case where a client attempts to use a pre-existing resource and conflicts, or where the client specifies the resource but the server overrides.

These sorts of things are policy/implementation issues, though - I think we could have a child element or two of the bind feature that will allow clients to know, a priori, what to expect.


The pipelined session above is 4 round trips, compared to 8 in 3920bis section 10. It could be reduced to 3 with a TLS session cache. If you are willing to specify some stunt buffer handling then it is possible to shift the TLS hello into the client's first packet and save another round trip. However this requires some really quite tricky juggling of the XML and TLS
layering which might not even be possible on many platforms.


Stunt buffering - and that's a great term - is not always easy, especially with XML processing. A lot of XMPP implementations handle the XML streams by pushing buffers directly into the XML parser, and unless the XML parser tells the application exactly where each element ends, things are going to get unpleasant.

It's also tricky because many TLS implementations either explicitly must use the socket directly, or are very much easiest in that mode. (Example: OpenSSL is a lot easier to use with sockets, and many bindings only support this mode. I added buffering support to my fork of PyOpenSSL, so it's possible to do stunt buffering in Python, at least, but this probably won't help the average mobile handset).

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