Почему во всех примерах twisted / wokkel xmpp игнорируется правильное использование JID в протоколе xmpp? - PullRequest
1 голос
/ 24 декабря 2009

Хорошо, это не вопрос. Все примеры Wokkel и Twisted, которые я видел, не соответствуют сгенерированным ресурсам в JID.

Клиенты Google Talk, созданные с использованием wokkel / twisted, обычно ломаются, потому что они не устанавливают полный 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>

Полный, выпущенный сервером jid может быть получен в обработчике протокола от self.parent.authenticator.jid.full ()

Итак, при отправке сообщений убедитесь, что вы используете полный jid в поле from, иначе некоторые серверы вам не понравятся, и вы вырвете все свои волосы и будете плакать.

Ответы [ 2 ]

5 голосов
/ 07 апреля 2010

В данном конкретном случае лучшим ответом на этот вопрос является то, что вам вообще не следует устанавливать адрес отправителя. Каждый сервер с радостью заполнит этот пробел для вас, избавив вас от необходимости выяснить, какой JID у вашего клиента.

0 голосов
/ 23 декабря 2013

Согласно моему эксперименту, это не self.parent.authenticator.jid.full(), а self.parent.jid.full(). Фрагмент кода, как показано ниже

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