lib-jitsi-meet icon indicating copy to clipboard operation
lib-jitsi-meet copied to clipboard

Error handling - Focus, Strophie, Jingle error

Open bhuvaneshdesai opened this issue 4 years ago • 2 comments

I have setup video calling for most part it works fine but every once in a while following errors are thrown i tried all sort of event handlers to catch these errors but didn't help.

(i would try to avoid the JitsiMeetJS.getGlobalOnErrorHandler()).

Best Would be if anyone explain why those errors caused and what's ideal way to handle them or even better prevent them in first place.

  1. Focus error, retry after x

Error: Focus error, retry after 1000
  at l._allocateConferenceFocusError(/js/lib-jitsi-meet.min.js:10:169107)
  at ? (/js/lib-jitsi-meet.min.js:10:168158)
  at I.Handler.handler(/js/lib-jitsi-meet.min.js:1:31297)
  at I.Handler.run(/js/lib-jitsi-meet.min.js:1:26596)
  at ? (/js/lib-jitsi-meet.min.js:1:35034)
  at Object.forEachChild(/js/lib-jitsi-meet.min.js:1:18258)
  at I.Connection._dataRecv(/js/lib-jitsi-meet.min.js:1:34883)
  at P.Bosh._onRequestStateChange(/js/lib-jitsi-meet.min.js:1:54868)
  at XMLHttpRequest.r(../../src/helpers.ts:90:17)
  1. Strophe: request id x error y happened

Error: Strophe: request id 114.1 error 0 happened
  at Object.r.Strophe.log(/js/lib-jitsi-meet.min.js:17:17881)
  at Object.error(/js/lib-jitsi-meet.min.js:1:23478)
  at P.Bosh._onRequestStateChange(/js/lib-jitsi-meet.min.js:1:54925)
  at XMLHttpRequest.r(../../src/helpers.ts:90:17)
  1. Jingle error

Error: Jingle error: {"reason":"timeout","session":"JingleSessionPC[p2p=true,initiator=false,sid=c3598f3a49b2]"}
  at ? (/js/lib-jitsi-meet.min.js:1:220487)
  at I.TimedHandler.handler(/js/lib-jitsi-meet.min.js:1:31407)
  at I.TimedHandler.run(/js/lib-jitsi-meet.min.js:1:26948)
  at I.Connection._onIdle(/js/lib-jitsi-meet.min.js:1:42980)
  at ? (/js/lib-jitsi-meet.min.js:1:43150)
  at r(../../src/helpers.ts:90:17)
  1. Received P2P "session-initiate" when should not be in P2P mode
Error: Received P2P "session-initiate" when should not be in P2P mode
  at ie._rejectIncomingCall(/js/lib-jitsi-meet.min.js:10:60084)
  at ie._onIncomingCallP2P(/js/lib-jitsi-meet.min.js:10:57951)
  at ie.onIncomingCall(/js/lib-jitsi-meet.min.js:10:58070)
  at a.emit(/js/lib-jitsi-meet.min.js:1:129707)
  at g.onJingle(/js/lib-jitsi-meet.min.js:10:200299)
  at I.Handler.run(/js/lib-jitsi-meet.min.js:1:26596)
  at ? (/js/lib-jitsi-meet.min.js:1:35034)
  at Object.forEachChild(/js/lib-jitsi-meet.min.js:1:18258)
  at I.Connection._dataRecv(/js/lib-jitsi-meet.min.js:1:34883)
  at P.Bosh._onRequestStateChange(/js/lib-jitsi-meet.min.js:1:54868)
  at XMLHttpRequest.r(../../src/helpers.ts:90:17)

I get following errors too but above ones are important

Error: Strophe: error: Cannot read property 'addListener' of null
  at Object.r.Strophe.log(/js/lib-jitsi-meet.min.js:17:17881)
  at Object.fatal(/js/lib-jitsi-meet.min.js:1:23529)
  at Object._handleError(/js/lib-jitsi-meet.min.js:1:23139)
  at I.Handler.run(/js/lib-jitsi-meet.min.js:1:26624)
  at ? (/js/lib-jitsi-meet.min.js:1:35034)
  at Object.forEachChild(/js/lib-jitsi-meet.min.js:1:18258)
  at I.Connection._dataRecv(/js/lib-jitsi-meet.min.js:1:34883)
  at P.Bosh._onRequestStateChange(/js/lib-jitsi-meet.min.js:1:54868)
  at XMLHttpRequest.r(../../src/helpers.ts:90:17)
