Android clients are disconnecting shorty after joining due to BOSH/XMPP errors

Hi there,

we are currently have a connection issue specific to android clients that are using the jitsi SDK. Clients can connect to a conference, but are disconnecting by theirself after a few seconds. Sometimes, it takes longer, up to a few minutes. In this time, the connections works totally fine, video and audio is working.

When looking into the nginx access log, we see that per client connection from android about 10 connections via /http-bind endpoint are initialized. Most of them return status 200, but some are getting a 499.

On the client side, those connections are getting received as a error 500 by strophe. If the clients gets 5 500er issues, he seems to disconnect by himself.

Jicofo and prosody logs don’t show any obvious problems. When the client disconnects, jicofo and prosody are notified about 60 seconds later, then the connection times out.


iOS Devices that are also using the SDK and connect via bosh are working totally fine. In the Nginx log we see also only 200 status codes for iOS connections.

Our setup:

  • Jitsi Version: stable-8319
  • Everything runs in containers with host network
  • Jitsi-web (nginx) is directly reachable from outside and acts as a reverse proxy for prosody.
  • Android and iOS clients are using the SDK and connect via BOSH to prosody
  • Webclients are using websocket based connection
  • To test, we are using the sdk example app GitHub - jitsi/jitsi-meet-sdk-samples: Jitsi Meet SDK examples (Android and iOS) and just insert a JWT token and our server url.

Do you have any idea why this issue is limited to android clients? And do you know where the 500 errors are coming from?

Log from Android app:

2023-05-02 14:16:37.221 15566-15916 com.oney.W...bRTCModule net.jitsi.sdktest                    D  onIceGatheringChangeCOMPLETE
2023-05-02 14:16:37.275 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    I  [modules/xmpp/JingleSessionPC.js] JingleSessionPC[session=JVB,initiator=false,sid=8s170vo51l7t6] sendIceCandidate: last candidate
2023-05-02 14:16:37.280 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    E  [modules/xmpp/strophe.util.js] Strophe: request id 52.1 error 500 happened
2023-05-02 14:16:37.293 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    W  [modules/xmpp/strophe.util.js] Strophe: request errored, status: 500, number of errors: 3
2023-05-02 14:16:37.365 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    I  [modules/xmpp/JingleSessionPC.js] JingleSessionPC[session=JVB,initiator=false,sid=8s170vo51l7t6] sendIceCandidates [{"candidate":"candidate:841689039 1 udp 2122260223 10.0.2.16 35524 typ host generation 0 ufrag r0gr network-id 5 network-cost 10","sdpMLineIndex":0,"sdpMid":"audio"},{"candidate":"candidate:3663648433 1 udp 2122187263 fec0::f145:85a1:20a2:f4eb 50116 typ host generation 0 ufrag r0gr network-id 6 network-cost 10","sdpMLineIndex":0,"sdpMid":"audio"}]
2023-05-02 14:16:37.388 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    E  [modules/xmpp/strophe.util.js] Strophe: request id 54.2 error 500 happened
2023-05-02 14:16:37.390 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    W  [modules/xmpp/strophe.util.js] Strophe: request errored, status: 500, number of errors: 4
2023-05-02 14:16:39.867 15566-21946 com.oney.W...ackAdapter net.jitsi.sdktest                    D  Mute event pcId: 0 trackId: mixedlabelvideo0
2023-05-02 14:16:43.200 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    E  [modules/xmpp/strophe.ping.js] Ping timeout null
2023-05-02 14:16:45.273 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    E  [modules/xmpp/strophe.util.js] Strophe: request id 53.3 error 500 happened
2023-05-02 14:16:45.273 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    W  [modules/xmpp/strophe.util.js] Strophe: request errored, status: 500, number of errors: 5
2023-05-02 14:16:45.273 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    I  [modules/xmpp/xmpp.js] (TIME) Strophe unknown:     1683029805268
2023-05-02 14:16:45.274 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    I  [modules/xmpp/strophe.ping.js] Ping interval cleared
2023-05-02 14:16:45.278 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    I  [modules/xmpp/xmpp.js] (TIME) Strophe disconnected:      1683029805272
2023-05-02 14:16:45.278 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    E  [modules/xmpp/xmpp.js] XMPP connection dropped!
2023-05-02 14:16:45.279 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    I  [modules/statistics/statistics.js] {"type":"operational","action":"connection.failed","attributes":{"error_type":"connection.serverError","error_message":"server-error","suspend_time":16,"time_since_last_success":8732}}
2023-05-02 14:16:45.331 15566-15922 JitsiMeetSDK            net.jitsi.sdktest                    I  [features/overlay] The conference will be reloaded after 18 seconds.
2023-05-02 14:16:45.341 15566-15566 unknown:ReactModalHost  net.jitsi.sdktest                    E  Creating new dialog from context: org.jitsi.meet.sdk.JitsiMeetActivity@b0e1a9c@185473692
2023-05-02 14:16:45.454 15566-15566 unknown:ReactModalHost  net.jitsi.sdktest                    E  Updating existing dialog with context: org.jitsi.meet.sdk.JitsiMeetActivity@b0e1a9c@185473692

Log from nginx:

May 02 15:03:53 jicofo-0 jitsi-web[15533]: 80.187.74.110 - - [02/May/2023:15:03:53 +0000] "GET /config.js?room=test HTTP/2.0" 200 2296 "-" "okhttp/4.9.2"

May 02 15:03:53 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:53 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:54 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:54 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:54 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:54 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:54 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:54 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:54 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:54 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:54 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:54 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:55 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:55 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:55 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:55 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:56 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:56 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:56 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:56 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:56 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:56 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:56 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:56 +0000] "POST /http-bind?room=test&token=token>

May 02 15:03:56 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:03:56 +0000] "POST /http-bind?room=test&token=token>

May 02 15:04:04 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:04:04 +0000] "POST /http-bind?room=test&token=token>

May 02 15:04:04 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:04:04 +0000] "POST /http-bind?room=test&token=token>

May 02 15:04:04 jicofo-0 jitsi-web[15533]: 10.255.0.80 - - [02/May/2023:15:04:04 +0000] "GET /colibri-ws/jvb-3/27cb1e9ae80da3ec/1ec74615?pwd=1oj3v9f4rsjjrljd01aurh7i0 HTTP/1.1" 101 299 "-" "okhttp/4.9.2"

From one client you see 10 connections? Bosh is long polling so you need to see a new connection every minute.

Can it be something between the client and nginx is dropping the connections before the 60 seconds timeout? Check if you have some proxies in front of the ngxing that they can keep these connections and not timeout them before the 60 - 65 seconds mark.

Not sure though why iOS will be ok, but not Android … You can try switching to websockets with the mobile clients.

You can add to your config.js

var config = {
....
    testing: {
            mobileXmppWsThreshold: 100,
     },
...
};

Hi @damencho, indeed the BOSH connection was set up via a reverse proxy, that introduced the connection issues. We have removed the reverse proxy and the connection via BOSH succeeds.
Still not sure why iOS worked the whole time, but that doesn’t matter now :slight_smile:

Thank you!