<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="SV" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hello<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I’ve now examined the possibility to use Jabber Components (XEP-0114) for IoT Discovery and Provisioning, but have some problems. Since it’s very hard to find documentation on this XEP, and searching the internet for
 solutions only returns pages with people having the same problems (but no solutions), I’m turning to the XSF community to see if somebody has any good input.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">First, I can mention that I can send and receive messages and iq stanzas to and from normal JIDs and a component, as long as I have the resource of the corresponding JID I want to communicate with. This is no problem,
 if the client itself initiates communication. But what if the server component needs to initiate communication? How does the server component obtain the resource(s) of a corresponding bare JID?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I’ve tried a presence probe. That only returns a not-authorized response. The reason being that otherwise, it would be a security problem, if the component was able to probe the presence of a JID, without being a friend.
 (However, sending messages and iq stanzas to the JID, if you had the resource, was OK, even without friendship.)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">The next thing I tried was to send a presence subscription to the JID from the component. This request was not received by the client, regardless if I tried with sending it from the component itself, or a virtual JID
 simulated by the component. Searching the internet, this was the response I was given: You needed to simulate accounts behind the component (using the same component domain name).<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Is there a step that needs to be taken before sending the presence subscription, for it to be routed correctly to the device?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Or is presence subscriptions somehow disabled in server components?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Or might this behave differently on different XMPP servers? (I’m using an OpenFire XMPP server to test my implementation.)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Example of communication that goes well. Here the component, given the full JID of a client, is able to perform an IQ get & receive a response:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">C: <iq from='test.clayster.cl' to='unittest@clayster.cl/2e2b3ea4' type='get' id='1'><query xmlns="http://jabber.org/protocol/disco#info"/></iq><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">S: <iq from="unittest@clayster.cl/2e2b3ea4" to="test.clayster.cl" type="result" id="1"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="client"
 type="pc" name="Clayster"/><feature var="http://jabber.org/protocol/disco#info"/><feature var="http://jabber.org/protocol/disco#items"/><feature var="jabber:iq:roster"/><feature var="jabber:iq:version"/><feature var="vcard-temp"/></query></iq><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">While, on the client side, it looks as follows:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">S: <iq from="test.clayster.cl" to="unittest@clayster.cl/2e2b3ea4" type="get" id="1"><query xmlns="http://jabber.org/protocol/disco#info"/></iq><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">C: <iq from='unittest@clayster.cl/2e2b3ea4' to='test.clayster.cl' type='result' id='1'><query xmlns="http://jabber.org/protocol/disco#info"><identity category="client"
 type="pc" name="Clayster"/><feature var="http://jabber.org/protocol/disco#info"/><feature var="http://jabber.org/protocol/disco#items"/><feature var="jabber:iq:roster"/><feature var="jabber:iq:version"/><feature var="vcard-temp"/></query></iq><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">This is how the failed attempt looks like, where the component itself makes a presence probe to retrieve the resource of a bare JID. When it fails it tries to request a subscription on presence.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">C: <presence id="dba12ec4de04b5575d1070ae730aa351" from="test.clayster.cl" to="unittest@clayster.cl" type="probe"/><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">S: <presence type="error" to="test.clayster.cl" from="unittest@clayster.cl"><error code="401" type="auth"><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">C: <presence id="dba12ec4de04b5575d1070ae730aa351" from="test.clayster.cl" to="unittest@clayster.cl" type="subscribe"/><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Nothing is received on the client side. I try the same thing, but with a simulated account behind the component domain:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">C: <presence id="e107698373251736e53678e2e4fc1a2d" from="unittest@test.clayster.cl" to="unittest@clayster.cl" type="probe"/><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">S: <presence type="error" to="unittest@test.clayster.cl" from="unittest@clayster.cl"><error code="401" type="auth"><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:8.5pt;font-family:"Courier New"">C: <presence id="e107698373251736e53678e2e4fc1a2d" from="unittest@test.clayster.cl" to="unittest@clayster.cl" type="subscribe"/><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Nothing is received by the client.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Hopefully, somebody with more insight can answer the above questions, or give other insights on how to proceed. If I can initiate communication from a server component, it would be a very good option to use in the IoT
 Discovery XEP proposal and the Provisioning XEP.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Best regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Peter Waher<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>