Error: Strophe: TypeError: Cannot read property 'addListener' of null
    at s._onMediaSessionStarted (https://beta.pyjamahr.com/js/lib-jitsi-meet.min.js:17:128221)
    at a.<anonymous> (https://beta.pyjamahr.com/js/lib-jitsi-meet.min.js:17:128074)
    at a...
  at s._onMediaSessionStarted(/js/lib-jitsi-meet.min.js:17:128221)
  at a.<anonymous>(/js/lib-jitsi-meet.min.js:17:128074)
  at a.emit(/js/lib-jitsi-meet.min.js:1:129707)
  at ? (/js/lib-jitsi-meet.min.js:10:67184)
  at I.Handler.handler(/js/lib-jitsi-meet.min.js:1:31189)
  at I.Handler.run(/js/lib-jitsi-meet.min.js:1:26596)
  at ? (/js/lib-jitsi-meet.min.js:1:35034)
  at Object.forEachChild(/js/lib-jitsi-meet.min.js:1:18258)
  at I.Connection._dataRecv(/js/lib-jitsi-meet.min.js:1:34883)
  at P.Bosh._onRequestStateChange(/js/lib-jitsi-meet.min.js:1:54868)
  at XMLHttpRequest.r(../../src/helpers.ts:90:17)
  at Object.r.Strophe.log(/js/lib-jitsi-meet.min.js:17:17881)
  at Object.fatal(/js/lib-jitsi-meet.min.js:1:23529)
  at Object._handleError(/js/lib-jitsi-meet.min.js:1:22920)
  at I.Handler.run(/js/lib-jitsi-meet.min.js:1:26624)
  at ? (/js/lib-jitsi-meet.min.js:1:35034)
  at Object.forEachChild(/js/lib-jitsi-meet.min.js:1:18258)
  at I.Connection._dataRecv(/js/lib-jitsi-meet.min.js:1:34883)
  at P.Bosh._onRequestStateChange(/js/lib-jitsi-meet.min.js:1:54868)
  at XMLHttpRequest.r(../../src/helpers.ts:90:17)

bhuvaneshdesai avatar Oct 08 '20 06:10 bhuvaneshdesai

  1. The focus error will probably get resolved by trying this method https://github.com/jitsi/jitsi-meet/issues/3543
  2. Strophe: request id x error y happened -> one of the reason this is causing is if internet is disconnected or lost to tackle that i have added following code (which is not working to catch exceptions)
        window.addEventListener('offline', disconnect);

async function disconnect() {
      try {
        if (jitsiAPI.room) {
          Object.entries(connectionListners).forEach(([event, fn]) => {
            jitsiAPI.room.off(JitsiMeetJS.events.conference[event], fn);
          });
          Object.keys(jitsiAPI.room.participants).forEach((id) => {
            jitsiAPI.room.kickParticipant(id);
          });
          await jitsiAPI.room.leave();
          jitsiAPI.disconnect();
        }
      } catch (error) {
        jitsiAPI.disconnect();
        console.log('error leaving room', error);
      }
    }

note in above snippet connectionListners is just object having event name as key and function which should be trigged when that event occurred

other errors i was not able to find any particular reason yet.

Also to catch errors from global handler i used same snippet from jitsi-meet that is

function _setErrorHandlers() {
    // attaches global error handler, if there is already one, respect it
    if (JitsiMeetJS.getGlobalOnErrorHandler) {
        const oldOnErrorHandler = window.onerror;

        // eslint-disable-next-line max-params
        window.onerror = (message, source, lineno, colno, error) => {
            JitsiMeetJS.getGlobalOnErrorHandler(
                message, source, lineno, colno, error);

            if (oldOnErrorHandler) {
                oldOnErrorHandler(message, source, lineno, colno, error);
            }
        };

        const oldOnUnhandledRejection = window.onunhandledrejection;

        window.onunhandledrejection = function(event) {
            JitsiMeetJS.getGlobalOnErrorHandler(
                null, null, null, null, event.reason);

            if (oldOnUnhandledRejection) {
                oldOnUnhandledRejection(event);
            }
        };
    }
}

I was able to catch the error. but its still got logged in console which the sentry reported

bhuvaneshdesai avatar Oct 09 '20 19:10 bhuvaneshdesai

Is there no answer to this?

DanielMcAssey avatar Apr 17 '21 19:04 DanielMcAssey