BOSH 経由で XMPP サーバーに接続する必要がある J2ME クライアントを作成しています。私が使用しているサーバーは ejabberd です。
BOSH経由でサーバーに正常に接続する他の2つのアプリケーションがあります。1 つは flash (xiff ライブラリ) で、もう 1 つは javascript (strophe) です。
私の J2ME コードは、restart="true" 属性を持つ body タグを使用してストリームを再起動する必要があるところまで、すべてを管理しています。
ejabberd サーバーは、この時点でストリーム開始メッセージの返送に失敗しますが、代わりに internal-server-error を送信します。
私が持っている Java コードは、上記の 2 つのライブラリと同じメッセージを生成します。ejabberd コードで確認したところ、ストリーム再起動の BOSH メッセージとストリーム機能メッセージは、ストリーム再起動要求に応じて別々に送信されていますが、他の 2 つのライブラリからは同時に送信されています。
この種の行動を見た人はいますか?私は何が欠けていますか?
以下は、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"}]}]