Specifying clients as query targets
Many of these namespaces qualify queries that make just as much sense sent to a Jabber client as sent to a Jabber server or service. However, if you don’t compose the recipient JID correctly, you could end up with an unexpected response.
Let’s say you want to query the local time on Piers’ client, which is connected to the Jabber server at jabber.org:
SEND: <iq type='get' id='time_21' to='piers@jabber.org'>
<query xmlns='jabber:iq:time'/>
</iq>
You could get a response similar to this:
RECV: <iq type='error' id='time_21' from='piers@jabber.org'
to='qmacro@jabber.org/home'>
<query xmlns='jabber:iq:time'/>
<error code='503'>Service Unavailable</error>
</iq>
Why? This query isn’t addressed to a particular
client or session. While
<message/> elements can be
addressed to a user JID in the form
username@hostname
and will be sent to the “primary” session according to presence priority,
the recipients of <iq/> elements
must be specified exactly. As we want to find out the time at Piers’ client,
which has the associated resource desktop,
we must specify that resource in the JID:
SEND: <iq type='get' id='time_21' to='piers@jabber.org/desktop'> <query xmlns='jabber:iq:time'/> </iq>
This will give us the response we’re looking for:
RECV: <iq type='result' id='time_21' to='qmacro@jabber/home'
from='piers@jabber.org/desktop'>
<query xmlns='jabber:iq:time'/> <utc>20010520T11:25:58</utc> <tz>CET</tz> <display>Sun May 20 13:25:58 2001</display> </query> ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access