I had a (serious) think about what the issues are here, and what to do about it, over the weekend.

On Mon Aug 27 17:52:40 2007, Peter Saint-Andre wrote:
The relevant text regarding delivery of messages to bare JIDs (section
8.3.1.1 of rfc3921bis) currently reads:

   If two or more available resources have the same priority, the
   server MAY use some other rule (e.g., most recent connect time,
   most recent activity time, or highest availability as determined
   by some hierarchy of <show/> values) to choose between them or
   MAY deliver the message to all such resources.


Right, the problem being here that there's no fixed, conformant, way of doing things. It's left vague, and vague can mean non-interoperable. Note that it almost doesn't matter which of the possibilities is the "correct" way, it's simply that there can be only one. A common way of specifiying this in a more flexible manner is to say "Servers MUST do this unless configured otherwise".


As I've said before, I think that needs to be adjusted so that sending to all available resources is recommended. I suggest the following text:

   If two or more available resources have the same priority, the
   server SHOULD deliver the message to all available resources.

(Obviously, "all these resources" or something, since you don't want it delivering messages to resources with lower priority in this case).


   However, the server MAY use implementation-specific or
   deployment-specific rules (e.g., most recent connect time, most
   recent activity time, or highest availability as determined by
   some hierarchy of <show/> values) or user-configured rules (as
   specified according to a defined XMPP extension or an
   implementation-specific or deployment-specific feature) in
   determining the resource to which it will deliver the message.


This worries me because if we implement some form "intelligent routing" mechanism, then the server is then no longer "fully conformant" to the RFC, even though it's "better", because it breaks the SHOULD. And if we choose to hand-wave, then this leaves open all the concerns from the existing text.

What about something more like:

<t>If two or more available resources have the same priority, these resources are said to form a "priority tie".</t>

<t>Servers MAY support a configuration where one or more resources are removed from a tie (perhaps by noting last activity time, highest availability via &lt;show/>, or support for some future extension), but in the default configuration, no resources SHALL be removed from the tie. Servers MUST NOT remove all resources from the tie.</t>
        
<t>After such processing, if any, the message is delivered to all resources remaining in the priority tie, subject to normal rules.</t>

I ended up restating the problem here, because it seemed clearer, but the general rule is that servers, by default, broadcast to all equal-highest-priority resources, but they're allowed to have non-default configurations which do otherwise.

The last phrase in the last paragraph is worth mentioning - I couldn't immediately find anything in RFC3921, at least, which said whether servers can, or should, discount a resource before considering priority or after it.

I'd have thought that if I have a high-priority resource with a privacy list, then messages blocked by this should be routed to a lower priority resource which is willing to accept them, but I've not looked at how tricky this might be to code.

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