1

我正在编写一个必须通过 BOSH 连接到 XMPP 服务器的 J2ME 客户端。我使用的服务器是 ejabberd。

我还有两个通过 BOSH 成功连接到服务器的应用程序。一个是 flash(xiff 库),另一个是 javascript(strophe)。

我的 J2ME 代码设法完成所有操作,直到它必须使用带有 restart="true" 属性的 body 标记重新启动流。

ejabberd 服务器此时未能发回流启动消息,而是发送了 internal-server-error。

我拥有的 java 代码生成与上述两个库相同的消息。从我在 ejabberd 代码中看到的内容来看,流重新启动 BOSH 消息和流功能消息正在分别发送以响应我的流重新启动请求,而它同时从其他两个库发送。

有没有人见过这种行为?我错过了什么?

以下是 BOSH 对话相关部分的简短日志。

[0][OUT] <body rid='1367396715' sid='fe67e7de6f99df688caa5b1977428f59a23bbb9b' xmlns='http://jabber.org/protocol/httpbind'><response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/></body>
[1][IN ] <body xmlns='http://jabber.org/protocol/httpbind'><success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/></body>
---SUCCESS!
Restarting stream
[1][OUT] <body rid='1367396716' sid='fe67e7de6f99df688caa5b1977428f59a23bbb9b' xmlns='http://jabber.org/protocol/httpbind' xml:lang='en' xmpp:restart='true' xmlns:xmpp='urn:xmpp:xbosh' to='test.wildeboom.com'/>
[0][IN ] <body xmlns='http://jabber.org/protocol/httpbind'/>
[1][IN ] <body type='terminate' condition='internal-server-error' xmlns='http://jabber.org/protocol/httpbind'/>

ejabberd 日志文件具有以下流重新启动消息。请注意,它没有附加流功能。流特征消息单独排队但发送失败。对于其他库,此消息附加了一个流特征元素。

D(<0.741.0>:ejabberd_http_bind:927) : ===[BIND]prepare_response OutPacket: 
[{xmlstreamstart,
"stream:stream",
[{"version",
  "1.0"},
 {"xml:lang",
  "en"},
 {"xmlns",
  "jabber:client"},
 {"xmlns:stream",
  "http://etherx.jabber.org/streams"},
 {"id",
  "1974251422"},
 {"from",
  "test.wildeboom.com"}]}]
4

0 回答 0