Почему все примеры скрученных / wokkel xmpp игнорируют правильное использование JID в протоколе xmpp?

Ладно, это не вопрос. Все примеры воккеля и твистинга, которые я видел, неправильно отслеживают сгенерированные ресурсы в JID.

Клиенты Google Talk, созданные с использованием wokkel/twisted, обычно ломаются, потому что они не устанавливают полный JID для ответов, что приводит к (очень скрытым, низкоуровневым) ошибкам, таким как:

<message to="[email protected]" from="[email protected]/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, иначе некоторые серверы не понравятся вам, и вы будете рвать на себе все волосы и плакать.


person user238116    schedule 24.12.2009    source источник
comment
Вы можете героически сохранить этот вопрос, начав с вопроса (Как сделать так, чтобы код Wokkel из этого примера не ругался при использовании gtalk, см. эту странную ошибку) и вашего кода вместе с пакетами отправки/получения xmpp. Затем ответьте на свой вопрос тем, что вы уже выяснили в self.parent.authenticator.jid.full(). Тогда у вас есть рекомендательный вопрос/ответ, а не разглагольствования.   -  person A. R. Diederich    schedule 29.12.2009


Ответы (2)


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

person Ralph Meijer    schedule 07.04.2010

Согласно моему эксперименту, это не 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)
person victorx    schedule 22.12.2013