Allow external components to bind more than one domain
Description
JEP-114 (http://www.jabber.org/jeps/jep-0114.html) only allows one domain to be registered by an external component. The domain is specified in the TO attribute of the intial stream header. Therefore, if an external component needs to bind many domains then the component will need to establish many connections with the server.
. Components will still have to send in the TO attrinbute of the stream header the initial domain for the component. . Components can bind more domains by sending <bind> stanzas . New domains have to be under the intial domain. Eg. Initial domain=aim.myserver.com, extra domain should be = conference.aim.myserver.com. Otherwise a forbidden error will be returned . The server will send a disco request to the new domain and if the component supports disco at the new domain then the new domain will be listed in the disco#items of the server
Example 1. Component sends stream header to server <stream:stream xmlns='jabber:component:accept' xmlns:stream='http://etherx.jabber.org/streams' to='aim.myserver.com'>
Example of successful binding: C: <bind name='conference.aim.myserver.com'/> S: <bind/>
Example of failed binding: C: <bind name='conference.aim.myserver.com'/> S: <bind name='conference.aim.myserver.com'/> S: <error type='cancel'> S: <conflict xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> S: </error> S: <bind/>
Possible errors are: Code Meaning 400 The "name" attribute is missing or invalid 403 The component is not authorised to bind using this name and/or options 409 The name that is already bound
JEP-114 (http://www.jabber.org/jeps/jep-0114.html) only allows one domain to be registered by an external component. The domain is specified in the TO attribute of the intial stream header. Therefore, if an external component needs to bind many domains then the component will need to establish many connections with the server.
Based on Jabberd2 component proto-JEP (http://jabberd.jabberstudio.org/dev/docs/component.shtml#sect-id2593096) we can extend our current implementation to let an external component using one connection to bind many domains.
This is the spec we are following:
. Components will still have to send in the TO attrinbute of the stream header the initial domain for the component.
. Components can bind more domains by sending <bind> stanzas
. New domains have to be under the intial domain. Eg. Initial domain=aim.myserver.com, extra domain should be = conference.aim.myserver.com. Otherwise a forbidden error will be returned
. The server will send a disco request to the new domain and if the component supports disco at the new domain then the new domain will be listed in the disco#items of the server
Example 1. Component sends stream header to server
<stream:stream
xmlns='jabber:component:accept'
xmlns:stream='http://etherx.jabber.org/streams'
to='aim.myserver.com'>
Example of successful binding:
C: <bind name='conference.aim.myserver.com'/>
S: <bind/>
Example of failed binding:
C: <bind name='conference.aim.myserver.com'/>
S: <bind name='conference.aim.myserver.com'/>
S: <error type='cancel'>
S: <conflict xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
S: </error>
S: <bind/>
Possible errors are:
Code Meaning
400 The "name" attribute is missing or invalid
403 The component is not authorised to bind using this name and/or options
409 The name that is already bound