我正在编写一个必须通过 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"}]}]