Openbire prebind + robbiehanson / XMPPFramework с использованием BOSH не работает - PullRequest
5 голосов
/ 15 декабря 2011

Мы пытаемся внедрить XMPP сверх BOSH для нашего продукта. Библиотека Strophe.js javascript отлично работает для наших нужд на WWW-сайте. Мы запрашиваем предварительную привязку, она доставляется, и затем мы используем метод присоединения Strophe, чтобы начать наш сеанс - тогда мы можем обновить присутствие и отправлять / получать сообщения. Что касается iOS, мы используем robbiehanson XMPPFramework, который включает транспорт BOSH, но нет метода присоединения. Ниже приведено мое горе от попыток заставить это работать.

Я делаю предварительную привязку, получаю sid / jid / rid, затем устанавливаю внутреннюю логику внутри транспорта bosh и других файлов, чтобы сказать, что мы уже подключены. Затем, если я пытаюсь обновить информацию о присутствии, включая указанный SID, я отправляю:

BOSH: ОТПРАВИТЬ [1248340729] = <присутствие> </ присутствие>

но не получайте никакого ответа. Это последнее из этого. Если я пытаюсь обновить информацию о присутствии без указания SID, я отправляю:

BOSH: ОТПРАВИТЬ [1064338700] = <присутствие> </ присутствие>

и вернитесь:

BOSH: RECD [1342811427] = <поток: функции> <механизмы xmlns =" ​​urn: ietf: параметры: xml: ns: xmpp-sasl "> <механизм> PLAIN </ механизм> </ механизмов> < сжатие xmlns = "http://jabber.org/features/compress">< method> zlib </ stream: features>

, который выглядит как подтверждение соединения или раздел запроса на соединение, ожидающий, что я отвечу информацией PLAIN - но это уже было установлено с предварительной привязкой. Если это подтверждение соединения, то следующие строки не имеют смысла. Если используется SID, указанный в строке подключения выше, как будто это подтверждение (я не уверен), это следующие строки:

BOSH: SEND [1342811427] = api

BOSH: RECD [1342811427] = http://jabber.org/protocol/httpbind'>< iq xmlns = "jabber: client" type = "error" to = "chat. *. Com / 9ef0ccdb"> api <неавторизованный xmlns = "urn: ietf: params: xml: ns: xmpp-stanzas "/>

Я не авторизован. Теперь, если я попытаюсь использовать SID, согласованный во время предварительной привязки, последние две строки будут другими:

BOSH: SEND [1172064714] = api

BOSH: RECD [1172064714] =

пустой ответ. Затем, если я попытаюсь обновить свое присутствие снова, он выдаст мне буквальную страницу 404, говорящую о том, что есть неверный SID. Когда я использовал SID, предоставленный openfire, если бы я снова попробовал обновление присутствия, оно просто продолжало бы давать мне 401 not authorized.

Любая помощь будет принята с благодарностью.

...