On Aug 14, 2014, at 1:03 PM, Dave Cridland <[email protected]> wrote:
> On 14 August 2014 20:57, Kurt Zeilenga <[email protected]> wrote: > > On Aug 14, 2014, at 12:33 PM, Dave Cridland <[email protected]> wrote: > >> On 14 August 2014 18:12, Kurt Zeilenga <[email protected]> wrote: >> While XEP 298 does say: >> The namespace of the forwarded stanza MUST be preserved (this is typically >> 'jabber:client'). If no 'xmlns' is set for the stanza then as per XML >> namespacing rules it would inherit the 'urn:xmpp:forward:0' namespace, which >> is wrong. >> >> This, by itself, is insufficient to ensure all relevant namespaces of the >> original stanza are preserved. Any namespaces of the stream which the >> original message was received on, as well those of the original stanza need >> to preserved if used in the original stanza, need to preserved. Also, >> lang tags should preserved. >> >> >> I agree that we need to ensure that all relevant namespaces are preserved. >> I'm in general agreement about xml:lang, but I'd note that servers should >> really be preserving this on routing anyway, and don't. > > Because it's a PITA. :-) > > > Sure. But why is it suddenly important here? Because I happen to be working on both xml:lang support in a server including in messaging archiving. > >> >> One way to do this is for the forwarded to copy all the name space >> declarations of the stream the original message was received into the >> forward element, use a prefix for the 'urn:xmpp:forward:0' which doesn't >> clash, and copy all prefixes of the original message with the original >> message, using the same prefixes as on the stream it was received on. >> >> This seems rather ham-handed, and also restricted to implementations which >> are aware of the prefixes used, and the namespaces declared. I also don't >> think it's ever needed. > > First, I think we need to separate the general requirements on namespace and > language preservation from a suggestion of how on might implement said > requirement. > > >> >> >> So, for instance, if one received: >> >> <stream:stream >> from='[email protected]' >> to='im.example.com' >> version='1.0' >> xml:lang='en' >> xmlns='jabber:client' >> xmlns:stream='http://etherx.jabber.org/streams'> >> <message> >> <body>foo</body> >> </message> >> </stream:stream> >> >> >> The element to be forwarded (inside a suitable message element) would be: >> >> <forwarded:forwarded xmlns:forwarded='urn:xmpp:forward:0 >> >> >> xml:lang='en' >> xmlns='jabber:client' >> xmlns:stream='http://etherx.jabber.org/streams'> >> <message> >> <body>foo</body> >> </message> >> </forwarded:forwarded> >> >> >> Including the stream namespace here seems of no value. > > Depends on whether the stream namespace is used anywhere in the original > stanza. While one could examine the original stanza to determine if the > namespace is used, my suggested approach was written under the assumption > that the implementation is far more likely to blindly copy all or portions of > the original element into the <forwarded/> element without such examination. > Many implementations avoid going "deep" into stanzas. > > > Is the stream namespace even possible to use within a stanza? I can't think > of a case where it might be. Possible? We're talking XML! Which is the problem, the content of a <message/> is unrestricted. If someone wants to re-use some item of stream schema in their extension, they can. To say they cannot, well, would be really odd from an XML perspective. > >> >> If an implementation has declared other namespaces at the stream level - and >> I vaguely recall some Blackberry client doing this - then the client is >> wrong - RFC 6120 $4.8.5, last paragraph. > > My suggestion was based on the fact that namespace for the stanza could be in > the stream element or in the stanza element. > > > The content namespace might be in either just the stream header, or the > stanza too, but it's always the default namespace, which means it's trivial > to locate. >> >> Or if one received: >> >> >> <stream >> from='[email protected]' >> to='im.example.com' >> version='1.0' >> xml:lang='en' >> xmlns='http://etherx.jabber.org/streams'> >> <message xmlns='jabber:client'> >> <body>foo</body> >> </message> >> </stream> >> >> <forwarded:forwarded xmlns:forwarded='urn:xmpp:forward:0'xml:lang='en' >> >> >> xml:lang='en' >> xmlns='http://etherx.jabber.org/streams'> >> >> >> <message xmlns='jabber:client'> >> <body>foo</body> >> </message> >> </forwarded:forwarded> >> >> >> No, the content namespace MUST be without prefix, and MUST be declared as >> such in the stream header, so this is invalid too. > > Note here that I'm providing a forwarded element that is to placed inside a > <message/> element. And per paragraph you just referenced, belong in stanza > not the stream header. Or maybe I'm confused as to what you are complaining > about here. > > The stream open MUST contain the content namespace, which MUST be the default > namespace. The stream open given in this example is invalid, since it doesn't > declare a content namespace (or, depending how you squit, does, but it's an > invalid one). That example is straight from RFC 6120, section 4.8.2. I think you miss the "Alternatively" to the MUST you quote. > > Dave.
