Re: draft-cridland-xmpp-session-00

Kevin Smith <[email protected]> Tue, 10 Jun 2014 09:33:58 +0100
Newsgroups gmane.ietf.xmpp
Message-ID <CAOb_FnxHhbxDB2He8c1F=ZSGQecYa2fgwSUPL7=p9oweZ9S8Nw@mail.gmail.com>
On Tue, Jun 10, 2014 at 9:26 AM, Ralph Meijer <[email protected]> wrote:
> On 2014-06-10 10:07, Kevin Smith wrote:
>> On Tue, Jun 10, 2014 at 8:43 AM, Dave Cridland <[email protected]> wrote:
>>>> This draft will require servers and client changes, you could accomplish
>>>> the same goal by a pure informational draft pointing such features are
>>>> optional. Then only certain clients need to change. Note: Good clients like
>>>> Swift already ignore the session feature.
>>>>
>>>
>>> Then it's not a good client - the session feature, if advertised, is
>>> mandatory.
>>
>> Yeah, I don't believe this is true. Swift treats the session start as
>> unnecessary, but if it's offered by the server it'll negotiate it. The
>> relevant code is splattered around
>> http://swift.im/git/swift/tree/Swiften/Client/ClientSession.cpp
>
> Oh, but it is. RFC 3921 says, section 3 says:
>
>     Upon being so informed that session establishment is required [*]
>     (and after completing resource binding), the client MUST establish
>     a session [..]
>
> [*] The part above that shows the stream feature being advertised, and
> because of that wording I believe it implies that advertising Session
> Establishment makes it required.
>
> Then RFC 6121 only mentions that the protocol is unnecessary (Appendix
> E), but doesn't explicitly make it optional when advertised. I.e. it
> doesn't change the protocol, just doesn't document it any more.

You've said it's true that Swift's a bad client, then described
exactly what I said Swift does as being what a good client should do
:p

>>> So if you remove the <optional/> marker from M-Link, every
>>> conforming client has to negotiate it.
>>
>> Every 3920/1 client, that is, rather than every 6120/1 client. yes?
>
> I think you will find there are no pure forms of either, in reality.

True.

>>> You can't claim that if it's RFC 6121
>>> only then it's exempt, because then certain servers won't work (I think
>>> ejabberd is one that actually requires the <session/>, in line with RFC
>>> 3921).
>>
>> Right. Clients still need to implement this for old servers (I assume
>> modern ejabberd /doesn't/ require this, but very old versions are
>> undoubtedly out in the wild).
>
> I disagree. Clients only need to implement this if they want to benefit
> from the removal of a roundtrip with servers advertising this flag.

'this' in this case being session establishment, not optional.

> As I said before, adding this flag makes the client *choose* to not
> negotiate Session Establishment, therefore making it optional. I don't
> really care for renaming this with existing implementations (like your
> own) already having this deployed in the field. I don't think it does
> anyone a favour, except protocol purists. I do agree <optional/> should
> mean 'SHOULD NOT negotiate'.

Well, protocol purists and potentially future implementers. I don't
think it's impossible that using 2119 language in protocol to mean
something very different from the 2119 meanings could cause
significant confusion.

But I'm not set against this, as I said earlier, I just wanted to
broach the question of doing the 'right' thing before we decide to
standardise the status quo.

>> If we have to do this, we should probably add some text that
>> <optional/> is only used in the context of session startup.
>
> I'm not sure what you mean here. To be sure, this flag is only being
> defined for this namespace / stream feature.

Yes. I think this is worth being explicit about.

/K