【问题标题】:Why do all twisted/wokkel xmpp examples ignore the proper usage of JID in the xmpp protocol?为什么所有的 twisted/wokkel xmpp 示例都忽略了 xmpp 协议中 JID 的正确使用?
【发布时间】:2009-12-24 07:43:45
【问题描述】:

好的,这不是问题。我看到的所有 wokkel 和 twisted 的例子都没有正确观察 JID 中生成的资源。

使用 wokkel/twisted 构建的 Google Talk 客户端通常会中断,因为它们没有在响应中设置完整的 JID,从而导致(非常隐藏、低级别)错误,例如:

<message to="example@gmail.com" from="example2@synthasite.com/Example2C2F32A1" type="error"><body>echo: None</body><error code="400" type="modify"><bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">If set, the 'from' attribute must be set to the user's full JID.</text></error></message>

可以在协议处理程序中从 self.parent.authenticator.jid.full() 获取完整的、服务器发出的 jid

因此,在发送消息时,请确保您在 from 字段中使用完整的 jid,否则某些服务器会不喜欢您,您会拔出所有头发,然后哭泣。

【问题讨论】:

  • 你可以从一个问题开始(How can I make this example wokkel code not barf when using gtalk,看到这个奇怪的错误)和你的代码以及发送/接收 xmpp 数据包.然后用你已经在 self.parent.authenticator.jid.full() 中找到的内容回答你的问题。然后你有一个可参考的问题/答案,而不是咆哮。

标签: python xmpp twisted google-talk


【解决方案1】:

在这种特殊情况下,对非问题的更好回答是您根本不应该设置发件人地址。每个服务器都会很乐意为您填补空白,让您不必弄清楚您的客户端拥有什么 JID。

【讨论】:

    【解决方案2】:

    根据我的实验,不是self.parent.authenticator.jid.full(),而是self.parent.jid.full()。代码 sn-p 如下

            reply = toResponse(msg, msg.getAttribute('type'))
            reply.addElement('body', content=unicode(msg.body))
            reply["from"] = self.parent.jid.full()
            self.send(reply)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-10
      • 2012-05-23
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多