在XMPP中查询状态

在XMPP中查询状态,xmpp,user-presence,Xmpp,User Presence,默认情况下,XMPP状态将发布给所有订阅该用户的用户。有没有可能发送一些类似iq呼叫的信息来获取我名册上没有的id的状态标签?我不这么认为。请参阅第5.1.3节中的。具体来说,它说: 在收到来自用户的状态探测后,联系人的服务器 答复如下: 如果用户不在订阅联系人的花名册中 “从”、“从+待处理”或“两者”的状态(如定义 在订阅状态(第9节)下,联系人的服务器 必须 返回类型为“error”的状态节以响应 状态探测器 您可能会在响应中遇到错误或被禁止。否 状态是订阅的,而不是查询的。等你拿到那张

默认情况下,XMPP状态将发布给所有订阅该用户的用户。有没有可能发送一些类似iq呼叫的信息来获取我名册上没有的id的状态标签?

我不这么认为。请参阅第5.1.3节中的。具体来说,它说:

在收到来自用户的状态探测后,联系人的服务器
答复如下:

如果用户不在订阅联系人的花名册中 “从”、“从+待处理”或“两者”的状态(如定义 在订阅状态(第9节)下,联系人的服务器 必须 返回类型为“error”的状态节以响应 状态探测器

您可能会在响应中遇到错误或被禁止。

  • 状态是订阅的,而不是查询的。等你拿到那张支票的时候 如果回答您的问题,信息将过时
  • 在场是个人信息。您必须获得联系人的明确授权才能查看

rfc说,您不允许接收不在您名册上的id的出席


但是我相信,通过修改服务器(如果有一个xmpp服务器允许)可以查询状态。

如果您想知道一个xmpp实体是否连接,可以使用xmpp Ping()。下面给出了两个xmpp用户“user1”和“user2”的示例。他们彼此都不在烘焙者名单上。我在下面的例子中使用ejabberd和PSI

  • “user2”pings“user1”(user1处于联机状态)
智商:

<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="result" xml:lang="en" to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" />
<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="error" xml:lang="en"     to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" >
<ping xmlns="urn:xmpp:ping"/>
<error type="cancel" code="503" >
<service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>

响应:

<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="result" xml:lang="en" to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" />
<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="error" xml:lang="en"     to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" >
<ping xmlns="urn:xmpp:ping"/>
<error type="cancel" code="503" >
<service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>


  • “user2”pings“user1”(user1处于脱机状态。ping的响应导致type=error)
智商:

<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="result" xml:lang="en" to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" />
<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="error" xml:lang="en"     to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" >
<ping xmlns="urn:xmpp:ping"/>
<error type="cancel" code="503" >
<service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>

响应:

<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="result" xml:lang="en" to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" />
<iq from='user2@pdevdv3os18f.corp.intuit.net' 
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="error" xml:lang="en"     to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" >
<ping xmlns="urn:xmpp:ping"/>
<error type="cancel" code="503" >
<service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>

值得注意的是,只有当您还拥有user2资源时,这才有效,在某些情况下,这是未知的。