[Standards] querying for random services

Mridul Muralidharan mridul at sun.com
Tue May 8 19:01:33 UTC 2007

We do something similar for case of searching for conferences.
You send a query with the filter in an x-data form (used to be in the 
node for the disco#items, but some servers were barfing on that) and 
response would be a list of disco info's with jid of the item as an 
Not exactly same, but similar idea.


Peter Saint-Andre wrote:
> As discussed in the STUN server discovery thread, it would be nice to 
> ask your XMPP server which STUN servers it knows about.
> But why limit it to STUN? You might also want to ask your XMPP server 
> about the pubsub services or bytestreams proxies or Teredo services 
> (etc.) it knows about.
> Granted you can find this out by sending a disco#items request and 
> receiving a list of everything out there, but what if you only want to 
> know about STUN servers and nothing else?
> Based on discussions in the jdev room and offlist emails, I've been 
> thinking about something like this:
> <iq type='get' from='bard at shakespeare.lit/globe' to='shakespeare.lit' 
> id='gotstun'>
>   <query xmlns='http://jabber.org/protocol/disco#items'
> node='http://jabber.org/protocol/disco#info?category=server;type=stun'/>
> </iq>
> That is, "please send me one disco item for each STUN server you know 
> about". (I'm not wedded to that node syntax, but we need something that 
> enables you to specify the kinds of entities you want to match.)
> Then, using XEP-0030 and XEP-0128, the server replies:
> <iq type='result' from='shakespeare.lit' to='bard at shakespeare.lit/globe' 
> id='gotstun'>
>   <query xmlns='http://jabber.org/protocol/disco#items'>
>     <item jid='not-sure-what-the-jid-is!'>
>       <x xmlns='jabber:x:data' type='result'>
>         <field var='FORM_TYPE' type='hidden'>
>           <value>http://www.xmpp.org/extensions/xep-xxxx.html#ns</value>
>         </field>
>         <field var='host'>
>           <value>stun.shakespeare.lit</value>
>         </field>
>         <field var='port'>
>           <value>9999</value>
>         </field>
>         <field var='username'>
>           <value>someusername</value>
>         </field>
>         <field var='password'>
>           <value>somepassword</value>
>         </field>
>       </x>
>     </item>
>   </query>
> </iq>
> The nice thing is, this gives us a generic approach so that we don't 
> have one protocol for finding STUN servers, another for finding Teredo 
> services, another for finding pubsub services, etc.
> Note that this enables queries only based on identity -- i.e., the 
> category and type specified in the following registry:
> http://www.xmpp.org/registrar/disco-categories.html
> But it's easy enough to add new identities to that registry.
> One aspect I'm not sure of is: what does the XMPP server return as the 
> JID of a service that is not accessible via XMPP (such as a STUN 
> server)? Presumably it would return the JID of the XMPP server itself.
> Thoughts?
> Peter

More information about the Standards mailing list